From 23839ef28bbcf68feeb19300ecb19a88e5b96ae6 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 9 May 2016 13:26:18 +0200 Subject: [PATCH 001/407] Initial commit --- composer.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 composer.json diff --git a/composer.json b/composer.json new file mode 100644 index 000000000..21ae9cb5c --- /dev/null +++ b/composer.json @@ -0,0 +1,14 @@ +{ + "name": "dias/export", + "require": { + }, + "require-dev": { + }, + "autoload": { + "psr-4": { + "Dias\\Modules\\Export\\": "src" + } + } +} + + From 91b2bca533a93020c65ca784b8b95bc184e8800b Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 9 May 2016 14:36:48 +0200 Subject: [PATCH 002/407] Implement boilerplate for basic report --- src/ExportServiceProvider.php | 37 +++++++++++++++ .../Controllers/Api/ReportsController.php | 31 +++++++++++++ src/Http/routes.php | 11 +++++ src/Jobs/GenerateBasicReport.php | 45 +++++++++++++++++++ 4 files changed, 124 insertions(+) create mode 100644 src/ExportServiceProvider.php create mode 100644 src/Http/Controllers/Api/ReportsController.php create mode 100644 src/Http/routes.php create mode 100644 src/Jobs/GenerateBasicReport.php diff --git a/src/ExportServiceProvider.php b/src/ExportServiceProvider.php new file mode 100644 index 000000000..9e59a16f5 --- /dev/null +++ b/src/ExportServiceProvider.php @@ -0,0 +1,37 @@ +group([ + 'namespace' => 'Dias\Modules\Export\Http\Controllers', + 'middleware' => 'web', + ], function ($router) { + require __DIR__.'/Http/routes.php'; + }); + } + + /** + * Register the service provider. + * + * @return void + */ + public function register() + { + + } +} diff --git a/src/Http/Controllers/Api/ReportsController.php b/src/Http/Controllers/Api/ReportsController.php new file mode 100644 index 000000000..1c5fe37c3 --- /dev/null +++ b/src/Http/Controllers/Api/ReportsController.php @@ -0,0 +1,31 @@ +requireCanSee($project); + + $this->dispatch(new GenerateBasicReport($project)); + } +} diff --git a/src/Http/routes.php b/src/Http/routes.php new file mode 100644 index 000000000..495d8327a --- /dev/null +++ b/src/Http/routes.php @@ -0,0 +1,11 @@ +group([ + 'namespace' => 'Api', + 'prefix' => 'api/v1', + 'middleware' => 'auth.api', +], function ($router) { + $router->post('projects/{id}/reports/basic', [ + 'uses' => 'ReportsController@basic', + ]); +}); diff --git a/src/Jobs/GenerateBasicReport.php b/src/Jobs/GenerateBasicReport.php new file mode 100644 index 000000000..b63ba2251 --- /dev/null +++ b/src/Jobs/GenerateBasicReport.php @@ -0,0 +1,45 @@ +project = $project; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + DB::reconnect(); + //DB::statement('copy users to \'/home/vagrant/test/test.csv\' csv header') + } +} From c77c869e9f728e3af440c8978ac3de637bd781be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Langenk=C3=A4mper?= Date: Fri, 13 May 2016 13:05:10 +0200 Subject: [PATCH 003/407] working beta --- .../Controllers/Api/ReportsController.php | 49 +++++++++++++- src/Http/routes.php | 8 ++- src/Jobs/GenerateBasicReport.php | 9 ++- src/Jobs/GenerateExtendedReport.php | 51 ++++++++++++++ src/Jobs/GenerateFullReport.php | 51 ++++++++++++++ src/Scripts/basicreport.py | 64 ++++++++++++++++++ src/Scripts/biigle_dias_logo.png | Bin 0 -> 44338 bytes src/Scripts/extendedreport.py | 31 +++++++++ src/Scripts/fullreport.py | 46 +++++++++++++ src/Scripts/logo_en_tr-height72.png | Bin 0 -> 14950 bytes 10 files changed, 304 insertions(+), 5 deletions(-) create mode 100644 src/Jobs/GenerateExtendedReport.php create mode 100644 src/Jobs/GenerateFullReport.php create mode 100755 src/Scripts/basicreport.py create mode 100644 src/Scripts/biigle_dias_logo.png create mode 100755 src/Scripts/extendedreport.py create mode 100755 src/Scripts/fullreport.py create mode 100644 src/Scripts/logo_en_tr-height72.png diff --git a/src/Http/Controllers/Api/ReportsController.php b/src/Http/Controllers/Api/ReportsController.php index 1c5fe37c3..c9021019f 100644 --- a/src/Http/Controllers/Api/ReportsController.php +++ b/src/Http/Controllers/Api/ReportsController.php @@ -5,6 +5,8 @@ use Dias\Http\Controllers\Api\Controller; use Dias\Project; use Dias\Modules\Export\Jobs\GenerateBasicReport; +use Dias\Modules\Export\Jobs\GenerateExtendedReport; +use Dias\Modules\Export\Jobs\GenerateFullReport; class ReportsController extends Controller { @@ -16,16 +18,57 @@ class ReportsController extends Controller * @apiName GenerateBasicProjectReport * @apiPermission projectMember * - * @apiParam {Number} id The image ID. + * @apiParam {Number} id The project ID. * - * @param int $id image id + * @param int $id project id * @return \Illuminate\Http\Response */ public function basic($id) { $project = Project::findOrFail($id); $this->requireCanSee($project); - $this->dispatch(new GenerateBasicReport($project)); + echo "Job submitted please wait"; + } + + /** + * Generate a extended report + * + * @api {post} projects/:id/reports/extended Generate a new report + * @apiGroup Projects + * @apiName GenerateExtendedProjectReport + * @apiPermission projectMember + * + * @apiParam {Number} id The project ID. + * + * @param int $id project id + * @return \Illuminate\Http\Response + */ + public function extended($id) + { + $project = Project::findOrFail($id); + $this->requireCanSee($project); + $this->dispatch(new GenerateExtendedReport($project)); + echo "Job submitted please wait"; + } + /** + * Generate a full report + * + * @api {post} projects/:id/reports/full Generate a new report + * @apiGroup Projects + * @apiName GenerateFullProjectReport + * @apiPermission projectMember + * + * @apiParam {Number} id The project ID. + * + * @param int $id project id + * @return \Illuminate\Http\Response + */ + public function full($id) + { + $project = Project::findOrFail($id); + $this->requireCanSee($project); + $this->dispatch(new GenerateFullReport($project)); + echo "Job submitted please wait"; } } diff --git a/src/Http/routes.php b/src/Http/routes.php index 495d8327a..79131d70f 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -5,7 +5,13 @@ 'prefix' => 'api/v1', 'middleware' => 'auth.api', ], function ($router) { - $router->post('projects/{id}/reports/basic', [ + $router->get('projects/{id}/reports/basic', [ 'uses' => 'ReportsController@basic', ]); + $router->get('projects/{id}/reports/extended', [ + 'uses' => 'ReportsController@extended', + ]); + $router->get('projects/{id}/reports/full', [ + 'uses' => 'ReportsController@full', + ]); }); diff --git a/src/Jobs/GenerateBasicReport.php b/src/Jobs/GenerateBasicReport.php index b63ba2251..67f645a69 100644 --- a/src/Jobs/GenerateBasicReport.php +++ b/src/Jobs/GenerateBasicReport.php @@ -40,6 +40,13 @@ public function __construct(Project $project) public function handle() { DB::reconnect(); - //DB::statement('copy users to \'/home/vagrant/test/test.csv\' csv header') + $transects = DB::select('SELECT transects.id, transects.name FROM transects, project_transect WHERE project_transect.project_id = '.$this->project->id.' AND transects.id = project_transect.transect_id'); + $cmd=$this->project->name." "; + foreach ($transects as $transect) { + DB::statement('copy (SELECT labels.name FROM annotation_labels, annotations, images, labels WHERE annotation_labels.annotation_id = annotations.id AND annotations.image_id = images.id AND labels.id = annotation_labels.label_id AND images.transect_id = '.$transect->id.') to \'/tmp/'.$transect->name.'.csv\' csv'); + $cmd.=$transect->name.'.csv '; + } + // system('/usr/bin/python /tmp/basicreport.py '.$cmd); + system('/usr/bin/python /home/vagrant/dias/vendor/dias/export/src/Scripts/basicreport.py '.$cmd); } } diff --git a/src/Jobs/GenerateExtendedReport.php b/src/Jobs/GenerateExtendedReport.php new file mode 100644 index 000000000..b20c38184 --- /dev/null +++ b/src/Jobs/GenerateExtendedReport.php @@ -0,0 +1,51 @@ +project = $project; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + DB::reconnect(); + $transects = DB::select('SELECT transects.id, transects.name FROM transects, project_transect WHERE project_transect.project_id = '.$this->project->id.' AND transects.id = project_transect.transect_id'); + $cmd=$this->project->name." "; + foreach ($transects as $transect) { + DB::statement('copy (SELECT images.filename, labels.name FROM labels, annotations, annotation_labels, images WHERE annotation_labels.annotation_id = annotations.id AND annotations.image_id = images.id AND labels.id = annotation_labels.label_id AND images.transect_id = '.$transect->id.') to \'/tmp/'.$transect->name.'_ext.csv\' csv'); + $cmd.=$transect->name.'_ext.csv '; + } + system('/usr/bin/python /home/vagrant/dias/vendor/dias/export/src/Scripts/extendedreport.py '.$cmd); + } +} diff --git a/src/Jobs/GenerateFullReport.php b/src/Jobs/GenerateFullReport.php new file mode 100644 index 000000000..52782e748 --- /dev/null +++ b/src/Jobs/GenerateFullReport.php @@ -0,0 +1,51 @@ +project = $project; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + DB::reconnect(); + $transects = DB::select('SELECT transects.id, transects.name FROM transects, project_transect WHERE project_transect.project_id = '.$this->project->id.' AND transects.id = project_transect.transect_id'); + $cmd=$this->project->name." "; + foreach ($transects as $transect) { + DB::statement('copy (SELECT labels.name, images.filename, annotations.id, annotations.shape_id, annotation_labels.label_id, shapes.name, annotations.points, annotation_labels.user_id FROM labels, annotations, images, annotation_labels, shapes WHERE images.transect_id = '.$transect->id.' AND annotations.image_id = images.id AND shapes.id = annotations.shape_id AND annotation_labels.annotation_id = annotations.id AND labels.id=annotation_labels.label_id and annotation_labels.annotation_id = annotations.id) to \'/tmp/'.$transect->name.'_full.csv\' csv'); + $cmd.=$transect->name.'_full.csv '; + } + system('/usr/bin/python /home/vagrant/dias/vendor/dias/export/src/Scripts/fullreport.py '.$cmd); + } +} \ No newline at end of file diff --git a/src/Scripts/basicreport.py b/src/Scripts/basicreport.py new file mode 100755 index 000000000..77db786d0 --- /dev/null +++ b/src/Scripts/basicreport.py @@ -0,0 +1,64 @@ +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt +from matplotlib.backends.backend_pdf import PdfPages +import matplotlib.image as mpimg +import datetime +import sys +import collections +import numpy as np +import os + + +prjName = sys.argv[1] +transects = sys.argv[2:] +prefix = "/tmp/" + + +def TitleSlide(text): + fig = plt.figure(figsize=(10, 4)) + plt.subplot2grid((3, 3), (0, 0), colspan=3) + mid = plt.subplot2grid((3, 3), (0, 0), colspan=3) + mid.axis('off') + btleft = plt.subplot2grid((3, 3), (2, 0)) + btleft.axis('off') + btmid = plt.subplot2grid((3, 3), (2, 1)) + btmid.axis('off') + btright = plt.subplot2grid((3, 3), (2, 2)) + btright.axis('off') + mid.text(0.404, 0.5, text, fontsize=15) + btleft.imshow(mpimg.imread('biigle_dias_logo.png')) + btmid.text(0.423, 0.5, datetime.date.today(), fontsize=9) + btright.imshow(mpimg.imread('logo_en_tr-height72.png')) + return fig + +pdf = PdfPages(prefix + prjName + '.pdf') +fig = TitleSlide("BiigleDias Report") +pdf.savefig(fig) +width = 1. + +for transect in transects: + f = open(prefix + transect, 'r') + species = f.read().split("\n")[:-1] + f.close() + c = collections.Counter(species) + sorter = np.argsort(c.keys()) + ind = np.arange(len(c.keys())) + fig, ax = plt.subplots(figsize=(10, 6)) + fig.subplots_adjust(bottom=0.33) + ax.bar(ind, np.array(c.values())[sorter], width, color='b') + if np.array(c.values()).max() > 100: + ax.set_yscale('log') + ax.set_xticks(ind + width / 2) + ax.set_xticklabels(np.array(c.keys())[sorter], rotation='vertical', fontsize=8) + plt.title(str(transect[:-4])) + plt.xlim([0, len(c.keys())]) + pdf.savefig() +d = pdf.infodict() +d['Title'] = 'BiigleDias Report' +d['Author'] = 'Biodata Mining Group, Bielefeld University' +d['Subject'] = 'Histograms of label distribution in all transects of a project' +d['Keywords'] = '' +d['CreationDate'] = datetime.datetime.today() +d['ModDate'] = datetime.datetime.today() +pdf.close() diff --git a/src/Scripts/biigle_dias_logo.png b/src/Scripts/biigle_dias_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b5a4222023a4de13dd2bf1b9a54d8d4992d2eade GIT binary patch literal 44338 zcmd42byr+X(>)9c36cbNcNrkKy9F2=X3zjZ!{87gI0To#;2xX-26uw{pusgra1ZYG z<9)9Cx$fs9yyu@;>#Q}WdRJH1?%G`)uC6No4ucc}2?^<)qJpd@5)z6i5)v{o+Uw^x zl@43x&p#wCa=I>B4wf!oO`I)|q|6;mEvOakOg>v^T9}x7I1N}l|D$wDQC14%zHrd` zCWTzb^?j4uh!xu#lOZfyv+rVzC`|O9!aD^;$)RzMxPnZ&;`B@d;eqmQoE(7+FZu=P zlg_kX#G(+Np(!wW(|4$_F)<~lcel>23ucg0chPRhQM#iAA^Aoz=#eV%)QuW}y>!Z2 zZFJOhzK$wioj?6HSOVAC=uH3J+colg+BcSc9`pa-pD`x&lz`RVP(R1N6$vnn$(d9# z6J^NAsC+yKnmU3GF_O>Qy0J2?Pu-L)uvAQs(m$*5sDVOwM@L6|@9$A6c!r8S#6MGR z58s+uX5~pds*xFm=%N0LI_V{~sJ77Z6CKmvA%(XpHj4WfmeUZ+8(!|A@EH=192Z|Y z=9=NrcwS?*rWUD)wxr|!TT20Tq1Q)+2lWSA)n*BZ@h{5WDQ%zn*Cq!(-uOiH3bGk~5IhK7d4j)pa#%(hB%n*@Dq zYEg5~@D@u&$dbo%gV9Dbfmo?+p(A_q$-WP^MNt_f-jbro~VkE9`n*PUt(`CwQT zA_Kn}+g<-YG~)gD)7nU@Tu9eHbl%&7Sn$Zxrb&+kqO`PT(h)qRN3REx@bDOR)xn=) zDi*?+c|qwISkU9jjbM6BVnwI-$g4R%U3ASPT86kZn@(Fo@A^a~a-DHETrHOrFEM_u zbruHP|7!?I()}%l?>-YzW;&~&)o_c#krs=W!_K>db`t_h0zNraN!?uOYe#xv9Zz$N z?;vb)oZe92%dYNB==Q1!I)NO+>S{6Ynkx#2m0>lORdo-{NIz*7@nzL)?^VrX7zCPT z2Tcc8m{4I)u5Tz&ia#kee)+F$Y)YT7mFwN$Z3|g>px5xa9?Y&kkzCo?3S*i)I9J9K zk`Jcs!67e0!vZsNprGgMqeFwF`4nVVad0U+J^Fcx<-i0H4QeTX_`O$y1XR!zg#5^9 zddf8?nOfV<_?ySqU;pb-G^|grPD&)=#RX_c*9Tb`E1$9%gi;QO^O_RybK_dj(4qdd z3buY2w?V+S^1}21Xe{Wsu@h@k)Ei-F+nqT!cenZ9L9RRS)naPV(}xMk2OPLT^~Fcb zuSwxpldCv2EhFb%Yr#-Mr0M@g_OnePr{8?L1>rEQuxWDH?KJ8K^2to|7he-muR%(t z>QXK-6)_6?_rlD6xVX$XU3uQ$@hEd>1NY#y`LRv~@(MvH=noR7hr*3Ub_3~f)bQ56 zb=Xnh*2!(%O|9Z6Rr7rNm8{9Mi7g&zB5}p+m4{n^m01sefxgRUO zjliLFeO(}xNcbEqAH(3pAqx-ET{5@?6Rbg|^a_$L{Vrq`6_+KQ_`C0gMNny_GC}xs z7RG)?=XfwNb3!U^XoU$uzXjA7W$op^7K2d7l;d7z&yr*)*y z#(@QKGePn>!&Xvp>Qbf~Ka|?v`DM{lQ!UOZzU<0VE{V1H{PL7m5E@gfp!wC-khG*} zDkW?sbYIB?{`O}7;9A*R)N;m;Y5aB?*1dSPm5JQ@eBPG3I>&?A*gXJOr~S?`I11yxVgka6z^a)N8XtwlKyDNDg#c@?U! zcFVfRLTmS8((PE2N9Z-j6gAiHYVP}@nA-NK|9<>GHYHIUyxtX7j4jAc9;G4*)4}`0 z>k28R6VY9H(jl@SG7~^W4#$|dEjavYYVYs+K|avLO66bWpjPh@Y+8A z=fA-HkBN<1HZN{H5?F^aQ6?`!%qkiM6NJpOVD56-09~anf$?EUM2<; zh99`Z0&YK>%L1M(wxlMoonVh%f0t7n6*>Eg#^mSs{)4b>)mNsEBad1O5?{5%8PRai+*|(J0$2-`+m-7YE{>&E(XId_>m~7%t za1neEp`-+92+>d2bjQA?%}(CR1#oh)4^4akQ5)3}9^QGVM>z-G`(SL!>*pO~8_}eO zh7te1;vFX##gvokC7npLW~cwI#-cyYAjr7;=k}gA?KI;8Z|g*gXGSfZ3o2&d$I&A8 zzdk^EjiT=E;xAw~q^T=zx{#ITMzaY=!fMhM)mTzz=A!jEd%9mbYiuExpJoO~uLfg- zL4P8C;3FJyp}ovphhK|lzi<3F+aLDYA+3|M{S$X!Try>k62g zN+8}|e9|s_*_+uC7dZp1FU3vOz|D%QUKj=Ep>ccM{b5vc{t6WT-}R==;C3*_Wlz~y z)xP?=`F4=7dC`XIvx-O$wAt-YxHfJUDOjG&{lVZIMqePJ(lN|&SqzKnn<7z^4VJ2# z*3LH$VJjo8tzEtf>|aUBuW}j!Fr(i@;J}NdYx$vPmKm><9IX=faB6;itjOfqho-tB zM%unu-UQA2b&A4ZQK^qu3@opJm_AeI558yaA$opIg&jpFcM5<+!+dVK<0~|8!IqO^ zUvk{LCIP7;G?r*R8t{35=4~UynD5Q3VVv)iREx|%UQ7}_jziWl?m%&#l)>Jqk0ijd z^>SZ1->hSs^tP+ocpXm~FGlXUfJ<$>wr%PAIcYyF`&bvH!mA{c^V^wxZLU(7mahK! z^fyRIgd$0oChZ35axdHs{zF|fs_z}lj)k}&98evtJfE{Y(tfse^WyVQ_3|D;+XbA- z=v21}T+tQIL-fh5gLU-Z+@?YE!8(s45P`m5M`~GocOGYz%ki$Yjqg=x-W2wSE4B#5 zC+Y?ugIz#|5-VldLq2Cf0Z;m7O75$d<3~@E{mI4`rNP_xe9QmYttv$_&pXR1%S1l4Ad4#Gn5F?(<@-Acdv`7e%2O#plZ)Omt6gX_8v=?1OOyP7d;KdWCNI+yi-Or1DvcT=0%56U}CeMFLz%>>k7qd^6U%u6hwq9_J3_ zH-B%oeJPKK|7Q;UbNW7VM=cIAGaz=6Yzan+X#aQ@cRKs#6d}!P&ixAul(k}cm z6?uixu(b8@y47i0b3_0QO1kJ+rF zc!e-Gs}W{=fyR^Uc8oVOs>*nb*$RI6Nj0D|yl$4XAy{?6q1Nhz4s&j8`Mc)X!iGbk zoPJqYL>=zZzngI9-lMUYPp?V}4u6+CxYlmjbgIu>pr!#RnK&!<(>p83^4uCwdJMq$|PVXMinsL}m;BRncsRQOo3O9>_Qn+9IC~Z3(6q7}TtG>K?P|)h|9q<4>}Vsa^o` z9x{D!i&5)mmP%qip)GNiWbFRMb6D<2aW|osav`62((?i2_@BJENA0(?>=4*OqO3If z@@~N1i0<-9m)(ex-_?SQPf1JP{@A8|G=nu><+s;n?8`2hKeqcJeV4@^n0{)pmXRS@fhu#$EnD$Ra;Qq@$l+ z>aM+vfG&^NH2mrC+6PdJqxxbtvpa~?;_Nxdt zpEv(ft6+jYqF~cE20uS2%9lkM{GL?&K32VTf@8(66PNs8pcBG^rBQxxEs~fHrEET# zw6WKR3*Ai>$n&StF)5caPuL8fiP#>GMnv-r|16Jk!Uz5iC%}j*8ZTlkE|Fy*J1k)b zDZj|=Kigz3`I8S~S1u`K3X4u?ECA5R=mC_g9j0E%&W*x{{tYJEzhooJ%%i^)pjud} zhTh&UfLQ;FtFr6V%f2xKtaY6MZt3c5h$`L0p z7J^jaYyvFpCTPAHEW#j$+d{SDR-3RP{8mBHd6d|DPK*MzG#_4p~IF*qboPoI+`o3ip zYFr!ahEWKVV5K1tsXL9ESYB!_-tMR9{8Scd(O2r3)y~43XVra1W{W>%W0Nzr5_=MQ zq)ifYYPjFe`vP*;Vt{YK#W2lVx1#Jc;P4e4$PFKX4dH0wl$|#9rl1i%@Sw-H<+u}+ zmL-OBhu8lSy%9fiZ-(gn;X(T!e4q5xi4ra_;)h%)3tB}V@W6e4b!=X8Cg!A4AnrKtcKA@8lOr@_GcCW=*Hk5PDqj@RQNB_ZvngU|OF2mo#w9Jdil*J|oZ zxfYa={&s?HD@BbPn(X~hJKB1@8_My->W%qN?q(DE%iFo|Yf~`h0c=>$YWJx=M?UnA z(`DzR+4!spU0nrpiH)S_2lz6fRS4rpEAPVSjHznW2g-s9Vi=_I2 zlpH!y->un+?ey%6ct%<=`E3S}0Ua;PwA6HBujyCAvIWhQoZI|<#WU|^QD=yrs_|+Z ztVTp4ZE&}O8q z9UJjh&NqC%<46WBB?^s>(3JIJGGezg;N}B-tbpHq7&NkCSSqjRYid0Sk5MFJft4Y)__XCy8$UrZ@x?x8X#ZA1-|PDRQ}etWZ%+o_>Y8@cUNw}|g5tRZ=q?ZBAP zhq%kZNkV$X#&!qWv^2LaT#A)kQGq=UUkg9y5xcLKNe7J&2vysr2YI!R_L;stwG#XY zbHDI6F6DdbgY%lqD@-zV2vqQl*ID7vODjcD_cjuoE`?&k^}Epp;bwIlT17$vSP`4^ ziG|QYghR10lR$UTE+QYn)Lyk(!FcTPkCaon7ak)6a{{3Fp_*fb*-w+iGpa9!rZgdoFlV~SstBTMlbF|>49xhi_rEU822({NgE;vu_-a14h4wn(~zc6Zagyv zqH~>rw1B*RAgi-i+-Smn`ru(CZw09mZT%*X-}k5ER5QP!+9%Hal?xjx4T-CgySPkk zLyyrRH6w=w{x7syyrGZnBTkui+7gM*V0o5m$8Ex<>h~Z17NMPt0UvV{sD**9VHxGs zi)Ao+&BTJ->+FvLYnLny=&qsX=rp@8H9fx;!G-B`9Kzx?fkY$mHT0VU_)B2lqau2* zUz^sW0*IgcE2Gy3uGh-{XaK~dr-3g;9_2jMl4X__w!d9Pbi8gqe0@K8$!F3Y&PYF1 z=Og+`z_oJJmj{(KiLn>KXJXcs z$NVrjHxK=!$>5K=3StvF-GWrxrp@%vzL%ulqW^^O+jqO2$du{qMk-6iVwdyyud{o= z?{1e_GpVd9S3nZKn%QMUmK_^pl5BTEujC5z9CGY7m(ta0lqmzzWzH^G% z=4RTbrI$+=XE_fL#DM00tpd zZ77tIzlBsSWf3#rQ<=7F+@-aUWU2f^A2RaZjxnu2-%JDs{odyGw3$@}g`kTXe zQe<@6lKOsEDG|$=8k$`*n3(CpVY7Jl^5oFI&$i!>_P>S(TMg-7JenaZ7TRLLg06CM z?%{3|;DrrtP&}8*n^z&_?|T$5I(a~ZfQN*Sg-WzR)*uQ1y%c@wsz_#Ep?ZD`erW_T z-AZgC<@$=~UE3_qKR7sT^AS1k6`=-p*;u@EG%&gi`S{sCF!7ehfsltQ{k$b#8K#JM z_Q+y;ZN62f3lXC7$q3)^+8Sklp*0qM^4*+00+Jj!T@BZ}NdxOJT*Ih|pTlfq@y^Bb zU(+tzRy^8o)j2Az8vIOG-)(t+O)1Q1JLNsQSDbeh$t|=)3y~C{lLpZ3!X@On%E2b) z;$*qjO1eu7wP?kclN+C@A){eE`z3)+d4rfznanwtVYgm$hZ{fqkJf2E!#}2`_^Rh!Y*AJELcoSyK=+KfC zKEEh*=C4+lN{($5$SkWb=29l;4h%G0P<;4e9n^un{C0^HD_nLnwJSceht^jjE3?h` zNh|jbZz>+kvOc=AZtk+G2^_i%D*d%=dQrBQPp%>GR_RYsy<$|ou%{l~>dln<*B(s^ z7jsD!Dah|nOv!j!rLz`;;cQUWK5(!QGTQ}Xh{VhCTE{IfT;=f;lG9Fwg+?QMU@3_ z7|)J*o!cn5EvO+OBvy?;@LznI?}1 zQ)IMN*RM_H?A?SCgUGC7bQcsNdm}LN2IG40Ns>TgO=Vv+Iu$h9qt`a0z1$RzFrnu$ zENn)`u}!p7lo9zF#Vv?hwOVFTCs8~|(eHV(@yDK?w3PR}FipCHLKHkA$e#-!L zzl8nN^Xx*OyOv$D{r9fWIpZpcGHm)c?s<)Y#t<(v% z1k3+bt4=EN(bBBbr5bh4<$F1ibOb5dQ9p@bacv`&ExRk>ztyl?$+j(x+du&;jl!Ga zINYc(ZauGl6duGNEF_>8u%*+(!sRo-fBh}2YDY40WBPo)IRE8y=x@_T^oISo9G07& zjoH2&8c|>G(fjA*a|4UoBiuAK147-V$YdkkJ+TY4=T9o>M3(QGTTk{IFTlHeB7W~T zaY4#Ej(U?!sa77fW4O#&<7lslj3yKyY#Ii^7F-6HS)%H7FN^+|yBuspxHj!w;Q$0% ze4DCOgy=v&qq}(V;MaEe04Q)*&rtDO_|^2cqfmM^=~=MeK=AC@zQT5@#r?@YtWPYh zD*;t~%TPfv!D4gT>M`@nq2y;4gwx14HMzX{3fb#BFIdEm7^7=lqWzA(u-Y*K!JIpOeLOCg9-#CQ$9|*o5h`wsA5imz^*s1(n8~&~A^~{M?a2drUsp*df9qK#v z{oe`2Tzu5@3=0&l#=rrx?9#clB@60&W=V+}FIKP>J5WS=L`8v`UF`wY){$x-i^lLi z#F05!$m@Ro8U-N|cYk~eg|q*&FuTz&PpzKM0jj1s7E5quO6vyr8uCc3;HQm*&u&K! zl7F|Hn<$>HrKhhAE-tRdwR80;*`KR1`&BDHvi5vdcPZjq_&ipT^2rLW*puJGlSkDY zTP*KEnA1!QRq;BXi;F}8KoqTlg&GCS8z=?>%W-jq1=mf-b-p%oS39}NyUz0n zB?56qq1^)N4B%GgcDJbVYW`f(NDL6!sWiCgE&8+g48``9$h0T4?^_Z4pOO2o20plY z`Jp!3lT;U5!z1hwM7g^ySf+^?1IR+76?Jp`>}fprWen)@Iztps)mNDG`{ zO_Bug5Zdd@0GC+wT)Cq1JuupPUu_UBs@o!B#QizUzZtfk96X;>T|@~N99nv7yJo-x z-p0~eeck2&CV~>);<$!rPGw)R)uj=1qM@Bi;j&j-h0BZXxPSX7GS7F(3T6mXGDDA+ z3UE0Idn-~|+9I7Rt+avkEiLb$B*Bkv0LXEZcc~Z~A@N-)mg`8dVAOACH_M}Y-q>&V z@Olmv=~E0R7gwk8ed9@mz4Dmxv+n(#toY&MKIE?7_*0uX)y-_C3@R37Mz8Wqq{_jn z*;>1IS3d`9f5`C4YrVVuH3wv4?$PCx(C21qxhr zUag+wHDq}wq7yi9sb%$46%jJX8ff!^O;X;c`co(AJic%G{_W-lXK+%NlIyUQ>V9N7 zhC*N^d&Ty(UyX<7>v#(OOOBVjm5=cHAbCkQD`$S36Pr^Im43dK-(wz?pNmr%v+Z8Y09be|8exI3zjt<$dD?cBrooT>;xmLWceF1t9te7hG zD(t5k?CxHSlNAkGUI{?M`k|EeOAF9W$^OEV=nGIz_9U{cJdUzpg07DgbeHx7P2Gm3 zP(N0Z9QjZ^M*SU#ZfH|=;4>5JecRSu>uN5hC|wt#P3yZ=`I}pm%OVuvq+pCk;V5Aj zM?tBW6DZi$e}c~a;Q)`|d7}{Y0m4uEEOeUeD@}O%xF#;b^ULwKazK3dXakrz_v$!2 zS_I9^6@!s~gagD2P|=c!WQl|yjoGDBABuaZ_Q^iN znAHBzG;E~xt-qI}#FFK&&)Wb`pL*Q@v$(W}7c)wY+(C=>eA^ps!_^;eI;=JQQ*8D> z1P+*wS$YH5ey>m>T^Uz63Gk^&{CT_!{bZl!`T4+3A(}UQJ4JGCB03;n4GpW${>!iQ zW(}3MxUVyh-FGRND)JKE^L9Rx8ivmg@dYoK;RpqkR#xfy)$9g&2wF#vK#zW3?Zfx~ zoD(f)SMVTwN<40P&)ngI0V~`xh{*Ne+&uN{9uzz{yC)q4Gz19a1420iD6Tq^05}G6FLN~2tXlZzv5=97dZw;GG_rhw zhYMd~K%Fw*L3=}>+2T^=QxX9`M{7;I2k&-^1M#xbOBMI~V^meg;+Zqoq`};?r(6b$ zvkQD?`bB{CWkvCj+b!hCel0Cxv(1c}a4qBj6k8b{6KkSrd>LpXKn=%dgePT1 zktS-IdpTxZGs(2!%I?BXeSzPSKHpbL3*IBxB7Xap{!5hlc3tA;|!~roT>wK69 zGLpYl%kxjn$+Qnesb|e>H(X;^Q?f`c+FWg zu&7||td4fmNm5{3{W3Q=kp}Ft;L9EUezO9Ey>jmu9tBw$ z$!=xxpJDSB+snx27fAl%eahXB$>kFsR{AWZL}0BnSY2tY$F3d4B1hzi#}?M-M5<;T z-Cl0dAXJMz%vPE`*BsiDE7MHM*tTN3+)>3JV>oB`Ts)6=O+pW3_U{KU*Lais$+Bbm zi+D#)M|M#?nkt3~G5!fy{80DeRF5Y9l_& zm+C8VmH=-mhD`@C!FexOes!~k8!!lhY8_}o^{_awvgPM2Ram~Q(u=q`$EcMUoG#)w zpFG#%p9pX$OZbB8iakvou%ZX@6}7NpiWAeQ_jQ~vaNmte;2vY4l-`cPme$c?eAWC& z1iRK5?zZcbmMO{r)d{Emn!7k~0aG8k^$moOY34}k<+9qM=;^rX=+m~tctxE#LP&KU zhZJm;+t{wauq4}CQi<{bw(ysxWMr`IA_B^oABv#>?KlJ_=1VL5Z2W8AB<3k|XRf%6 zC}@~Uj4deoj5=M!zK2guNrFQsVhyOBD(1_zWRU&FEjxQYO=o$iMRk`c@e?!aP7;eV z7|CHLEc)F{!nyYFheNM5U-u;>q_I#dQb%Y-J$fZPeBgC6c{K}VD>Zf+K+ax&;Ab^N z-5_~YJw6&KNA#hWBun+e0Am;lAbM`2vg0eP(Q_ny19)fM-Az|&i3<+iV6f6#I@u|- zr@WCY{Or3VqWM|f6H~}Se&i<%P%a&N9}q3*sx2xejZ4oqLblEZnyt`~M9ALrimtqq z((Rc5wfJ_5R|6txSH76xFog2r6zE>yS8&vU+?dr~;U-nQQ^0kitg1~J+n9<@_wY#B z6j=L0g|v&zOD|GA^^O!%Yr?+c%mqu~naywC8k4$p1*VlSUS1y0sZ8qgJC3z?`E*Gb~aaRwhAu zJ;R#gIX-l%YN9j>cyaU*j2ze%!~XEB{uB)>Htp^BcoydAL;Xrn99{oaq>j-zgFto{ zKFLZ=p1Se%hwN_w(sy93o(=$P4DDX5u>#I1{4F9#8pcEnwZ2WdJ1%KjtvYJn51D-W zyN9(_gSCUxsNY+Q{ujnYKrP~lbY&5u7%j8ambTl;=h!^u3n4WQvH7!JCHs}Kbkqalyomxn}AAL zlt760)HWXEZBwAfV*E|D|Hih~mK$I7O;&VcY;iAo`XIO0AEFP!nqTi1EAq9ryjSe| z8YRzuCg<3-rUG8QhQYy4)d!{RDw|s{J{A$0kvub5b;Di#(`iz8^iGUVqMALZMMQy_ zHQ=ytQLrEDxe*)}Il2s^80~YP6$H{6ed{Nh!*bnrUW;jwJkkO>| z@HQ61B~2y_fdQc@^%PWol29ii^LuI$VHCgAb#C|4Fm>3;y6PmRi;^4XFtKvlfq-2z zgeV=nSZ^S0!NL_D@!>g4&`F3b~XdVznn+*=m4S3PjsRdC__0-hWRp1L%f{d^I)ZKnx)A&&; zDF_(NohWBPSjax9Z+b}{%bS!UoL|&}TO^)ul}nFCyJ;0J`a&uWFep-aJdoXyk+6|x zY{CG0p%F{^b2?X`simWGAd&;#5R|W}-mLTL%1T_@bm6Cb=9#=f*8QeVm!Ap5@i#Ev zUAN1`>{zN}KcmOb86B&=(|5;T`Q`lh`^&TB!AeFpL z$@SXnrzVVR{~7(lFS%ryNaa<@#Z4ry|K(!%qfO27ohAKfgqMdRAuW%&jNr{G3{1DVRP7 zFD1=$U#{aY3PQo{QLt5u3*6tH_bLxE4vjA2zbBH0nAqwM=%OpD3{|rSCx?=8u!$Lz z6&YyV<9J0Jqb;RcH@AUP5W{7@* zybyZijH8;EYGtGn4@JD|rWHR|#@;UT?DfEzN2_%G0QG~h2`EPisBQV8|ug<7sMEnjz3bl_mfT6nf} zM8im0GH?`H*;1;kg+5Jc@dlqpY9*=Qv*LBm@g=xXFu!#y8bS&&q^Qkigbwpw| zc(ucbR7o9U=4=kFq^3t{*t3mHdKEW%|H_HIjJ%|+U{F+ia|fno2p#RrVU(~`UXL@g zEuAYtO7MBZ$kqJv4d$>{*?lU%9o~w~L%DNhk9@@n-govbpQ=|4&yAWLr=7Pkyf@0} zMz7hA9z+`j7pzBZF>WpH)vNulG+s6}~)uE31zIytm?@G-~s zQk@2mA;ozKV>gUQ+nXYxgBPxUmQDs&j2f2@5SyPzIqj609yzYLR>-7H! zJEh|_ieeEmeRv4GI1P@Znkw1BWp&3T5WSAT$}-Q6zzV?tQ59Iz*{i3ODGhqb!zGI} zBW5ISB6h6`F70E0@jF(YQ351omjh8YGig4{VNjWlt?v$dtD#dWDbt;S=>0+kd9zYC zZZ^`MR+1}tt@qOydrZ&dvMHzK+Vf+`QPoRl{R(h-&1naPs7kdY-m2Ynt~mWY>WTTv zsi}|uW0c0Yyld>0UQ9&NL$VkV0P}3vrez72BF&|EufI#B>U|DErCnaaXFcshfyC3k z$o5s5-lw;RB{1Twd$>0FMM~#b_;s2vT>6I<)8$s#I3bo0*3h&B1ZwG z3NI)F%y0Bp@cEn{K?%IYhXhOUUA%<)8H~l+ma(!S2Za_*O7uQGwX$h`AN1`2iiS<$ zAJrb`s@m|mSnNs|Ko=)yn%1Uw^JbZs*F97%WGgTI{m)Z&U+sP)pA2azSE6It~0g%4yvY;_lkzK^lG zjXp`icfL=>QGnw$pLC;(6gMwr@A8!;Kd^0qrEyFdKGZjoW7|zrjVmVwEet!y5@>D= z)JHrK$l=+wJQifh6F=#s;5~OoO(=c50z&kvex*h=nONMu(U8oa+x>C}>c_yCFmB+I zXLoIY0>ydzx(+)R`uOx`3)H*CTK&JQ`*-75CRcLO`>J~^Okb+iy_F8Wr_kvI#40zwX9Q(+Uk{t z(g*j!Xuv!UT*RD@@ayS(eMg~8_r}2jF}p85Cv!HM(t*!-1-swb8=5lAH7Aes$V8rNM&t>? z-Kw2dZnPkTo*s@WPHp^Iqr!{257-+z??me4gWLh%TaIuHqAyhrGgpRIzMQreduXLS zs0uvat0Tk*d)5~9kV`!;0~r?QKx^Wam=YTU2`>WCP!DhtJnxhc}k0sSKD^0ZjuHiHtlf{CnEVk8?MG4_k)gL=Nr_Qyx6BwKMFBqhRfw=jt z_!tq3#0d(psyPgna5~9z(M^QMd8SU*X~FBDVb)>s&-wYY*ZFb}Kk>mPQ)?q6$@Ody zvZTVgSf^n8Vw!+3IK8sT!1(L=)z_}T@44haf;?J!A=qG5Ms?tvA1uBIz* zcY7;IbqHSm;)Qt$Q@?oi=ESZ!2|M{8u+ z8_mE_z5dy#7;63(T)|nm8e$xNxWNnG)3gD*+S?p)a>(-({B4jKRX+RRXCf(NKJ`B8XQwX~W;8V=~g4&>UAfHbe^Z z_wz|PFnx+j>1yjM6C>T;Gocni*>(D4YHHdvbk#>+h^J@z+*|Rfn2T5HG@3$$QH0u^ zlJoA};C`b816rCmt>nkVbTRG3PIz)L<>Gq$!FK1gg(=yc{%Ve5mJuIe6tkFl@j_FZ zs^RK)sev1J{JZBi`zo&rV=q6E?aK)f)kTx&i#!gwU8m-sk#IIOb1%g*gvK_|NxksM@CwTgUSOZZ!Y2I^lNL!>DF6zuoG z_Y&l3(KD%qK^5JD!&rZAi|g(n`@WBrzyYQZH-oC&@31pRWwKk@&pw}?szVl7V8HyC}cb3hqCdIC1t()4h(lG zYsynTt3(O~fNDamLvuF44u}jig^rN;43~{M4E~_VTsg}GsNGeJe zCK`eeHCUqcvnY9F)hh?AzQlY{gGfoVzZI{)q8xIS?WF7;hq(P>S2-Wjx+GMzQqj=V zz8S=YC!|JsdEyTyFvsGY7ZB!$Q_FrVmoswXKfa3D?-zql41=+0+hU6&CMl}9BQA#q zLN+00sgzvPVFl8so1A>X`q%a`#s$G~l43dVL@n;Mt~fdXo7jE=ak!SzaW0^wlYW6! zt^{{!AuEp>ta&78l&TLtI+3dDQEB>n9eLGGq z$sqX-`g``d9qkhf*K()$-GKI5=8YN_0KG87MKd!lFh8za%PryajQ+fa45m8S zL)Zc>p?)#@i_;thC-i~HUJ!LtF>Vk>Qg}T4Jt7N89l&9NaV*C|c!1UXBn$oS!{j9L z0;#fRCrFoKs{N>28s+T|4~Wc~S<{;dI^l)~C3j|@2sLxv>7e@xRW7NfqTyWdn8bL_ z5uycRqvGXV_2sq`I@~&Wz79%aO6S)soGB_&#T_@7OQp{}uUseCkf$vfox&r-k0EDC z++}rzh%Ni#1H@0mb=VC*wf=CX!z(y2>T;~*x5OGz98faL3Fto=r2&45X_f#*>38e6 znwR0sOKm=up%GmoD;C8CtWy}=VBqU0et-?IsUE~w%{RGTA5orzo4J&9I^2XSSS%ed3%o^1nczj^W)j_5D!Jk)p4k5J)9wg2xuuBquuT1`%V< zhVdA52cyOFRpD11q!RoS2SSvWDg0R9W}#@>lGy+C3s@DbhEYTJOFMec7-k?@28nJ#|U%Odr|H=B5<1V3F$;8@T%J zn-7CDidxEp{Ywy!saR^cVr*J%1^he5v-jWsRv|z0Hcc7odjCw{hxdH6QQNc`Eyn7# z_z9$9E`?9uP*yeGdz`*szu@L?P~m$2HJ)_E@gX;n&L?)a)uiHkQEjbIU|eNg^fB?} z{JP<&VK|79ACUjSo(uC@TCg|?$hK=6u zDsqC{ho_4e?hWgKsS&)(^X)(x@psRm0L4NK1#M>O6ONu9sA!hrE0^NRs4H^aJGd{j z(i)*dc05sE-@Nz{0~J}4y!XHP7P?g_9xH?naS1;U`!+66vnoj9QN_vL)%qeU9Kn)t`Ssf}wXil?AyrWPMx@e&a23R4X3!gwH!{pRg*9@4NR%&0<`-IhKKdEPn zCdO?-g(RaC*q^J^_5Iut2jspmcw;3XvMLSOgg!yOtNT+bGdPQ<&G9g!xwze3&r=l+ z(NoC(Re$|xy0%KADmtgS^ka2MA$~d+JCyz$;m!dL{^O~s5zve9h^>qAq#t)-^W+aI zB@P7%_p1NdpB`&P7zZ&Hiw?p-e1FC-z;V{$vsi6__;996w)e+(G1*$do<^8&_!NOv z%Xa5R6=yT-lxa=nCxU+@!InvVH4mWpX9KX=pi8riY)5_m7YsY~&9E-b`WrJxSa3kY zK(ElnSqSvLtIBazgylEGn%`>oIpjK>ZE_-QdDA3&PpQTIaK}!11!rWV{U{A0r&Dh7 z!c+7jf*=h*kO4zfdeBli-Ss{z^b;;iCs$dupZ&n!LK>joe7GYp^IBolhDizrf05;5 zGYMqD$KwSi40~kEsLPux4`{)E3nzC$x_W@e!NKWFcsv z%GBSeCprUTmBzaK;M~jacYA)ZWdwR%q1Qj#O7yg8NR(7}UT`J}tLKQQL7iQ_ zDF!EjNc#lW?5=%3NbCm`VMH6ocZ=klqWTX7jPA2ve&p38PT9lyO$G(H*|w*y&fh=Z z2N0P%e!iK=JaXIZ0(#-nS`(aqLsFPoxSi+N?u!KOU(>1j`A1)RwJKln=cKdqsqZvt z#?}tEsh)2@KLh{#P6Vbks``2DCf)^*ubpFWPw43~sxdV))#}sL;J*2xYM%hKk8nrG zPy?1TBFB}fK})2RhXsoUVfEjcyu&sCVrCe}Lh4&KW}p#A0d zV4F(-XQXx6+*?`w`GKyot!X1sepDEyclKw&(rnH zpZLCFeuQME(oJS_a|2i&ftib11Y2^-##?6iEFH=hBT4dY3Zea&G_sqrXxrYN{So;; zD+)LL#Xm`X33Vyt{)C68CHN!m%M+3eGvKuUgXnB3lraDxubb|t-p}4(3J=IsP=lst zS**-fChEswb2xNx2OOC@LrNEZa!>ct)7Z*dzu{C=RCI&jFgf#B)H)iDIUjWKqarcG zfW01yH+QGcK*V-*s@mVc-#z=x&(-RCTaOy_JH<-=3!l-wbQQGLgCBq!i6AREH(K^Z zkQBmwRG7M2zL2|=F36jN!%T!o;KlW2Z6G2PyzRu*$jud69VWd9gK@`My4SLEu=oFpHwtA&__; zz+fH1{T+}%bBz=U(U$YC>o1ooIEXGPUsA2@vak3w!378VlOAz#SF z{TiZXMv)3zI#ABS96k(W=2adW5mYFy-w&jm`^5k{ zslk<+qj5K+?jn$t8i33t(G;vRypf2Hj6{A>ZE1|Abm(Kg!E3udO&`RC)dwHok-Oo$ zw-WpuYIXqJIoX!foV_Jen+E+0Nx%*qf z(I|s$r%`)p_bI%*Y=LS7os?1lC}t;HU0%M$uxLAVDxqn^s4yt)#|!ZSgex$eCzCb` zlYrMZLm7rMnW>uSl`vw`68X9_#y_MsdDS8 zxnio}7{yEd63j}>q;#w#(|dI)zuMn%E}HZWhKP!(-+A+1^xPiH7B`0jg!mguPkw^x zg0c(x)=O2Ry!xZ6W7K4dWWnJyQe{oh7HdRg7+%9TPc7I`wuD_K)F2z5IIn#$qiH@G zp{k!uYeF4B%E3v4JUS@-B%oU|>Q!|xk^k1T0AhgyOLdUQ`4X-BcO|^y%D#Z#hUFZ! zgtv{kuEu2?wJ$bgEheej!}__5DZ2C4bBYR1emB}K9#I&Sfe5+LPHxdhuXXYgl{=&} z-{0iiHQCk57l^fL-3f8bJ2mgWp%iQ=FEQDZ-^Q6*45orI1GCmHTD*mCQ?#-Jeh8k> z268@50{2lHJ^|*xVi$^MYeV{O(Vz-4jI(l20rMOZq0&SU{K+$JD1g6iml}kTpba7{ zKfhpz_<&LVV%<@0s}|KH?orev)ghp-q?acv`wk>CkC_ah5!VHXV*jAAZ&gBN!&qMl z#+Kn${Wcf@{TB!C%M(g~a=?GU0T zz&4RR=nzCv!JtKs111m_mj?rjF67D7rN{L*mA1K`&u)CQLHIXHdJ{9lVj9aXm)Qvrta)iSC*k8p%(Y@vIMohy~ zn;XPQ^0E7Hb$ugXh3Mu~^1iMILPq@X)XA~j<0lze+eIxn*}l7Ss`zgEeJEIi5j))% zC2r=la8D2ZPABg#qn0(6*G`^L+gPQqZpjJ7M%6|{Bvov`mZOu=x}GF9?ym|=oQf_8 zUF|5RiI0344J8}eAd@5UgFF2DlI>5ShGbL|11UAMwpP0EE8aaRfMv0BNPQ3m6ljhd zcTlxQp6Az^X5{8;e0E8jsZNa_V88l}jPVkXHD;jlZqK|*Y3lZ@8iQ!?% ze*}wp>r@469aAPwdq%>0OGfvT(wnfad+D6VZ$>XU+Mj>^@_{9mI^#C$8wISluS6x7 zu*NvH;8wJf-?IqI9QI5>AAY&J@(+0R{eC|gJ&MhpQ>I>R??uvuXu;2m{wnJc_yZtx zqf8 zr^qzw+l9oGl_|JvnouT|6c?*gqjm7Q_0O77${L*yN6YF)$E8fh7B?dm%S|kRUWyKVd~O*j&jQz2t|mBB_TD_qilw-q=K05Tln=D|jPnO_rY8o(7hZW3E^Qo6|zp zXHxj(ufWt7$>th1^?#xP4{YgXkl?`YFl;kj?0U7W+~jpxjK+hRU(S~BwA-w379jLQ z`ZqV=^6I;}41MnB+0PTDL0wE{(E6E7ot8@3a?~vi5L(mam)|GiECJh-Hq{4QibF#~ zuX*9?0+(i%zrD^&$pe1SJp=2(Xb58dV$~65G);=tmzO~0FjL!B3;LRi3S*0bVxNSF z==wW7J`4KwL4Uq#usBt8=m=5Kg^#xZR7g|YP-jW;&v-9t1eP zkt~s$kK4L+>tEU-etm3Is?I{Dbj{ApFF+j~>^~Og5OdeTNaV7y%zayuTt>AbZ$nFT-&}D~w*|!34 zl1~VK?x!CZ=ZUdZO`b-U2;=I@fjcPgyQA`a+jv#FWauZH`Do3jTzpHGZjqVN=mkhN zMaL@}9FZ}!45ZW)a-@?PtXtQ}?P8am!eaS(4zsmjx<$<8lFWd460(tRHl|v5nApFJ zChy?E_ax8=%-Y&$GaQ8&b12(|Dd$dTj#6XI4a24rC??|}DD>#*0{3G|5*fcrg`7=! zla;s9K=EPkw}#EXi74b4`z!fogW1JV)W{&x$k*(*@fbCNRcG4?0i>-q)T&=YLJ;LR z3xz&~qbSVCVv8ftfD|JsXH6!k>XG2a zqGBZio^Lnt8Mf|LSsQ!w*iNG*xR4zL8@f}VYM@#x z9hq|#aarc%uf9C=zF8MF1rd25tj-6`;6TZ(HutX;XqldTp`?_3L$%1WENE3W=hPgM zgs-DzKdXX`9TS>G4$6kjWoSb;TI-Qua|KuUyN_b51GKd(m8UXPql<%bG>4`{>8a(T zbqe5V9e&l5PPL|>qq7cykn=Kj#)(BWsp;v=vojFI05Uz;J$bXOmz$tKbcAvwYWOqC zQeFB5HH9F+94VAW-f2BN3WJnd0`A+*7_87vIQaRx^yQyS(jJOd<`jI~p!zMsgeE`doV z2T2Xf&o7`pR~T)Jc7?L9jnD~4sxe3nr|o&YkkLE~MVRK2AWU!mhW%W7d->sL?OPR$ z3p^^acr`hDN)i9}aGS=+u*nqHk3_v@?=_I%x)aPGZMS24h#$C@Dc|0ew790MhG)~& z)ocjE8jBE7(k4oNt8`xaGerOnWne9!oi_sSo0s{i`b(fO8v6>KwAZ;GSJ&g9_ODoE zk}Bzcjs@sOcRrvC|8U=NHdtb0l49x;-PTcvpireNPNsRUL#;;l#w9TX36O#D zS@i17H{xG;!V9A07(0>qXaUUDs zYcZY03qjSDmXdEje2!~V|Bp!Aj3PHb)nN4zv5tu8km^et0@p&XY^wt$@k+zApYM{<$}y^rj$Tfq z-H{!M-iZedgKfnqXCqYOQ~wN2_O4X^0mG~|$$erGRL4kDNv`97=@&M6No@Ky)?@Y~ zcno#NnNrUPlbpH$&pd*g)8GsV0ujaPmv??bC@`%=5Q(K@uqCDi2L;r9uvezC{t-X( zbw)CI6qHJ$(bfbSo3=QO4(D|F*+D*jVKVz-zoo%r6n6Ul3!Ik8@&_2+1$*A3KP~&8 ze?xp}`rtVG$M@968>@=b^51M?Eg-UF=2$F*nzYY%$aLJj6R-&W(iYS?5iirre@3af#ETc1Frsy1EpdWGEUgKdL=e*4{T3$4% z*|HGG-tY*90Va$dLO6G605S;aw?%8!hCbq!eCt&N7SG!-=jKBL9T}F{WWkK(Wg+Uh zrVzIT7b^OAs$#3)k?R0}znuEQgX;H?5}8LWQx z7R`ys>>Ds5;e)W@2$wgQIdDJ^HoQT!6Jt|te_hgmn8X9TkUN;n7qm$-{9-b#Ilf5P zy`CMCB#27oVfmIuP5~@)5Tk$t#$)XL(Kkhgok5gJ^If@&Z^R^p^rZEABf{IwYmEA( zskdIDj8?Xs%$z@(nio=c5yi!uLZb^SrIbUk35v=I_OLJjG*rDP%m9j|1Elyi^@aeO zF@5QS?dM7EmALXFveMj+;ytEHEfGPuWgHa}| zsk>vQ$wNrXa@tS~Gye+HqBP?xl$HnbO`TE4fq|M)e;PlHin5x6S|D5BtOyv(J0k%h z_Xfn*SqsY-p&AlkyEia8`|=sS+^icxwu!^nG|zek}lp*4ZceHW|sFr>fy)B7w-UOCH?)PU(a(F)!X= ze+RMR&q;F`)1V8TdWYOPaOXn*-l6^{yt=`hx+^!PqgM2!%YhvWd#0FCMoRS=MlK42{9Z1X3={>F^~l&8Hlvq5AhgJk_myoG)!Prrh~LCI!%sm zsI}X_tKe1i9d;AQ_S?iSh7Cw&;uB3ddrWM82)Z#*sM zp8Brh%6)C+&Bn%#Qy>rG=i7x`7!AmKIVbiwo>QWKJ$L?C$cBtjvnfyDwKcH&gIRxw zCStNHeXkKfFUI@cprTROBA0xdkE3><;V~pV-QRw1U$sb9b-#5(om9V88?2Qq{#I*5 zDy_Drfq43J;{a4DgiYEMM96n84z|`!(Q+LDQpx2G|1Gck8C2k{Y|A)$7WHQ(l5+e9 z>Mt!%b3#gJK_Wt3Sh@MLAgq<1Dt0KP1=JMdAm*dJ9*3pi6jC0iew|31tZt#%rpf_d z+zS&Ao7Wwksc&O{xtcKm>SCis8rdu`iYLBqlHBXRTm&{*P78F{jL1*bUXFyo_9jB=R$3rhqI`re|2iWKuss zCS=z#cc#}ooRGm_SV(Y2vP>Y^%L#xBJsKXAo8Y%qFPC4B>(?}plT5+O*c3O-=y1c= z8Y$wYW$6@{>5iErN`>TgsXzE7(;Go>^Gjty_R12-fCegJnb9+s$;2^}+lbSp%g;+m z!LyncIujfhk$Q$vQ+~#wJwFsrbJNpXl3jFOm`nbXQt&}XUp;9OdmhKscZ9)~?OONQ z-$x6Rup4>KJsZfd*!;+q^)`cte$RxTCUtgR)$S|wnmrSA4H}YIYMlIV9`8>citG4O zkjApjK^`zNTkxYg&wZW8l}a+>3&;{=%IjvKF~^4^OWx@0pd820naWLE(&k2>HY`!p zhM8g$NyVy_y7Z@kKumM%&^|L%^RvHX3dlI!%Bj(;5fs3CApxD~ck4;SlP?L19r`b5Ri;H3cJu{KA{{qoRjME1*T!nrMD83j8UaCg}&v|AICh~@RR!^kG)NQ%ff z3^205%4#~;F4UbnO>9e-WJ&?A3rcswZ`>jnXFn?|D%!o@hjm}V!5JXhE86%)y5LOi zo3wf1C_3&@B;+2?6`FkM78CTf=2i;MKET_+q7)uHwjF?T{BNX8AWR)V^fw6Lb zF8OEIK0J-x)m|Ij{n8qLe@Ux9LGIrZI!5;#co%hP8+XK@Gan z{x;*4{4`S+HB2qEbNn}A*_)D5!6#W#UhF+4-Wq8JOecnPncrnAY;pvh?z41NuNkc0 zHPT=by-D@_@(j>ern-z(QW^p;3*BLeQ7Ak>Bdw~&RsxTZXN>cjkg1r*C%4w|y9CeX zTVyO5Zn)U~y%~#at-^%$TDZgoLRvAGf zl&q$kDY5=}(9N;B#(HCv^2aR)7US5RIo94pa(Cg5QV7tMembp{oG-H0`ZW}*;1_uQ zc;Bs_K=Q2OwY3jdns~iC=RLCQs;KWnhUl&G(7Q=LNa3LRyv^AZ?f-Yx2bJqRB@+S^Lm+`^n$ek}byG0S4{%)Az?YzS7G$TmJ#fUXp z8KcyWlPy5-R=9>o%UhOA266rGUcE;Gx|%j7Mi`6PX^1*+rTA2^v$Fa^WHccQBu*jz z0?D!_gcEWw(O;8XSB31FAz4_@I}Sw~JM*=mAW&D+%o%JU@m5k(?R<3dVU3im0+^g} ztzp2xRo@sQ9YD?*-6uKkBOq-ENJU1M3ZJ+irwwfJ+bP(u@CbdJTVMS?fxx(ydv&L?Me55CDDtqHl9U`cFJk)YS=-Ydpm#RZyEW$msQvg*Wfy z%TW)Q6X5D;AuF|ag%DR6#q_kV${a+@iw%1aNqpUv1@sO#zTjel}Z zpmIc6r9P{XM(SbufxvXid zoI)6-sZU7BwK#mmv)|kMyZ3$sH%p^8-(<5HrIu$5`*M#p^Dijhcpag6KR{q^&kuU> zeV>U&N&fgU=0ykk{Hn@+;}5?)e~k1;At4a~9v7N$!^1Wm&iC2~NTYhnGDwMXqZzjq zsS&VyH28+DY&wYEp#r_%e%T(NylnO*nuYPQ0BWl{fqhD%KL>pNa$Y39FL!vQ0p}I; z_fHKGqwa|)ra^))p!Uj!wp^FISX9MQ_rn*Tot0!JQS>Z|fC1zL%=NB|)zn?rm)F;v zslAvFYPPLGikYPol}Zg{V++MmtzjH`gxgjH^CSX+=H+oA^^(8>f;p>#3yTGM{%sk6 zhK85!Zi<$Eh(GU+eM%~pt7Xijz)Ub6S$VcYB1j!*VKO7Zwgu85nTDz6M)-3p#j@gp zbg&OM^07De^DD)ysmKO;fca}q2k|j`#zJEqw4BQ3DXJH{);b`14XaAeN1A(JZk;AGe>IsE*3-cj;X+!g=YvdFx;*5MN4}a>wtER4(0j}Q<3V|t!B=ULo zsp(rzQL(j8FX)g&!BZ@uQsF0J23vvbt)UoN;q>&S1+&fIie^Q`C>&$I>u8O&t^Ug}73!K4nI7OIy3SB@Zs74~1e8fwyH7(fgj>Rfz6r z%;H-Wsd|pb(-mG8QrjwLrs9xN+se;K#4?Z57oySwnCbh)hc-{%ziM=QlU%k-Ww%y4(}|3!obhpOoySUfLKmyu zwr~1}DrtppvWD8rJfW;dbX|m89Y^W=F0kfk7~ckaM7^$T+0&T>nG-iE1Q{wntK*>W z6r0o=nps#Y+UaE_F=kl46H!qXx`Qk28Lz`C-cLyRC?xEBuAp^@`kJPmx{T`Yf z;r79?lD}xN^KZ??ZH{nKvT(SIxZ~tnc;QXg)yZWl!?PS&&(Yft6?aSAupE+%L__GK z%S_BC@Zj(GWrMZF>2Y5zv-D@4ZZ8;O10w=Wq(ztncj~Y!Y26bS->c!$3!2AR`2%2r z4Yc+c(n|5OONhOhWJUcTpqq45c9jeD@N}cm(?Op_jgCSW30Ge(udp*mz&`x1AMrJ> z15-O-Tdv0UrRCpk_RCtylUAeYR+?CiIm#*}6az+94~Pfs5hvh7-dt)Dv#VSi^WH#~ z;&lu>##IrE58<`9IbyB<%ifH&rx!!QC-De~xwTkFsD5PUmW2dXo0m7U#N&g`xx95V z-OB~P&4CyD;bRYzt?z5`mV>MQn&G@2RM!It4;NrT3Z`c8ZUoSK#&&t>I@SJh4OujR z>G_EzuXxopI5M`L3omg-=J**`&AER#hA32~(y=Sq|n9>merXauxIrcg<{F1 z;p$-%f2&5rw&6_&*M!a{DKK4^jeAJ>HF+^8bSQ-^LWdi$VO-2_7ro{*4^}_#=6-SnaB{XMB=;Y zFR|?S(7g5~k(g)osDoz#3@>fLkXc=SyN&E3%%Q6nh;B0#Tqq=7*de!_lasaz-X50l z3jHGG)M$<2#y2R<`qfrQ{L6OFVw?ZO!}Hs!q2Vj}yztg$dgu24(oLlJZF-^H%gUp) z!>zH`D{#T4)@9={LISIxUE*g^;M~{gqVg5y<$Q6z$UM=$%NAkY?hXSUiyILo=UHOHOyNxU*oj5aFOv?JZYnWaV&gUGRstEGCDUJI<9l`aD=ytg zoB#dSk2W#rqmd<3-V3gfAI~U=g;PzEZxA!hj-_hn7HW>$HY<$LDBbswHf7_2ZW3BK z=37}lFb+hRPYF;-p;NPb8kxm#==Lpd?+1VZX$|2kuT-Ha&<8_cmi~)9cUqSAV?W{u; zC=GAu0K6<<2?8^H7&VuQ_D|mHM65VfjtsFL`QKrOgT-BXp{`d5(;dfsdyQX@pkUI4 zQ4;~ZaPkNGS&Q>B3I#X)cQXuejdbO-gz9Jsq;i`8-=Yi?!1P1nkNaJE29>ke!(`#?>Gn8zar|Z7H=Q(pp zMn)ZpDmaZxoQXO_7W{%Axnv29an@a-&&Q{w!e1`69bfUyuDQ-C@t5fI#qcx!qU>au z7J`WTZYcERTN%&MC`Hd$v+c1x*if!S2Mm>V4FUziX?I1Eg+ zKq^*7M7~u|DorR_@0^+x{4gi-BE%%j+8|cTg+?07g?Wt7O!(#-{;_6! zfo}K-Kp9;~l0mkbQU2H^l<-y`43d&g@%*E1QjpxVSi%LNHd;ugDS?KXOR~ho#jzHd znbAwD5DVM{E(s7=ja1i72Ci4Pxf}hK^TeirXICRM7FGQ7mJr`KB5ra|9np=21dkFK zo(>b6^BY4j>ZTb5k({^}d`7|--aZ%Lri+CiGa)~_uqgk&q^Ovp_}V_VlE`Vr!I98< z^R4jik?XE;828{|4I&3mB>@#LQ!`!Ge35E~&Pn?Beq(Y;B)E22@@ ztK?S>b~~sBjf(L7D!x=S4#J4Ve?hay>=KE5ijgkr>AEIBtz_A9KYJ})8dHf6&GQeh z@Akn}vv4d}OF&!Et1u}@i|=-u!l!b_t$Jz`C%@pAoK_Uaeg10WhKm|C645}XzrX%( z^tXtQ#n)8fQKa_PI3+Tq^@t9Y zL%Gapr~gXACt2VZ{>*RX<96E?>$>T4y_>@R$klFjchT@?>w;bag$&8|KSSZ;l^6pA zFZp&4NgA(X1Ap>bDFMCd!dEe5#Mh7}uKy?`rzX<+|5YNnNpV^1{TTeb6v3yh2L zr=ZVN8WcrtBNv?DvM7<{7uKV0k<1pwtVy;jR7Em!{+4t3jhlaST(#CGYRXlgt`mu4A8 zum10N3*S>H{O;VX?N8L&iznk)mCD=um}e@HgN8l}i*s@ERnD-) zx?YxxQzdT)A+td0papC*@^i1T3U=X!*zZVI7M0OY^`Rdh`V8-^8hto5am>v}SnveJ zXG2P|GxlzN`jJ&h!afMVNGVcm45C!u~-r1$Ng0{MVY%_lK~LS>9)5$j+pER8z;Jh)GVnoQIV*4OwtH+2kN4Su`|PF_o#wNRxCpS`xo z%`oukH|JJNbtEh_K2dcOY9%Y(kuV#if*FmB?w}(cm zw+aINr_Ud;J(&yvh@f6Z0`j}gyiiPy(dTb8Ulg%_ZNww%@Qx%&p30qB+Lu1PSs8y9ihHRa%sv%)jxFAgw0-4Q& z;Y(LlUWc;r=^o(_S~|K|Dw*hBA65@VC#{8c?)@x&LHy1>vrPQp_C8cH0~Z29_wy&?DnVn1YGEx!tQfmF zWOO^x+uFH2o_{z6#gEkB&NsLcXU)hdrHaT>M)FICu<9?Wf$`TP0)5AJ^L$p&_Nh z^nIT-u|j^=7w%2({CT^7_e9ZCk+7|ahVJ~4&H@?ch4ZV#^9lG`%t}&MWqg7&qfDV= z)Rn%q)C9t&YjMcvLE%ktMy%eYL-5;5H?6s^9cn#&Q0#8=<%CaRbso{2w$Lo7ULkQs zpXA0j%WX!9z~I9|C20wtx#j#wMR1;{Z~rQpumuCMqX}Ec-3ChDxoH^kWO^5Xjr&_K z>O2W$Bs(OUh+o#^hvvm}2+edOWpF-vp6bRfIp}ACYeVKJ7GFtq9`(+mgFj*bt#PpP zT0&m9fbnsQk8F>G_wDNHYE{|Nf0+;x*|)?(%O8IxuKicY?=}&GhsBaeLgK75WTyH@ z1~?I~3s{D(NZdmerF*FPk@XF?Q$e^U==B%!4(Q5~ae{udd_%asGUJPCBP(hsq?z^9 zNMt&cUhuVMd=aE=%K44pu5}k3Oo6B<&Lab|)Rp86d@u{&+DT$<1_4!ztT`mF<~b8- z5QX}XXtS3x5$fslF)5_=V~v29b8k9ljSShQI-9kgiqnB2s|zlp^0N=4Pdcw%hF!(C zT4sfb=INxaX7KA`k*k8*94|n@-IY1hGZ1AG?Yj=I=kU~eD5X9zuqZt%YlXIgjr>Ag z_k3GChT-3qQ+Ry=Ip10D8m%=1?n(su$Bx%qnqdR+_)EaPgKXfZlz$@wh&Fe zw!dNO73I##E8_PhTE&Y95?Q2-fj+@R20KDQ64Xgxo|exYyfdlSHKXdy1mdnUR%$nF zS)Ktzz3-Qfx;JWTTYcbzhQ@YxcGlW_Z%+<6vi}+S<P;ECbuaqMiy9`9@8mjKu=*2`C91(oqkK&)k1JuHEF;E9Nj2kI zwNnPJVR3wExKFojppMEzmP?pO=0u?hsRFrG(o9QX7E#B~U);ix-%)#mEaIV2YkQNh&O63);EURt?zGD%3G zv*~-)79RF`uzqQYWO}*X_Ns^bIBYA!u`$SA%~$B;ZS{6mZ)azRRdW76>`L?u&bGH% z`8BaZdCPToD)8VPWi~BW7)$e#O%ocMOT$Q$?yo4!v~g4t?@K<>(a$D8D`(0~8cdB6 z8`W6o=dskv=|MukKERLhTN^S(<8nTv0|-u-~`Qro7g7C#Z0PUli@!gM6nG z(!LTKld_Aah4Tk+=M6D&l>c*@r5Mq(r6ND)oq1bklCrqz0fIN(4`O49=z0(jf-vXb zPPGlbGEO;K;}a9V>tMbX-F)Yj8>{v2g7zi9j~{vtyn3ng0@rZJTc4#={H|_V>4iKV zFWIT!zQhJ8T1_Pmq)@la(X(eB25W2H9AFuoP~izRot;YLJyUgnU@z(3d50c9e~D#X z$~6rMGZDP6HE^W6z|-_mR6eY23(vcg@H9<_sqh{KT-;MyGB^4)5^NSPtT?R1CcYtt z%lV0Rc+!G_%(_Ub3zoX9%jOEQh3<*zjqGEEc2E60ONstx<9Fq+e`@7Fv}>fVLi@QX zxz-4&ZV6`4+0RXu4d=MCRQ#W6xMOIzx(ZOhbxgCPG`Be~rxYP}6m2{&ORZh3)pU%M z4$cf>j%_iK71etcgE+ae!VV(j7LtLhNy9ddV zbI)@JB15Eq>1H?o`=B9!iAyPmz;j>>-P8KrNO`+i`%&HvqhN-G`K=LFdtaTuWE`m) zPXx2xdj0EEHTxPu0Z6(7sQ{VZe>th<^bYxHz%5q0Yd?JQa@(TgyI7`sV-;=S2(0T* z>lehIRNXn+I*VE5eBP0CDtu9lt7!)MQR@37y*t6kW*cnX-^c7dP}8x4N{94h+~n{C zPf~2VT(~s15_f&PpOm`i|K&(_Zz#MfgX+m%k1mIQ<#0~e`&RX(S-7`##r7R75>T9j z6_=EVcj??92~?Sm&Eoszb(kk0kCQf2yYId3BQJdNSN^OO|j_QAxT zn}`jjgS{3c#}EIuyyqRwFz`N@bHkqFu$&1Vy`V$1;uiT%O zh@x;wsh2)yPHQvr4#@K1)SKEGJLR)qya?y9)1KH6@i|eD3+Hhqr*qLo)sl)KWRp%v zlAf&wr-9einhYzE@&V&GhD%OF)tkLM#dXPxm31xlLBnc(%lZzmZ1D;;dyoyjvT)?L zl(UQHBodqNp~VOLCA+eBGF`8zg?k+GR|XF;`g-eMD|klRF`iyq=+R@VJGG#*R8pg+BPLCrUHFjzDiu z1viYG(+uZJa_!r5lPu`<7kxM+)2a{6^%iqP9NOoagn0557K>Al)mCMym@k!@V<%dQ zm2Q{E8!BzHVpfh~KIv3EUR|dC;4YAPz_Ctp(eY1Yk17z8KBC)Jqjyyc zmN--UDWhLGUO6rMGBy_P{1i75ukPgSMCs%7Q;3rfBM4FZF!FaCFSOmIUtDH#{^K?p zwa-zcoZ^t0>CN`9g0pkv*2SvBtJ`lsLKkPOu&=A}(e7I@94Y?WNi&JwBa6!nXTsji zUh+F8<@oaYU|aF<3O<1ki&E%%e!@|tEX$VLTrx6rYpNxiqtLJ;JEs)hobQ3k5?1Dn z6YX-Ty-h}o&pLLgy>o$|-YPPz6G>Y^hUs7CX!4?GZsdG-7;=XQ1!^Q1nI1@$4i@`E z_4*`ZN7cz$Girz%A9n?aZjJJ zn!`aEGI4*gv6ywbd|zudom)ElUv#Pn$IpB_jR>}WBw;E({F#=NmPPhyz9++vmQVd_ zO<<@4MAPjHFZs$w2i2d=ziQPVfw_=Ne0MmbiFw`sEAA;Dn(U)Rk(QQ_7!uMOlF~?b zcejKzNQWYw(nv~7x)B&DT>{dKj?vu>ck=3c-}@Kb^JO2loqB$8>N!W7*XONvpXyW; zzh$>p?M6hI13O+?@0pkI%YIHmA@?k5u6zIGnzLy(h)6VAWZXsk3(MRrW)J7y%R{}h zHBxSVE(!}tVdIj5^Cf@oFMQhLFVA{t_5|F?UwA%UBtu_P-B0w|4PEXAz5kL%6C>(J z!FbW+-?d_+gSjnGupRaOXra=vWxruUT5~YGh40sp4-V2J1RVZ}szqTtHo5ioj!6sx z$f9t39rwrqA!7%2AqE-bKv}NIcIoDoxdFC5$Wp3*osI=!qc%i!u5GQn7SUoc-Dox( zWy^*+dN}YhCx(<9Y?ur4&)~%6IFBS>{8i0`b8IR%)%P=a!7v*NK-tn|ATggN@TXhi8TlzyW5)1 zv!VbeD~=@ngY{{lKu&T*S2?h$Sz(?fWSeio!Cif^&K;4)Y25K@Hu1u5bOL1(mpC9u zq8X+A!A~@}PZ|qO>^Yh0BqJA`?I1FgzDweAbmNx6OR8_~_!d~@-$(X>74H0Te81$8 z{Ib)mEEulmrJXYDRV~63r*}Z#fgPpHv?D?-3GTr~&UJBC>Ty(la&%!rSMy9Dg8JPl zguD3q6_E~L{CMXg)LzeVQ8Dun-D1ZWvT0>rin$V)+u^$0iJ26XS2sJ;YMv~!b+gFN z(UnN~Di9}ja_w-57r}-Xz7%i402`8F>UA=iC++U{0?IVMR$JZa7c?`!u8VX*)Ob@| zi*td9{moR@HLh$8^)k=*iZ_McA)Nzt@84qzXc)k_uTf_Jv`KC(G+3m@2>+>30 z==~)w20&oN*$uWVA*y=VN!zPkaJP;Ra`~vXlkYBK_O%!z`y&@AvO=aZIj$jKm7T}* zykbSVQrL#!NhI-fTPW`eXHj2Gq#X{ZD((qEa3LkI6}K&c5h%FMAUW8KG8yW1k-zX#%3`G> zUSF&q7b-ay$Nd*(Hy!4F5B&SuDY*dnxBn#M|jK3Q2+iUC6i{ELG)(QK}_SchIW* z`L+27w_aRdSEb+M7M$|l4y=Gm8^K{wr08{J2lWpt7D-VQ9S_BQ{@vdK!X4st48lcr zEUjy%kAB5WdlXE?1lM%9YMluPZdpL0>>Jr=K;MO@93ZIp&M|fL4zMNWc#W9Ql_foR zOY~>F))06LDK7ZdxukKn9~*L+j-GQ4yEXX&M@R{~Hyvi_tF*G$t|B?20or40vKH`_WhKd2LtB!q=XYT1a!4#$EKgnjeo z$J<5g5OQ6Ki#i!XBANClcf>7dRtrs!@Zx^EFGffQlbho|!AxEI+5t?%sYymjWz6gX1(6{dmyc+rRW_u517@1DTnm-@CzpiE7~Us%9f061Dc zqRER#eO^Q5q$GaQb8M;Aw6K%u25Pa98)B!B9a5Mm>QNgaB1 zTgliV4PRV}xQ)Hp=26Z%WRRSKYMBT2IaTRMPm~2$urO6Csf2=OT`zrGSmd>Is-MCa znlMCAVF$~Iz9x4gYvI}p?k&0am#OO+G}pz^&lmq0HTojIt8O8O<5b=`b6b5i#y|46XM=Hyv58^)>nyMlOTtIwk7hq+Yl z`9GGL@Wl;$}q0(G)4;GSuiR zJLhf9OZAU_lZG2lA%c5szLfBQ3)2$I)YoT%Cjxa2c6JI#(Qfv_ONf6gIMa93aT__6 zQ`!U|YZ2rI860s#|53Bdg1{)Xj;LR2m<>5A`24f6v+V3@XjxetjW6qn>%21_6)@@n ztHCLCW9|&XohTGkR74a>i%ZwpJc`MAuru;X2<9hr$sj-EZ4>L{O%lv;`|%xY<%JA+|gil>R8F{=wLfD%9Y^we7GpwewuA4Eeg$ ziBJ-xMQxR-CIZBg`<(`}Dg>gBC)Y)0Uu?wz(F1>k6NuS;a2c`ibO>dkS!?T&6vnEB zNhfvDxz~MSOWqOHo>C%lP(@{z`+frm-EKc`5mJGHyU*1P1QZ@-s z+oI|}>Spjxqw8k^>sN;Y_M0!f>InX_M*pqNHIzrOI|kOU;p~{JfMw0CVcVsc*^d+3 zxEyX%v~L6-dM4U0-lkG`&M8Fa=9N1WS{~DnR+_lQLBwNi60EqtRM);zII`Se65aR0 zj_zH^_gI;jcIsX+6Fl*6?(uhNG_$WPDf5Dv$X+Nk^J@n$KAM;bP@pTW6@?*)qEj#? z>hr?`rs~fG448HsF)!$^NPo#NWxknu*cGja97g_cjKV_iKa>+%dFzl`Fv1aVv2E zwof-l>+UIh+phN<5s<#Q`L*ydjMUG+vhw$~eS%%i`0>MF-bXvkJq(oR8$0xRWSH0e zy9{3fqD!v2$Jg*R@9J+aYdKD9lV=;mE_zlYEo~i2`IQpIvWTzn#6OA1)6bHpw6r%b z?gY9;Y(p|!T1}ILT(9Hi)AI2HrGx|XXp8e=xL1!8_>LOMt(;VoqD1pgvNiB%fck!9 zA#v%E5eiey>R#UjE-U0gHnXo`=Wa&nO^T^&4PpEGAm5#kBM?Ps)SiZ-Mce`PG z@dIt3$E2$*0!A1&Za4_#xa&to>WvO}EpFyrGhD;z%CzTC*XLO<3890q#)ZrF36@BCvJ1>>XIWs<_f>-~C5cJ}pf-s`fw_6Xb*^Fkf|6q5h~y;3 zjA!XW)cTdP+00sZuJ-mMXJ$}E^ZV5s@Nvub!I`74VzlpF=pY^Scsb$ysY6Vfnk1J^ zs!0nW+2GLeV@cmq)4uzx8@+Dx$CC~jcgIW6Ovtg*jR*pQ?w5@_Zk8J790WEjA}P?F zRYSOcl@)gLL%xCIQE)e7%;p~MTi~ipNpm6dPAp!vbf^wURGkq`mO8EqabEz-0^+y11I@GW4ZicFtE?0u%J!FUJj`K&bRy#pCJS=u>xNAtioHzR6M zf}zdv3Q)_enQCU2m8%h+>N5@qAxHQCRCMvPY$y>%9j?it{g5XANuQF@h^!cmEP#yc z_agbQ$V&SZ(!@5GuEClury&zqhx;Vj8Y!_b#MtMJ_~mn5$G~JgGKMsY74bc1txhb+ zq*zLEJY%RFgS45Bbe}RhS)kHq-?scqN`pah=nrd!*mhGQez~Ww3*y5mGkyP3 zB;wx*bc0GA#>a8bpdvp}ukqX@XF)Qf$Q5Gk7NF<*_z-cd_qw4f!|jli4;4rGpG^zv z`9`o+m%@w;>0BErf!KF*1xeg0lx-@|LJ_2w*BHap_K><9W7g)?%mIp_z|YTF;xAwn z!H50-P={Bp07z3>zW5IKnYv1vi=-Vgrjb@N5=q_GVJ@Q;UAIMY&PuKA$ZmRPFjjWH zi3!-Ui*7?~OF%F6fXPnl90jbDShnq%Jg?0m(3Eg-fMo}>gX3~~-dI~JL|s|bDH5Z7 z1nmfh86y87SFHHCeZ_rk6n552233-Leneq13@0=wz(W@*CB(Xk?`BW!?f zlI_hp2G}x1RjKfUf$BJEzlo%sGZSWGx7)(db}AqMn#i-*wk=x{@rhv&Uz;cq{M(+ zh7ZRpNOvSJKQe?Hd2NS2T6t+FU&Df7=;gpdOz&k<)TJX~E=v;(>Mx;$&(bII(rz(7 zURJ@iQ<3$wtqESO;U=fQJY^d}^a_C_KDN5~d?9`?LnGMLw}i}AqKiD{H1$CCKTpKXbY@biW);1J3k6v3KVL7 zrmGt1N^DhN^fPA`BaIo_RNF&x|)AC>NTV``lUy~iD^t6RWTUw3um59 z>cVpBi!U#)Km`BNQC%~3_nv&^uP}D@NDp3;8mmClgxowZdq;1xT;k*ke6qklfWy!A z(ofLwGSAHE_Ep?25{jhiCY0YoQcg|B(QB%!oG45oM$hH*?F>hBaCLw83BCT8?o^Hy z#ml$cuOOP(Q{rHui||?lFdpe^l z?U~f9Lf6$}Q?72C_sTVrJT9b(1g{($cmF6Aq1Cki;LF*JT@-{rvHhm5xL##oVAwDL zeCb}wtk#K5>E_XB)e-%5FC3sODkhaN>C9;&d0DXa=nO0RQrY!_$CHbceHL#;nrrlO{mMJfcd8a>Q;d^8C0&c7N=zZ%wf7h89 z*1wVrw$M~9OdL73Fc%c0?!V_~+hgfFwdriDC~RY%ec`2c%ix%qg+s`Ow|BRGw!P}f z2YxR#M=t$%WNbiKeu*<}ZP!8lBhCBZfOq**hqkc2zY?MXbV+E>g{`hRs?EhKs0UtG zFb-2E;980#j##eq&26(hPhZ51#6kpz`y$aC`jg2bZ1#A}DMwbhoUoyrTUxveRSFB1 zI)0xkEt|?zsfHK7HdF{TAHO`Br)xQx$^ZF~euWdm;jaPt{klp}WF7T_YSK8mI#8(; z29`Wk(2$8V1~r@XGmOl0Q=tjZ5tR@`W&XgGiANo%YJDA@o#(Z;skfZ$)?-=Cz;P*5 zdIlz}RIyQQK^5W5lPo>zSx+?c+1F-)-s3hx{|Hsi`f-s}M9_BL13%7-S>8xT?)rAt zTPZ|V2YFR%)w&?(lHcrhZ1`k)j@g#CMTm~TOhZxLCI6eyDuv+6U5pyHqc98#>W8|( z(0M}e8K{A(skBt!dVBED=5WsE{FB-PiGRxE5q@+b`FDpHJGB6J4{@edcD7|DrW?yL z@?DgwRCTh?H0NHHQPi~9XIx+qP}3IrV!G)~=1Xxw8mM;qXQl8Hj|xU~I%XZy8u*rD zi$Z0$vzR)}@3*97iP6+;%jsaj~F4RX#g=F2w#2W z8M)Q|b?Gs-54t_;A2}X~M89Kz9c$U(32Z&5CrKycJj|h$uo>kCjDX064TFD$U?@&jTyfIWzcsRH{ijs zg;V)K3pcxxF9IM}D}vR5RxDMz@mBThn2#lr<7TW=6tjil4wdvUG&FCQxVe_ZH)mN4 z$Zf_+8yz;K99(kZ>UeQ?2p(MD|7yFmM5;%g;Pb3qGX<0oT&V_7JdWUJ+?8mA{E?-c z2ks(C*s-?UDbu<|{wz7~cj~3<)ME`WC%EKe%&a1Zx?PQ*jVC>Yssq8P1eJk9a}eGf zNvk!fntlNLA$@G(QIz}Y;9?^==JnAHS>Q}g;wW`m>8+QNsP>>oE5FEJgTN>be)|2K z{n>JfOCVr&`k~s6(b9oUoPx%CY^bbcsHZEp7+bwWyxq>9c2Q*@n>z)AnMp@5WjqFL zs~^+J+k5kFH;H?V9fq7JVpQl$nIF}Ar2pa>l(tCq5#;OZ!fX_us>DFyXE5lRt#>r&6^DRj@cTGPW zo5)Om7I|Eh%)U7_&>@x|_=B})Q<+G3WQW{Q*V&a>#%ru#>ag)8-1qzk%6mU7I>uhm z8#*J#dA$gz`CLRtJAf3p2K%ON^|6Q&6n6v}^&7q0DGJ`msDH%^4*L=6?eNq>l9A(N z^y)lsjxRp>g+6r6`$(0mG-IO!TSvR3^AwGeKmWdeaPQNkzFSScJHM|&x z%ObE(`{z?>Ia2`E0)0)joUI|4kgi)_UV%*yOX4RnRC>W6>4vr zzm6wZ7M$fzuvs0qMCu7wYg&?Gz- z#hP@5?8TbC?H<62rpiO1%Sc{!PpKZG7;(txuY;ddouw`9-e13X@>y=lPrarq^ty<-0!*R zLSlZ%7=Xyc=)$j`WjI;wgJ|J>8pr^Cx4*1jbFZa4l|b1HC4qjDTPIRF_l|wpD=_sT z@2Cd+vWJ33IC>jjc)0@Z>jTV`p%qSe?O#3#+h0j9$i+To8uzb1Qyx@)4dREU) zOwEt`NZlEA%?jHYl(C8RJP=D-O{+3uv-TqNAHzzCUKyu0BJ&T~3^?8?sy7E(qNOXO z`$kUKvfFDU!c`5Q7%v6-%*`vyqQan*^;J@#m9La~LYjJe$;nFXuF-*Vyux>X86b}A zk*!L8Y^Gxi_DrQILxDFB3uW%C5Lf?e%ukuXS)^!G{*3OBBN-E-t7$CrlR#o`r~FstfT zePlMA@mjrBtVY}+r)>^+x4VZp#FGD9q#hIx5ug;j@4>h0VF5hB)Fj{vk*Sp|@iMp4 z;~D{Y?y*-k99sWT?T-mW|8CwTlDmy`xjp4Cg)CJ?!SQv?r`0O5%LqJFyGWug?MdHu z6_ckGMUAAxf~tRJy1$zl+^3(vz2UtS*~7wFF1#`kVg6>8ox2h)x2Hv8@%#A@9GU!Oa}r<(8uXx4z;z>!Xpo0I<1iIzUZeBFp$0wiCwAzTway>qczp zhWG$13oCLD?cARupHA?l>e2?Pj8wBwb=OJhPhKo~ag2WiL(nBg1#Dvv2pNx(-=0c4 zRb=_bzqJZ!Byj2!*K9bKaq335$x&K66VnbG!mErgjL1@d3xQ6E+)7K<4_(iL`3@QX z4{tdK^kbE3V`*e!x6R0y;@ZBt*EIs7vj&}sT;tAxPj}v(BFT78T=kM0Qb;&l42^ti z|E_0imLKw^AlC`#?3Hgc+L`({Vxmh5XD!4HDq9-!+$-;{sjfczOb zBzOQu$`ndou&Bfn{aqwn7w`?AC=H?+7YSHhJjtKkPmaQmy8k04!qmt=Pw@D9j{G!@ zT+H0|nZnTUEQMDvJTbKjz^6MKrplCrhlN(f%DSRu`1I5)q$L~)c$YC!bTo`jH8gV@0h#C|6t?@~0R&#@%7k~_PZp9-5>f3}#x)XI2E z3ie_RO26^?$vxy6R3eAK1Q6!iYB?N#^35NvecR$vC z7jj+?sn1=a|00Xt_U%@Bb3a-rXIDfaM%f{uI*0ACWT9XZJ%*zwSDXWuY--~8e(ae_ zqxm274~I|C4bgf1yPn|6Uszx2-P&9P27XmIJ=frI*8X;`qrSR~>ncl5eWvwZf7EyU zD&O2TIx3qQu9$N>$(s-RsSp%1VB-g7lr@a2*?YHlsaP?8Xi63H>c&xVc_ zG#ODTI;hF*7{>%=Ty34Xs+ea|xb1F`9M8naXgpVd+~wqEaWx(dFkRPasdo3Og43fX zG5>Jp6hI}poP3arGI)MrmE@u$_`frS)1{uyTx}>wCtKCNOsn%5# zg`=?EMWC|VcJ^jVbDYMWQi(l5b$$O${`Co>;(QS$A9k-hIVORzMxWitD+4*5@2hg! zUX%v#nJo`6MFQW<)Mg{i@+m83BlGbMIjyye?Gk2}zgTMSE}~dZ75e+m6c#_3;__1^ z^?lk;I!b zyy|KON|jX-Tz$sr4E_K<45;0-5FH!@(|MJG3 zR#JpgDx@emoEpuXKN7 z=UNBCB~aIiy;C#xnan$!|M#%@8cC@|T748E2hHq}HlA$esh8DE*I?v1iJG7g@VaSo zmV`o}%?e}ni9{mOSMyE<*CtOJcY3b}uiM%!yp{KAnNuxJPo*&_Ks36Tk5TcjB^^kz zol))owZ||Q;rjF)n7uMVzXThEE|X*>y`q=c^sVzk(*<6m^B>KY zbN=2`dbWa>Is2?F=N#Hiy3?=CoqTC}BOG7sRZ|5A z%V+Q6e69^n^d)_X?f)8OHb8hHT|(i_0XNk(*6j&{p$EFe-;MD@=hJ7xS0Un7P1YW> z1fO(05C4W35PqZ}wjw?i>BR6NTi=Ep6LbC10>btq`1>HZv?=RdG`Wb|wOT>H8y-Kv z58g-qD3$@?pA%O+lM-3~hOrPP5OMh5P=f;UiggZ*vY+z`e*AmIA`p}Q{)*8ZRv<$f zrH)!4H#er3ew2Xm>OX(Befr4KzxOovJIc6O@4Ffrb=}2(!&c>X@Cs29<@;E!)O zkFpr;ASsYf1zT4R@XAQz#=kgCZ+6jRX>1Mh+C*Sjb@8Ig&^pKjI_84czggiX=GS%ub+Ua3La1#q_v$Ph?(lY8;nPxkQ)S{ zDp`q%efVH$?_%$4Y41QTBPK@f;AC%ZWorgO9t&Bj7HX<{uLW*aE=A?S1HQ`HtGq%c zR}qa0z>TM2pg_Tr4X4PRf2G`wEg=C<^y^zVTx@JW^ebgX^hne>q)m#v*r5FI$f5f+ z?|hq?wwvvdr-oU2zHxxCkn28D zI6qRsK(~JU{BJ3{kUAh3k4ZFSs7oQEi04^l#6)Rc< z2}{BRWTn!mLf_yaqhV8%4d??CWJK$~JqZP5-KKfNK)PQkUcr2ehsa-=g^NR$d{FtA zMx+F!#R}n?%k}a=b4(DcjHbCXRNVx1jbfqILdfV4t8#bTVAY93F zP5!gDl~_9rpi*hI{LOE8BtGjRGdUt@YBH13jmqG?#pN=FHBJ|1?(s|`VE@dC`S;>C z1bvHt1x9=E=rM{>IXcP}+lXPvwBL#NOle}W@w7Eo<{%6~Yc77{PmC;egaLer0d`M$ z)W`6a258@0Z=%d=F@+nTZ+i=x7Y_f`Mk4o1^ZfkQ=H{Giuc)r^kf!gGMUP>Z=A-RD zKmLcCtG^xVZ$7i@f0ly3{oC{VQofLQECD6hWNAB2>Y)kk`GI7TvRB5WS&IR8Lm9_0 zRy;lWg1wM3LNtNCk9y+y0TkX52 z=#b$8EQ8j@+@DW`9;LofLjmS8362nCApV9~ZKzIY02zYBzkOz?79qOq#%Jt8B<@C7 z>PCAo;tCdh)7vA8C5rknfY`~1zC2KrE_9@tgu#eqN|=PROW86s(E)?GNBswefCJ{8 zF>-b{UE60Ac#&VoFO4Y{!eLAzwWwl|@zO$WDY~WMaiZRk4~F9^Q_97^lV($iR3lfH zCOH>yg5?R*lWd9S`vtKFK7_VOv3>nqt1K{u-XPXo!c7<~nTPi0qYGPl-0N={f1K(G z1){lfcm9-FVlKo9iVd)K?cyVG^xCpA_x}{FdC!QFXgXX&S&m-TPgt!{4%ZrSWja>l z4v+I$q6>u!-d&X3m{desOI}NHPP&Ag_zfra0tz<@T(EKvEoEYfTs=(-_P<_y6Lz*R zEonxo8JxJ6ELh&*V!hmNa3aLmX`8>m%G4C7P2fyOPJB|K+G8xu;FKn$N*rAHXj6;C z^OceO?XQr{tj(XB9GgU&6z96ASti1c1-Gi}bSgvEvIJXLTbx^nW~uBV>iOv^%O$yL z*ze+WL@RO|RjQQ3N?vlhrt^#hy_S(HtjJ56B(%h{ys@gKJ`%nKfjfRxs(cZ_WE8=G8Y?&3LF!H#W}3aa7DFS0&#U+$ z)Fjy?nj|6y7PZpvMc-Gxqp4r0539wM8mRhKN~&|HZj_=-C6}px&-!qnN~CI0%2yKh z-J--^O{l<6`!NDh`=|U*C9wkKZ#9M+ZT;kErUZ2!j1)F6%0gW~zw4!`8JYKSV`xo% zBx#Kj_+FaJBgP@ip;@PL@zq=iX(QF~Hq%8BWrwaf<-#v=1^0x0ot~(OQ@)waOwZh843Pm@T0L4Ri?~sQtR2;P)#YN;;@1iSyjPXX z-)#zsa$CjSJ3kd4r)GB;1Z2zG7q57>@7xjlvOKCi+T9gjNug^Y)}g;aTtpwm=kI&x zXwOf=GO&22ET;ccSgg=E$v9;#IKFwDKYv;>MiMjHs$Xy8&4yjSU4K3eA`JzNoWj1s zak`2^a}j+JpFE%Zz{u~Bypfr-cNqd~v+O$=I~lVXt4&5a9y*MTC5=DKWNJ5cinNa# z+dhTp@Msrmsq5(1NmgW4P|vhhv=(C*H!CJ8mSxXa{H#7}9BeFYBBs22@#QdmuT_?6#-x-5o<*~B&_#Gugk0b-bBZ8y22ua=ul7w@mn%p8HLr=Qtc<#h zo}-e*s$;HWtK+bxoZp-|^x4`R&VPRX68o#XH7%!jOdihXv#tQK+nqAkj< zs1-)Y2fy8!KS;*g#!)~0&}l=$LNr5#VjaS@2*=q{-nox2i8-%|--#!SuVh%TDe+V> z$-ZL{{LXC6zrfwX*&@`>Y_9!#S}RLS##WA)hnb<0>yvHA>ci1R*m~AF+J-k?D$6f@ z2hZHmp39Kp*QLxjjJ(Oh^5Kf_zn+R=g<5qJpZRwXb`4{rb8NAuA)7{AJ*adjo*@6<{zc`A1r%*_2 zwAi=UHg_8?Hw&qK>iZPc#6p^cG-y-zr5r(<3AItQXje^#Zk7S5*1}BFymKUCh$p!$ z`|Zfl@4BJIFWi|YInPHpJveI#jfJ6dnoJ~G+wJAnJhl9eo{Oj(uMpmbY9N;L|A=g4 zu$xvYJJL+4^lPW_Qn2}K&^;8`-2h{AfToVR72k7MQ&=6l;KOxd~^$=_49Q!qZgm|v)Wv8qvj zbagGU$dWQbx7ZrgDAt_c$^WCxtaxyAgilDVKbn8q@xy1~H#Ru2x?!`#I4* zjt;lZyVD+5v?;Y2UJ4(H%!@6DO$+HhEzO-Q`CE6nf4dl8lDa_*2^xEfzly^YLx@X@ z8xDODdXW8IkcVeo$mwzKp;&C};}}gg-c#Pwa3$Vr7Qfr+gW1vX)bZSu^OVF+JDS}Ee$tLX4-PhiOO5-ZZucd3l9T*ZOr=d9a(}vK%YQXjs(*^_6A2O%pW)$B zFCI)em==NFBsY~-QGg&XY6uDlf}nrT;BgOvTv;J#-w1+uQy~b?KEbe05`tLbWyD3) zJQfc1-96MKW`&#=8xKF#?iGANqz}gW?t(0hq7wWkB!E&v9GxzbE)bO~9Tt{L+*6|T zE>aj-!mEU0>QdHg(boQE<=+#&mYAx6;Rm7BM}hmpIzD%|<0WrD=j}`mi(|@YwjY0c zo^j}AnH;($yzulK;#Uyxp0tggGAE5%;fQ`qQy`6_;tNxXp>MR@Gd~1LkD>V(r)@Zq z`nUgyS7n^B4jJO*Vpn?{ANHAl^%yxDkfcJIUEd`1lC-Ze+)R|pY86Uh)w^{LAT_x} z)U~~?)2t98tIKKW#Zx!R!j7WMqqk+RBhm5p;WB()S=75%v`s1LpDm7{p)%3xf@Nha zy#7dK^5c5BupKAukF@YFYJ9w>AxquBeR|9 z;88DOlv3gOgFNm8p<~2fUvb)J1(38AT%cE8p!W{xi#n~Xt#?MQq;gwK37i#LJz7QA zY^Wg2RuF9!B4WcqMpzAq|8~Wj=9R3A6`b`tLchv(;bY}3Esw1F**sad4j^Tu{rzCe z1(8Et8gFOWK08gKy7tX!na*>sUiJxhoQBIuGxO{HiNa%fqPqUw@V!69pQ}P?K!bEp zTU^y7E8cE8^W5P*yA#&1QN9F^dxEWx(orUls4|81R zlGq8--JhI^ZpuG&h)pF^Ne1GVmb`V4=kx11)0+y~W8!u3ao7X2)U$kfGp6HaR^)q6Gb#(I9ew=%q}xCu3L6i{eJ zaKBOK2g<2_hpfD2<|As9_yzh&i6{h_LI*NKg67u6*oTQ!6Xni}P)pA0wTiw_jy##L zH>eOiGR665Gm5%qwBd{77Y2i_sfP(^X#NJ5h&D_y9RAg0EaIe2Z*sB4C}Kr$5M?aM z$*@=}9?d4#kM;(Lva>O82JKm&X8y&OOtVuMXD@b$eVTLgddD>t*k#&{+VH`MoC4+`5&`u$*jaqPvk;0C}Lu~tLqMyTS! z641(Lgh=bxL38HJgUzRwGAFF_le45R4hS`_tLog^U%@NmivNyE#j7EQ?bm|uO6BIu zGu++tyDc~h)!-`Ncqu*~d&qHei|v6uSkN>^h@T<a_Eo4U|I z%A<#bk+Gl_Gb-`Ezv;>(iq6{-!_<{?4uF+23XH0?z z^`66>#Q!A16CIBDh7u4ztZ*$3zR2sqc4Y5m3#idDWJqn{$V76RliAGvEy2Bt4N1Ul z!xRL(kMhG9=~uNamkVa*|2Sb2wXfvwgsvQJZY55^7=BYme?BKLA=Q?wP>Tsc_=L^l z*T4Di`+S(0^%^V-AD2XU$pg+C7C8KHt1Pi;r80l-jhkc`SpLP&k+%E+ecd#m%@wYv zFv3bOsu|DoR$gns6JAfqLwm;ddy5{3;PdGxO4zt08?Ff*d;r3dIMOPjPXG6|g4hSy zUiMDHV=kmq*uuYG0*f9V)$N(p}rjug!KjR+Hed=#}Z2YXM3=`=VKyq^-3@t)f z@K+aqbVHwxGd&6u>td&gm)~cZ8HSH)#sRJaenz)PKx*+wfun=Ytj$-3vzfJ9P7UKbY6>VUZeB_5^GDLhzV^hfMm{Zr?WgQ-BR{9?`;(m|mZa2}_w&K8 zVedKLum12?{UP0v=9?LfAo!pkFIf?Lp}xm`33BLn5FKpZ=W0@{*LE6@8K_l3{tGiw zcu%?M23>v?4>omWcIHS-x%O$?u-d^mB$V3-;>tLfX?e|(1bYXsx61ag&sOa{@_fat zRzF~wNQ4&3^ZfF7QU0%s+XM@yMtEFn6DA7T5*?aD{cDtJPCScP4fh8we#N?hi<5Kr z$}8+AMUw2}^QAsc&GSW*Nwydmd z!!tXNjx1-9YhH`-b(SI$WZj@clL#ZMu09=4C3SawbZ~U^*g9g+;lo2qYcW@COgtcv zm(9(^rJ<>b7Whr0?D65jGX052!d_g2zxJNt6%m#|sq^nYT1iz2+>6*D@KHhB^Yo!J zy?012qR>2B>g>-=ZO2|0B4&uu`=;tXSaN5GE`KZGLKOUjmPP?D7}qvHAwdL>eyY=j z5p5S>msyWg?DLbxvt3weOP$%HtC3bd6^rEm7d*V#TC?F~Cf(6gw*2z)Xkz_(%kkT@ zjYOcygsYC+?mK+%F~|hVr>)6OY4hlwq>8Jx7=7<9Bch|DV`Dp! z3qKsG=sk~{clu+9xV^6rSM6p#vR|F7`d{vjXK>kh;l5dHv|Ie!9rUxOCoeBgr@{Ia z4$ef2>%s5ezdPfLSVq1Jc2K=!E%8mN5$Ms0J;G8c#DgDan&V(7rx6rf z85^rI9T3975JjfPjqLC5U!697_wJos3iHVC-w$hHWSoQ}{^EBN6DsWnn9%*riT!d* zgLA@sr@s(=Rb?ej2nnAXzw@?y7zT-7lXmO|7^d6y@3hxUI{bP(3$~3G*`DU0@DLUj z*6EySoFlQOfq{XZ-r?TfKW<824KHjXMs;aMuY=O8l+mMR(ghl$hd{rDhlRsH-p3l) zvYBYMB7$@iI`Q1sC`{S}_g`qq7YrE=Y}g)yS&gKcM+`o~eZwb{#mS3D=hO~0VDTF@ zXMu&%VUs2K?PoJ43XeOLypqjej1K2&#`rJLA#@_Ha{uQiBur991_tZ#yuJdNL>l?j z(*bjX<_8gXE)6xca)Wjqh9m~u$md;L$^3EiIx9}Xc7slv*~%0{zqGG8{GPQ%MKqk8 z^(7_0j99<)AfUZ&yW20rbYfy0K3-~mX&Oy>o%{d_?F+`OQtHwd`RXODq8dX|LEHE5 z`xqC8Rh;(XFgq4s$I)LvxFK(xM$K!vZ7K(cDoQK3rVL6Q@a>|5jSCt3KH!^1h)%RQ z|H|J@`^|(xfdRq&K_0|Pi11_LTwjlBGSi((Xf>f@cON{7`XP3#8Z3qp9Pw-zbj z1re8gI_F-7eFsdy!omUo9%ilTzo4P$>FGh=5pdb!D|Z#pUTlwKup0L?JMTb$f2VPn z_DBDFxESMLX9sik1su`u;Wm+0iR)-EmV{3-mUup2Dh@0-8V(NU{%8WwuuVD@3I|_P zQtaodVW1W7llC+Y3tj?D$j{FYR{}=Z&+jRf&2*+*8{hzk)8?oM^eEY+$Xh^3}gBVm~S)< zu6~&<8aE_;+{Jq+A)nF|QdcL`^v&NG(X@J-u{Us(wjm@m-`MTK#L+3Wfbc#u0>dH? zj=({%>1F@=3D-iqw>#vq5yM@n-`Z%u+M$@mJI?vIonfDlU)6q12%!_d|Kg+H=_e4c zU};%WRmB38sC`#0R*cWj;I^mvuFQ~xvl=f?WiguBjqiUot+^Ryw@^>96@>T#N5XNw z*6eo$l0F-Hz8V9-lgP+OuBcE#Lc(iiJ?US;Y?T!i zNyA&qEv{4#q--YerTm|k-kZ#uMn_EMeV|L{w)Y$O)`!nWjG@wDx5yQJhA9L#V?KZW zyqSmW*^98~#)Ral=Dcg=bnadZe5wvK6bbe7*}QZAX%YWlmniOD+X zDWn&Km-}T^2~H8>u#os1H8r*K_HS&7v-X>n;jyu?kr4%X`Kg1es4bM4;T5HYXI zFIz5JYHIAD?$W)8UxTk4iKQ&p*47;Voo^k?RyEnoVn7;I1_}%>#iF7m&zsB3!KyC( z@#8%clS2OZ)YR0MGzxBR_os({(CPJ}eM)lj_SO~x5)xcMN(!Fyz3RdF`8h<+&%ac< z(RsTbwYj-Dm`E#h@tcFp_Y!;Wjl$&o{5+5uk9Su#Gv$Mz7BVu}5{{sDn~j*n?>`hz z78VpB2MSMeMl|w_aGiG(1X69V0$p)1Q?a$RRa#ow(b2)f!$anC+U+}%QQM}Y+yxoE zThMjKwBgGeK|;HEH$}LG+Su53=3y=|9Gu*igaoaO-VbnH#GHA%G^VJ)LYeg zUTptYxPP08;G=>K++9j@b3e1*)(ntdoS*Z0U)w4uj3@~`!b4(V7}WhqlSQ3Oq;64^ zZ#Bv-K?AzDT%xhG3EQ$pvq>nsYtC450w4!p*Ar-hP;>%VXtq+HDl}%q+-9}ou_pvA zN!CnU9G(CUIhRilRs`#Kw?E<~Etmbu!+**FAj9+1O=pJNVOdp2I-98^c(baisvVcE zwDhn44x{|Fwe`OBq(g4<@@!+EuC8tnzk@cMnFh`tU@X99aCkUGbdRkhP3Z4Vjz7)y zn1HmQ>i0srkM9<#77#D}iY}y1NGwY@oNy3LzYNV$-Pe(fOp*FAC}Y8h4R^%HO|5-P z!-}YX*{{Kv{_6Zm`|6+0q&li2l$x);wLleip;3>%KxZZ(0VKJ(%_v;sQm6m3cAdHJ zX*W_BCfW7nrM!Z|GSGS?u8~nugXjnKQ$ayN5t5}971V9$$jGM`tvrWj?AogFhs&+p zG&D5S)LVewB=h5ugZ}jFDZjS}4GatfJx5DRYd>FGSX31HVeL~>ZB0#lX1LirXpZb1 z_rp2I^Uc9;-@a8>vpS(B4!UqJW@eHXArmBS;@&JuY;JFFx1API(3p^gg@y6Sr4t?~ zVB_OUUkW&yLq=OeNdP8J+Ad<9d8r+BBgAotygB6BIyy)pz($!H-JXj!*4CLDlb+7U zdp?PSVc!%oxS(&-)+6Q@0@863OIl{ti?^@OU?Ny9^`6hhhg2#yXIdCVe|>U%XcHQ! z^2M@uD}h^vTR;@FmeSo$hR3gqE)LoAZg6@l$EQxejjyh}tTYhSVLSccjk3dJ#JcEA zR;^t;JPp?E?ye>DgX-{TQ%YYyEAe$qOw32o4`tK69+sAttb{R&h%fbfYRl(sv)RpL zU0tuhI?z>7Nk~hZ|4Kc2FC!k#=6BWy@T=|iux<>1lU}=*Yi~IA%^}zLW$;I^dJzH| zY-Yg|(IkAYDa1oFyN#;nZEso~c06vEsbQmQ>M)w&f(?TGU0q$>SAX;UDOMs&HUrh@ zxLrrv`HO;q(ZTm=(&aFo$a`$@`1n{c+6kxKZlS4FtZ;NJDJf~Qh$n2`uAoWxUnoPn zp>y2lv8&t5#FyGB3zJG^|Hh;y-7S>i)R<^aZl}4jzhSQrg zEwbphh(|N~1EeN5JdyHZC;U&X#!J`M)?$eQ1>|V(b==ZrbR!NHh&jXnK;tC*9$$Xz z^nUIj8Xq4AfC?ADz3Sr(w9}~7QTE2jp#FN0xtUp(pl|wDpMP5^Zmj~0jL{{uPXC0S zA2@hqkDp2I{6H&zR0F;aM`VAdBEy-qW8|Vb-S(69UiH@%-6nIr;UBpUtznPist%hT zYrVaxf2FFnWw5lj;#EFb{;JgJW*gF_=T_*a$nQ{VjLm-)FG4o+?&&t5d#FOU=`|jn zrnX@aDBR*R5Bfi&3b2}VP|&)m`-Lh%sBP*^pwrC z-xfd^fDT|g@Zc!`@i3=kjF?CD;b3F09USQD>k9zM85|sZ()pZyn)GLUY%Ff$eN-R2 z?OgSbA3w$f?->OJJIc##fh->!9PE5Jm-F)SQZ<|5MCvZJ0aF8fn)lu1-rSs)D6Xhi zP`42$A&@nL>hIP0)-n@yH)XRzU;h(El_A-ou%O!X{R@Z`2?Ia~;BDgf4n`vXUAiAR zk7;v!*nxaR!()C!OADrtlbKl&x3A7(3>ISJ3g32nPdu7)bF}FG>k9?o4!`q3+8qC< ze?vpEJqy%w$zNoQz!P8sbUXcgm6hWai~0PY_$8Dj^J_|#-S?+T-HsNh-@M7>b={vR zlp~BW2k?F4_K}C4wZ0855Punkc6_K@6~iBk260%zuU=*FR1WI$2~JWy-fc2 z+>u+eUI*Z#s^XlS(oVTL+1Ox=Y@5ZkN90_Ckhlhtt1(Re8CG(X_)kc%b!S?|S4t${L+1VKo z5melp7-6ZY+XHcAhBYP8FU}tN))MRhyEzyC8O=1ix|x}oO6k{BPIpAlvhVdec1A|uR7yG1nB$&fU(<+KB`B#HgRr$3wul0OuSU&4Q`KXiDHjtD2AY~7IV^4pe6w?ZRA ze8L4K&C)V<1L(@f^(Yp>r`rwp0j&&k0(A|IeHY%yJOG2>lKE4sc#{ZEJW?XxF?-mNilHbnTVO@(^hR|h0#w5(5FBP=h9$}@+q%)^pf z-X`IgiuA^IFs-t1;-eCd7P-u$GxM7e3;8_&Z<@vDo-A7k7K}e2G7yLffeo}$)#9fu zU#bG&gp-^dZ`_^i)jr{rO`omn-V1rVS5F_l_v19I{Cn(FpR3zh!s4cXeWmt5Uoe1l zE>uLX9cKPg3C~x0x$=hbEDc&!KRl_Z{c5^HS3O&Wz#LVY9O17ogXi-`Fx5k0TK^K zV)xE^CU!nPyU-%l&S`5i?M5peD+S8!Wy7B}c`{PmTJoDMD7&giTe7&_UifNLoHXvO%OO*Qn)oh@`nSHT z&}aqS_g}!$9f;8Cc0_si7ks0iVVL%WDlU|7-@fJIy2hy3?gb8PvEJ(C%a>v}(w~UR zBqVBTYCuw9tCO0YO-e+Rk(9K>2sQ;-1RpO|i(Q{U)^)rJh-9aB-Zoz{<_?&e=X>3| zOOT7F` z-Mpu(oRC7!lhf)KteEL_VPtKlSdpI_%-d7RU#$s3O$hF~;$e|k1Y6Kb*f-5*N!RcR z6dbqi$~2To%lEpY%%SS@1ve4Zw&@5%Lm!D=*ci*?6Un8P%tvtn4_30;cZO>({(^xF=nK2xx?agx4pltDNi(&cX{vz(0P3xr&`hugoY1 zktA^SqdAOP)d6q3m&dT%^1FpXTUvM%oDKE$+kuBH8kT>i`Z388je7ABAJx<$u?~+} zv;1MUd1puHX>bCLy6;8zhyW~=FPE>2JhLfGz{c)F&)o%qnLaOqP~K=3%c|Mdm5L++ z#Mqbh_Wmp)c}#;dyXm|IfAx(}Ty9R5e|OJ;wk&0Mo6i0QHRfH`F0BMi*Zy=_tLwq_ z)BQ>3^@0seVyWxF44`(wK^h=0f#c&J!^CF|V4ULfM}WYhqhnz?0fhMR<0jCJ%m!`v zuU=6j2a4uaFCGa!UM5akldu{EID3<(ok=M3JN$*Tf3#DHNR+DaZm_-y6sdJr%n|$# z11mH#va*&z0tNJXgm|sX-UP_NiMT&)Zf&`qtYmHcxVyUp#Rky|$OM5*1&%r&h%PoZ zHvA0$m*B;1ZTyCYtKf$qB+TTL6hIeER+HvKU+MYBGDfzyhErG!JCrG6-{0)u;^(?NzjN7W9h(dj5I{2W z728SUk(`N4(C0^6n-7Td{>vfDrhx<@<#n-ibK}Am`pL>a*7(iGaD`i}%7(y@s zm4FrTWBOa`YL6pdl0&IncIka4#@db5)gSW5GX=b7KmkDV3YgO8ux8-y=A_g8WTm&a z7sT=v+I2;hm7hS$CiHY`s--n2$I@Q!yfbRh?nO;Y>+S8G!{hv4h|K49s0FARq&(p3 z&X#LmoDZ{bb8-Ss4=OJJ3*a_}d*v47gGsVmK%@YG1|xkMjkXalGVZ ze2-FwC;B0Ni{E%Tm>g^1RGy6LyN`2y{(t*s5h$!1f8r{fXXfWPH^Z&cLiv$Z5EM24kAbY^yY=BTMR?K3@M+bR@B(efXZ^>*| zmSnt8b1RQvBMOflkR|H`{wT>9GhThUzb!?isYgClJ#VvYd{2z=SyZ~XsVJxY>`yCo zcx)o|>W6S_Hha9^Zr#1(waMAbULpJye;=;6Or2fp6E5mcyG@M@#EHaABa8pf0dZr@+z&Rhr~Ha(E9^ z&hyhFuq5;;!$P-zg8*3c_4U~;HdgF?6)mFT=H?Fm12&zet*-#FcY*~@o9#hKN4M+$ zs|YEeV_9t0PSC#QeI8{S;&mi4x{Husv(r5Hj^wr7pa*?u{floNHHV>Gv`vk-lKFJu z_ZZtR$cTTkVsfCnS8N-7T1G+GS))KhRvAEOZc=tw;ng+Gy>_Z7gOq-#?IQ$QG)^ZorF>H(TPH zvaqm-U;#6WkAu_08ci38Od*1m`LBf`$r`M!H+!165(&xCY}eP<{rGsexb;?(p^R8u z>PLWU0fv@WR$gCSjSLS@?zw!l4^!QGd2<(wwKG+!$_)}`%kjM3-CYb4-Y*p{L|nGv zv9UD1R2u^XOuk@`3MjfK5ELk8^YhTt4{9q;5QlGoc#;j|qnLuXT}G_`S=ndZSVl-Z z#G9J7&(jK*)F4u9$G&{Yb4xPG&qGvPA?V))iRMyL0wiQ6pGwmqXPI(b(xPH$Fr%eh ziizRmAHMvZZQI=@`>@KokL^35>c8g5{H;6U_6m(&QJWmn>7sSHX(=Dv?xV+hOxrV) zLJHmPQnKD}w5T3{d4ZiAE>g$<-u@*HPAr*_;_f?;$pXw$$l`4PldG<-&eDE~LlLZ4 zOvLZu@bTkEu!c&M^TCE3s2q3?fKf*!i?Qr>(B4*)MXq}jg@A&osY9^jiYGw|#H3yO zaraLyNa1;bxgbNIcV77)X1~Cb%1ep@rxd2g?S~sH9?kQ8C?L1gNJu@*ay5Tv z_zhzP$DC7Sy+x&lKD})T2jA4nC$6wRwauYsWU;lgI%So!*=3ySdgZ)MjXp{mM}vrR zA>jz=+wXN|8nvHo8ulo+j{@ISt%;gnDF^=;uP`tzS;c%s6@2K%7k>vBN25XqguW8E zo&edXsHgz>r{?73q@+m60xKw*y9>bK!-qe>+ks%^zxZU*1=#6~cQ!OhvY;Iah=_=Y ziTOb-%FD}_mh><&<3KNeS7UJEWM}`+j89oNwc7$jHdfUdfY)iW7QD-OO|aQw$ImygfHJ7eu@O zEH)nQMH-0JNea0?s@G{SSUl^qr74DLgvglg=|f$rId^& ze6Bmnjp%u$%$M5u>4;PQ+aj5Nn?ca@2kSp8e~#z9wwMUYOz4tDzh2b%;hTnTCoD2P zUhlUe>cWLsLe;1JTpjH@Zcmw_mHvkJ8$W#hor6whU|?X@Z`q8Ve!@)ShW?%udicpd zWE?2fpdUFLXJp)FKX0azxMy?=0DpEVq)xAk0Pl(mfdC6L0@Uauq|ai1T-`Zsjk z>i7;$x2)rjeF$O`>u2E6@zRu#S49{7N_XCr{XijWIe%J$rx*RqBBBup^5o~U=&)6f z-Mz2IHGCM`=6E)R#4*tPA-@6zYPZ01(&wVm1fmykWX0@dr!`IoXQ(!4?=tWyPYzks zSvy}PS2pajf4^Y2L3sY0eds1B|7B9*&996N_a|H=9H&N_u;F}L5hh}d^o)7t zDMeaF#;Rpx-T&()JIckvWEM?Z4W?;&Ue`7j1S6q(^HJdEheCBpdxsw~mdaSz!k;cA0$0l@zL%h$8suvk1zhlXO&}P z-=6V9R<^A?FXbZLlvv9y!bX&*3KjhtjsR7o&20XV_&oHQd8p--Y|UMMt#7h5^tPalQR+)eQ?QQ zCj92x#3U|*rDZwc?i7R8O9p{BBILVC*@FHEDZ2Kn& zv4t$=)9{Xz3i-O}M7kct`SJ468vL)j$Vw}D4K3cQls+~GVqERBwMkStG{h-5Am47& z#j~?_xvKY@-1!v@q|V)OtsK(ZaJ5XoW&YQEdMbknwJ#!daMlFP7;Pb7Lmncy@QmSF zZ>lolkl;fl|804FAKyLb=M`tYm{aN&T$G*Wz&9M9E=ZmxBFXz&RKTfjT4T#p&Qo#a z!B}Fi5>?5dXtH(GM&~iOJkkgoq>l;VN8N4{z@Ou=jzwV*j=POVVx`acrB&rM|9AG; z$BdPT`Hh9-X?)@~{KEqc7Bk4ypf@kT6B{j1T8lpN8~4Jwb6Jp1=sWy>v^|?_D-OAp zPqKv(qSB(zye;^__=J&{p)8mE%z`75k_g)~`g}TW@46K7-;s6Ws|L`e=LQtfr;Co_ zQJah#5=63P<2U_Ca@Pds+})b~I8j|b=A4(%)3A{pt4ws>EWHdD6<)Cdr#N<{?no## z1Yca2G|bmtwUoV}$sl*Sv{#_f5K(i|(~V&tT|TDX`hBeu^)nbNW)LoX(76#ZMW^g{ z>&6IJf8=H0aZlOQ^QceH?zQlFR~yy0a1xhPvRVGM(29_av+qxME?uZ3u^h~|Mv8qD zC9nJ12c<&uGIH6IliQX04Xf|t=5IM!+aKFK$304JEkkN>pqE6lUHoa%@QiZ^M50rv zyC1m~k8m>3{6mY}*DvZHT)mx`xD1BI@mF1J*bvd@Y`0d^vHW{~&gMwGg#CLT7>Qb^ zf9{>$(IEMb?!%egwG2yI7+zME#t*5Xp{y}i(E#XkQj^D^Z+{;@$MrYbTMUafP7|O`@?FFij{L_w|>Rx0k8J@Xi zRp!D0hr>3svgk27L}WySWeLO^Y;Fl)Qe&DLuMRl5%xfk0_i$3t{3S29Ke@zSF0fZE z{`%ByPGsM(x@2lr7ZpJQJDN^!fThkTTh+uewv%Ixja8bQcGBRv^czjzN5K2O_JEnJ z*?4LYU&EezzM6N4qn~*W27+rme~qgAlWJhp_9h|fjQPQATS2uzzx?4`SVYnfPJzmh zy2;Xf_GUPKgyPF9+Qa};^}{9P>yKtv&0hHrGtSDa0SZ_zgM3WX9%ko@ZJ20KMxX#O z+@2{v6u%|Slo^v~>^$B(_dPPM_tLM{6B5z<@h0E`g7BKM>HhJ*>(mc#(eC70eWk0W z!2bI;Y^;OniWN1Vva)Zv4ofjTy3wm%+CU$j7Hy$czoDKB#w#10SP87`*nNkVOB+;2 zxSr5nuYuM#n?0+sm+)S7V)k2|<)JTKuO;~;k+p*H;gP|Ae|=^*H?HTbYrOMF$}TK1 z9`S`M=pU;rr)>9XjPrD--ltNz zq&D(3j48Ss_7cy2yOw82$BGzbuHzLq&yEB(U9e^FNAw+f_25#0d;uS-W#6RCUg}qP zPeSo4C}jcmTD>N9S|4$Sm`n=QdjnoezKu? Date: Wed, 18 May 2016 15:57:24 +0200 Subject: [PATCH 004/407] changed to save files to storage with uuid --- src/Console/Commands/Install.php | 47 +++++++++++++++++++ src/ExportServiceProvider.php | 22 +++++++++ .../Controllers/Api/ReportsController.php | 43 ++++++++++++++--- src/Http/routes.php | 5 +- src/Jobs/GenerateBasicReport.php | 23 ++++++--- src/Jobs/GenerateExtendedReport.php | 20 ++++++-- src/Jobs/GenerateFullReport.php | 20 ++++++-- src/Scripts/basicreport.py | 16 ++++--- src/Scripts/extendedreport.py | 12 +++-- src/Scripts/fullreport.py | 13 +++-- .../2016_05_18_135218_add_files_table.php | 30 ++++++++++++ src/resources/views/reportmail.blade.php | 12 +++++ 12 files changed, 225 insertions(+), 38 deletions(-) create mode 100644 src/Console/Commands/Install.php create mode 100644 src/database/migrations/2016_05_18_135218_add_files_table.php create mode 100644 src/resources/views/reportmail.blade.php diff --git a/src/Console/Commands/Install.php b/src/Console/Commands/Install.php new file mode 100644 index 000000000..783f3c26d --- /dev/null +++ b/src/Console/Commands/Install.php @@ -0,0 +1,47 @@ +setUpMigration(); + $this->info('Finished! Please refer to the package readme on how to proceed.'); + } + + private function setUpMigration() + { + $this->call('vendor:publish', [ + '--provider' => ServiceProvider::class, + '--tag' => ['migrations'], + ]); + + if ($this->confirm('Do you want to run the migration right away?')) { + $this->call('migrate'); + } + } +} diff --git a/src/ExportServiceProvider.php b/src/ExportServiceProvider.php index 9e59a16f5..8e4412b1f 100644 --- a/src/ExportServiceProvider.php +++ b/src/ExportServiceProvider.php @@ -4,6 +4,7 @@ use Illuminate\Support\ServiceProvider; use Illuminate\Routing\Router; +use Dias\Modules\Export\Console\Commands\Install as InstallCommand; class ExportServiceProvider extends ServiceProvider { @@ -17,12 +18,16 @@ class ExportServiceProvider extends ServiceProvider { */ public function boot(Router $router) { + $this->loadViewsFrom(__DIR__.'/resources/views', 'export'); $router->group([ 'namespace' => 'Dias\Modules\Export\Http\Controllers', 'middleware' => 'web', ], function ($router) { require __DIR__.'/Http/routes.php'; }); + $this->publishes([ + __DIR__.'/database/migrations/' => database_path('migrations') + ], 'migrations'); } /** @@ -32,6 +37,23 @@ public function boot(Router $router) */ public function register() { + // set up the install console command + $this->app->singleton('command.export.install', function ($app) { + return new InstallCommand(); + }); + + $this->commands('command.export.install'); + } + /** + * Get the services provided by the provider. + * + * @return array + */ + public function provides() + { + return [ + 'command.export.install', + ]; } } diff --git a/src/Http/Controllers/Api/ReportsController.php b/src/Http/Controllers/Api/ReportsController.php index c9021019f..bc163c52f 100644 --- a/src/Http/Controllers/Api/ReportsController.php +++ b/src/Http/Controllers/Api/ReportsController.php @@ -1,7 +1,7 @@ requireCanSee($project); - $this->dispatch(new GenerateBasicReport($project)); - echo "Job submitted please wait"; + $this->dispatch(new GenerateBasicReport($project, $this->user)); + return "Job submitted please wait. An Email will be sent to you."; } /** @@ -48,8 +48,8 @@ public function extended($id) { $project = Project::findOrFail($id); $this->requireCanSee($project); - $this->dispatch(new GenerateExtendedReport($project)); - echo "Job submitted please wait"; + $this->dispatch(new GenerateExtendedReport($project,$this->user)); + return "Job submitted please wait. An Email will be sent to you."; } /** * Generate a full report @@ -68,7 +68,36 @@ public function full($id) { $project = Project::findOrFail($id); $this->requireCanSee($project); - $this->dispatch(new GenerateFullReport($project)); - echo "Job submitted please wait"; + $this->dispatch(new GenerateFullReport($project,$this->user)); + return "Job submitted please wait. An Email will be sent to you."; + } + /** + * Retrieve report from filesystem + * + * @api {post} files/retrieve/:uuid + * @apiGroup Files + * @apiName RetrieveProjectReport + * @apiPermission projectMember + * + * @apiParam {Text} uuid The report uuid. + * + * @param int $uuid report uuid + * @return \Illuminate\Http\Response + */ + public function retrieveReport($uuid,$filename) + { + $results = DB::select('select path from files where id=?',[$uuid]); + if ($results){ + $path = $results[0]->path; + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $mime=finfo_file($finfo, $path); + finfo_close($finfo); + $file = file_get_contents($path); + unlink($path); + DB::delete("delete from files where id=?",[$uuid]); + return response($file)->header("Content-Type",$mime); + }else{ + return "The file is not available. Please check your uid."; + } } } diff --git a/src/Http/routes.php b/src/Http/routes.php index 79131d70f..6fc20ad45 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -14,4 +14,7 @@ $router->get('projects/{id}/reports/full', [ 'uses' => 'ReportsController@full', ]); -}); + $router->get('files/retrieve/{uid}/{filename}', [ + 'uses' => 'ReportsController@retrieveReport', + ]); +}); \ No newline at end of file diff --git a/src/Jobs/GenerateBasicReport.php b/src/Jobs/GenerateBasicReport.php index 67f645a69..96b641dfd 100644 --- a/src/Jobs/GenerateBasicReport.php +++ b/src/Jobs/GenerateBasicReport.php @@ -2,9 +2,11 @@ namespace Dias\Modules\Export\Jobs; +use Mail; use DB; use Dias\Jobs\Job; use Dias\Project; +use Dias\User; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; @@ -19,6 +21,7 @@ class GenerateBasicReport extends Job implements ShouldQueue * @var Project */ private $project; + private $user; /** * Create a new job instance. @@ -27,9 +30,10 @@ class GenerateBasicReport extends Job implements ShouldQueue * * @return void */ - public function __construct(Project $project) + public function __construct(Project $project, User $user) { $this->project = $project; + $this->user = $user; } /** @@ -42,11 +46,18 @@ public function handle() DB::reconnect(); $transects = DB::select('SELECT transects.id, transects.name FROM transects, project_transect WHERE project_transect.project_id = '.$this->project->id.' AND transects.id = project_transect.transect_id'); $cmd=$this->project->name." "; + $path = uniqid("/tmp/"); + mkdir($path); + chmod($path,0777); foreach ($transects as $transect) { - DB::statement('copy (SELECT labels.name FROM annotation_labels, annotations, images, labels WHERE annotation_labels.annotation_id = annotations.id AND annotations.image_id = images.id AND labels.id = annotation_labels.label_id AND images.transect_id = '.$transect->id.') to \'/tmp/'.$transect->name.'.csv\' csv'); - $cmd.=$transect->name.'.csv '; + DB::statement('copy (SELECT labels.name FROM annotation_labels, annotations, images, labels WHERE annotation_labels.annotation_id = annotations.id AND annotations.image_id = images.id AND labels.id = annotation_labels.label_id AND images.transect_id = '.$transect->id.') to \''.$path."/".$transect->name.'.csv\' csv'); + $cmd.=$path."/".$transect->name.'.csv '; } - // system('/usr/bin/python /tmp/basicreport.py '.$cmd); - system('/usr/bin/python /home/vagrant/dias/vendor/dias/export/src/Scripts/basicreport.py '.$cmd); + $ret = system('/usr/bin/python '.__DIR__.'/../Scripts/basicreport.py '.$cmd); + $uuid2path = explode(";",$ret); + DB::insert('insert into files (id, path) values (?, ?)', $uuid2path); + Mail::send('export::reportmail', ["uuid"=>$uuid2path[0],"ending"=>".pdf","name"=>$this->user['attributes']['firstname']." ".$this->user['attributes']['lastname']], function($message){ + $message->to($this->user['attributes']['email'], $this->user['attributes']['firstname']." ".$this->user['attributes']['lastname'])->subject('BiigleDiasReport'); + }); } -} +} \ No newline at end of file diff --git a/src/Jobs/GenerateExtendedReport.php b/src/Jobs/GenerateExtendedReport.php index b20c38184..42eb988e1 100644 --- a/src/Jobs/GenerateExtendedReport.php +++ b/src/Jobs/GenerateExtendedReport.php @@ -3,8 +3,10 @@ namespace Dias\Modules\Export\Jobs; use DB; +use Mail; use Dias\Jobs\Job; use Dias\Project; +use Dias\User; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; @@ -19,6 +21,7 @@ class GenerateExtendedReport extends Job implements ShouldQueue * @var Project */ private $project; + private $user; /** * Create a new job instance. @@ -27,9 +30,10 @@ class GenerateExtendedReport extends Job implements ShouldQueue * * @return void */ - public function __construct(Project $project) + public function __construct(Project $project, User $user) { $this->project = $project; + $this->user = $user; } /** @@ -42,10 +46,18 @@ public function handle() DB::reconnect(); $transects = DB::select('SELECT transects.id, transects.name FROM transects, project_transect WHERE project_transect.project_id = '.$this->project->id.' AND transects.id = project_transect.transect_id'); $cmd=$this->project->name." "; + $path = uniqid("/tmp/"); + mkdir($path); + chmod($path,0777); foreach ($transects as $transect) { - DB::statement('copy (SELECT images.filename, labels.name FROM labels, annotations, annotation_labels, images WHERE annotation_labels.annotation_id = annotations.id AND annotations.image_id = images.id AND labels.id = annotation_labels.label_id AND images.transect_id = '.$transect->id.') to \'/tmp/'.$transect->name.'_ext.csv\' csv'); - $cmd.=$transect->name.'_ext.csv '; + DB::statement('copy (SELECT images.filename, labels.name FROM labels, annotations, annotation_labels, images WHERE annotation_labels.annotation_id = annotations.id AND annotations.image_id = images.id AND labels.id = annotation_labels.label_id AND images.transect_id = '.$transect->id.') to \''.$path."/".$transect->name.'.csv\' csv'); + $cmd.=$path."/".$transect->name.'.csv '; } - system('/usr/bin/python /home/vagrant/dias/vendor/dias/export/src/Scripts/extendedreport.py '.$cmd); + $ret = system('/usr/bin/python '.__DIR__.'/../Scripts/extendedreport.py '.$cmd); + $uuid2path = explode(";",$ret); + DB::insert('insert into files (id, path) values (?, ?)', $uuid2path); + Mail::send('export::reportmail', ["uuid"=>$uuid2path[0],"ending"=>".xlsx","name"=>$this->user['attributes']['firstname']." ".$this->user['attributes']['lastname']], function($message){ + $message->to($this->user['attributes']['email'], $this->user['attributes']['firstname']." ".$this->user['attributes']['lastname'])->subject('BiigleDiasReport'); + }); } } diff --git a/src/Jobs/GenerateFullReport.php b/src/Jobs/GenerateFullReport.php index 52782e748..255a89979 100644 --- a/src/Jobs/GenerateFullReport.php +++ b/src/Jobs/GenerateFullReport.php @@ -3,8 +3,10 @@ namespace Dias\Modules\Export\Jobs; use DB; +use Mail; use Dias\Jobs\Job; use Dias\Project; +use Dias\User; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; @@ -19,6 +21,7 @@ class GenerateFullReport extends Job implements ShouldQueue * @var Project */ private $project; + private $user; /** * Create a new job instance. @@ -27,9 +30,10 @@ class GenerateFullReport extends Job implements ShouldQueue * * @return void */ - public function __construct(Project $project) + public function __construct(Project $project, User $user) { $this->project = $project; + $this->user = $user; } /** @@ -42,10 +46,18 @@ public function handle() DB::reconnect(); $transects = DB::select('SELECT transects.id, transects.name FROM transects, project_transect WHERE project_transect.project_id = '.$this->project->id.' AND transects.id = project_transect.transect_id'); $cmd=$this->project->name." "; + $path = uniqid("/tmp/"); + mkdir($path); + chmod($path,0777); foreach ($transects as $transect) { - DB::statement('copy (SELECT labels.name, images.filename, annotations.id, annotations.shape_id, annotation_labels.label_id, shapes.name, annotations.points, annotation_labels.user_id FROM labels, annotations, images, annotation_labels, shapes WHERE images.transect_id = '.$transect->id.' AND annotations.image_id = images.id AND shapes.id = annotations.shape_id AND annotation_labels.annotation_id = annotations.id AND labels.id=annotation_labels.label_id and annotation_labels.annotation_id = annotations.id) to \'/tmp/'.$transect->name.'_full.csv\' csv'); - $cmd.=$transect->name.'_full.csv '; + DB::statement('copy (SELECT labels.name, images.filename, annotations.id, annotations.shape_id, annotation_labels.label_id, shapes.name, annotations.points, annotation_labels.user_id FROM labels, annotations, images, annotation_labels, shapes WHERE images.transect_id = '.$transect->id.' AND annotations.image_id = images.id AND shapes.id = annotations.shape_id AND annotation_labels.annotation_id = annotations.id AND labels.id=annotation_labels.label_id and annotation_labels.annotation_id = annotations.id) to \''.$path."/".$transect->name.'.csv\' csv'); + $cmd.=$path."/".$transect->name.'.csv '; } - system('/usr/bin/python /home/vagrant/dias/vendor/dias/export/src/Scripts/fullreport.py '.$cmd); + $ret = system('/usr/bin/python '.__DIR__.'/../Scripts/fullreport.py '.$cmd); + $uuid2path = explode(";",$ret); + DB::insert('insert into files (id, path) values (?, ?)', $uuid2path); + Mail::send('export::reportmail', ["uuid"=>$uuid2path[0],"ending"=>".xlsx","name"=>$this->user['attributes']['firstname']." ".$this->user['attributes']['lastname']], function($message){ + $message->to($this->user['attributes']['email'], $this->user['attributes']['firstname']." ".$this->user['attributes']['lastname'])->subject('BiigleDiasReport'); + }); } } \ No newline at end of file diff --git a/src/Scripts/basicreport.py b/src/Scripts/basicreport.py index 77db786d0..9861fc4b2 100755 --- a/src/Scripts/basicreport.py +++ b/src/Scripts/basicreport.py @@ -7,12 +7,12 @@ import sys import collections import numpy as np -import os +import uuid prjName = sys.argv[1] transects = sys.argv[2:] -prefix = "/tmp/" +prefix = "/home/vagrant/dias/storage/" def TitleSlide(text): @@ -27,18 +27,19 @@ def TitleSlide(text): btright = plt.subplot2grid((3, 3), (2, 2)) btright.axis('off') mid.text(0.404, 0.5, text, fontsize=15) - btleft.imshow(mpimg.imread('biigle_dias_logo.png')) + # btleft.imshow(mpimg.imread('biigle_dias_logo.png')) btmid.text(0.423, 0.5, datetime.date.today(), fontsize=9) - btright.imshow(mpimg.imread('logo_en_tr-height72.png')) + # btright.imshow(mpimg.imread('logo_en_tr-height72.png')) return fig -pdf = PdfPages(prefix + prjName + '.pdf') +uid = str(uuid.uuid4()) +pdf = PdfPages(prefix + "/" + uid + ".pdf") fig = TitleSlide("BiigleDias Report") pdf.savefig(fig) width = 1. for transect in transects: - f = open(prefix + transect, 'r') + f = open(transect, 'r') species = f.read().split("\n")[:-1] f.close() c = collections.Counter(species) @@ -51,7 +52,7 @@ def TitleSlide(text): ax.set_yscale('log') ax.set_xticks(ind + width / 2) ax.set_xticklabels(np.array(c.keys())[sorter], rotation='vertical', fontsize=8) - plt.title(str(transect[:-4])) + plt.title(str(transect.split("/")[-1][:-4])) plt.xlim([0, len(c.keys())]) pdf.savefig() d = pdf.infodict() @@ -62,3 +63,4 @@ def TitleSlide(text): d['CreationDate'] = datetime.datetime.today() d['ModDate'] = datetime.datetime.today() pdf.close() +print uid + ";" + prefix + "/" + uid + ".pdf" diff --git a/src/Scripts/extendedreport.py b/src/Scripts/extendedreport.py index 79f133813..e5564eea4 100755 --- a/src/Scripts/extendedreport.py +++ b/src/Scripts/extendedreport.py @@ -2,15 +2,17 @@ import collections import numpy as np from pyexcelerate import Workbook, Color, Style, Fill +import uuid prjName = sys.argv[1] transects = sys.argv[2:] -prefix = "/tmp/" +prefix = "/home/vagrant/dias/storage/" + workbook = Workbook() for transect in transects: - f = open(prefix + transect, 'r') + f = open(transect, 'r') res = np.array(map(lambda x: x.split(","), f.read().split("\n")[:-1])) f.close() uniqueclasses = np.unique(res[:, 1]) @@ -24,8 +26,10 @@ c = collections.Counter(res[res[:, 0] == img][:, 1]) for entry in c: data[rowidx + 1][class2column[entry] + 1] = int(c[entry]) - ws = workbook.new_sheet(transect, data=data) + ws = workbook.new_sheet(transect.split("/")[-1][:-4], data=data) ws.set_cell_value(1, 1, "") ws.set_row_style(1, Style(fill=Fill(background=Color(200, 200, 200, 0)))) ws.set_col_style(1, Style(fill=Fill(background=Color(200, 200, 200, 0)))) -workbook.save(prefix + "BiigleDiasReport.xlsx") \ No newline at end of file +uid = str(uuid.uuid4()) +workbook.save(prefix + "/" + uid + ".xlsx") +print uid + ";" + prefix + "/" + uid + ".xlsx" diff --git a/src/Scripts/fullreport.py b/src/Scripts/fullreport.py index fd9e447f9..db7a04066 100755 --- a/src/Scripts/fullreport.py +++ b/src/Scripts/fullreport.py @@ -3,10 +3,11 @@ from pyexcelerate import Workbook, Color, Style, Fill import csv import ast +import uuid prjName = sys.argv[1] transects = sys.argv[2:] -prefix = "/tmp/" +prefix = "/home/vagrant/dias/storage/" def addRow(x="", y="", label="", filename="", annotation_id="", shape=""): @@ -15,11 +16,11 @@ def addRow(x="", y="", label="", filename="", annotation_id="", shape=""): workbook = Workbook() for transect in transects: - f = open(prefix + transect, 'r') + f = open(transect, 'r') res = np.array(list(csv.reader(f))) f.close() if res.size == 0: - workbook.new_sheet(transect) + workbook.new_sheet(transect.split("/")[-1][:-4]) continue celldata = [] celldata.append(addRow("x/radius", "y", "label", "filename", "annotation_id", "shape")) @@ -41,6 +42,8 @@ def addRow(x="", y="", label="", filename="", annotation_id="", shape=""): if len(points) % 2 == 1: # add radius celldata.append(addRow(points[-1], "")) - ws = workbook.new_sheet(transect, data=celldata) + ws = workbook.new_sheet(transect.split("/")[-1][:-4], data=celldata) ws.set_row_style(1, Style(fill=Fill(background=Color(200, 200, 200, 0)))) -workbook.save(prefix + "BiigleDiasReport(full).xlsx") \ No newline at end of file +uid = str(uuid.uuid4()) +workbook.save(prefix + "/" + uid + ".xlsx") +print uid + ";" + prefix + "/" + uid + ".xlsx" diff --git a/src/database/migrations/2016_05_18_135218_add_files_table.php b/src/database/migrations/2016_05_18_135218_add_files_table.php new file mode 100644 index 000000000..878c84610 --- /dev/null +++ b/src/database/migrations/2016_05_18_135218_add_files_table.php @@ -0,0 +1,30 @@ +uuid('id'); + $table->longText('path'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('files'); + } +} diff --git a/src/resources/views/reportmail.blade.php b/src/resources/views/reportmail.blade.php new file mode 100644 index 000000000..eb2ec4ae3 --- /dev/null +++ b/src/resources/views/reportmail.blade.php @@ -0,0 +1,12 @@ + + + + + BiigleDias Report Notification + + +

Dear {{{$name}}},

+

your BiigleDias report is ready for download. Please save it because it is deleted after the first access.

+ Download report + + \ No newline at end of file From 6a0d46460b9ba7c44ebedbdfd4a4ade947a4e5ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Langenk=C3=A4mper?= Date: Wed, 8 Jun 2016 15:10:25 +0200 Subject: [PATCH 005/407] Added README.md with install instructions --- README.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 000000000..e6673291a --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# Dias Export Module + +Install the module: + +Add the following to the repositories array of your `composer.json`: +``` +{ + "type": "vcs", + "url": "https://github.com/BiodataMiningGroup/dias-export.git" +} +``` + +1. Run `php composer.phar require dias/export:dev-master`. +2. Add `'Dias\Modules\Export\ExportServiceProvider'` to the `providers` array in `config/app.php`. +3. Run `php artisan export:publish` to refresh the public assets of this package. Do this for every update of the package. From 30efdc974a171371ef43d98113a61b65dbc49749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Langenk=C3=A4mper?= Date: Thu, 16 Jun 2016 20:56:00 +0200 Subject: [PATCH 006/407] fixed requirecansee/authorize --- src/Http/Controllers/Api/ReportsController.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Http/Controllers/Api/ReportsController.php b/src/Http/Controllers/Api/ReportsController.php index bc163c52f..082039278 100644 --- a/src/Http/Controllers/Api/ReportsController.php +++ b/src/Http/Controllers/Api/ReportsController.php @@ -26,7 +26,7 @@ class ReportsController extends Controller public function basic($id) { $project = Project::findOrFail($id); - $this->requireCanSee($project); + $this->authorize('access', $project); $this->dispatch(new GenerateBasicReport($project, $this->user)); return "Job submitted please wait. An Email will be sent to you."; } @@ -47,7 +47,7 @@ public function basic($id) public function extended($id) { $project = Project::findOrFail($id); - $this->requireCanSee($project); + $this->authorize('access', $project); $this->dispatch(new GenerateExtendedReport($project,$this->user)); return "Job submitted please wait. An Email will be sent to you."; } @@ -67,7 +67,7 @@ public function extended($id) public function full($id) { $project = Project::findOrFail($id); - $this->requireCanSee($project); + $this->authorize('access', $project); $this->dispatch(new GenerateFullReport($project,$this->user)); return "Job submitted please wait. An Email will be sent to you."; } From a31813374e52ce81df49d69b5559cad08723bf79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Langenk=C3=A4mper?= Date: Mon, 20 Jun 2016 13:37:16 +0200 Subject: [PATCH 007/407] added python module installation --- README.md | 1 + requirements.txt | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 requirements.txt diff --git a/README.md b/README.md index e6673291a..cfcdfa732 100644 --- a/README.md +++ b/README.md @@ -13,3 +13,4 @@ Add the following to the repositories array of your `composer.json`: 1. Run `php composer.phar require dias/export:dev-master`. 2. Add `'Dias\Modules\Export\ExportServiceProvider'` to the `providers` array in `config/app.php`. 3. Run `php artisan export:publish` to refresh the public assets of this package. Do this for every update of the package. +4. Run `pip install -r requirements` to install python requirements \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..6a4ba4f93 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,35 @@ +Jinja2==2.8 +MarkupSafe==0.23 +Pillow==2.3.0 +PyExcelerate==0.6.7 +apt-xapian-index==0.45 +argparse==1.2.1 +chardet==2.0.1 +colorama==0.2.5 +decorator==3.4.0 +html5lib==0.999 +ipython==1.2.1 +joblib==0.7.1 +matplotlib==1.3.1 +meld3==0.6.10 +nose==1.3.1 +numpy==1.8.2 +pexpect==3.1 +pyparsing==2.0.1 +python-apt==0.9.3.5ubuntu2 +python-dateutil==1.5 +python-debian==0.1.21-nmu2ubuntu2 +pytz==2012c +requests==2.2.1 +scikit-learn==0.14.1 +scipy==0.13.3 +simplegeneric==0.8.1 +simplejson==3.3.1 +six==1.5.2 +sklearn==0.0 +ssh-import-id==3.21 +supervisor==3.0b2 +urllib3==1.7.1 +virtualenv==15.0.1 +wheel==0.24.0 +wsgiref==0.1.2 From 2ca48154f14b8d6fdbfa332ec456caf098120a53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Langenk=C3=A4mper?= Date: Tue, 21 Jun 2016 15:39:05 +0200 Subject: [PATCH 008/407] added angular; added buttons; --- .gitignore | 1 + gulpfile.js | 18 ++++++ package.json | 16 +++++ src/public/assets/scripts/main.js | 59 +++++++++++++++++++ .../assets/js/controllers/exportController.js | 41 +++++++++++++ src/resources/assets/js/main.js | 15 +++++ src/resources/views/projectsScripts.blade.php | 1 + src/resources/views/projectsShow.blade.php | 16 +++++ 8 files changed, 167 insertions(+) create mode 100644 .gitignore create mode 100644 gulpfile.js create mode 100644 package.json create mode 100644 src/public/assets/scripts/main.js create mode 100644 src/resources/assets/js/controllers/exportController.js create mode 100644 src/resources/assets/js/main.js create mode 100644 src/resources/views/projectsScripts.blade.php create mode 100644 src/resources/views/projectsShow.blade.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..40b878db5 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 000000000..94643cc14 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,18 @@ +"use strict"; +process.env.DISABLE_NOTIFIER = true; + +var gulp = require('gulp'); +var elixir = require('laravel-elixir'); +var angular = require('laravel-elixir-angular'); +var shell = require('gulp-shell'); + +elixir(function (mix) { + process.chdir('src'); + mix.sass('main.scss', 'public/assets/styles/main.css'); + mix.angular('resources/assets/js/', 'public/assets/scripts', 'main.js'); + mix.task('publish', 'public/assets/**/*'); +}); + +gulp.task('publish', function () { + gulp.src('').pipe(shell('php ../../../../artisan vendor:publish --provider="Dias\\Modules\\Export\\ExportServiceProvider" --force')); +}); diff --git a/package.json b/package.json new file mode 100644 index 000000000..63da3c9fa --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "dias-export", + "version": "0.0.1", + "directories": { + "test": "tests" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "devDependencies": { + "gulp-cli": "~0.1.5", + "laravel-elixir-angular": "~1.0.1", + "laravel-elixir": "~3.2.8", + "gulp-shell": "~0.3.0" + } +} diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js new file mode 100644 index 000000000..30bf01ba6 --- /dev/null +++ b/src/public/assets/scripts/main.js @@ -0,0 +1,59 @@ +/** + * @namespace dias.transects + * @description The DIAS transects module. + */ +angular.module('dias.export', ['dias.api', 'dias.ui']); + +/* + * Disable debug info in production for better performance. + * see: https://code.angularjs.org/1.4.7/docs/guide/production + */ +angular.module('dias.export').config(["$compileProvider", function ($compileProvider) { + "use strict"; + + $compileProvider.debugInfoEnabled(false); +}]); + +/** + * @namespace dias.transects + * @ngdoc controller + * @name FilterController + * @memberOf dias.transects + * @description Controller for the filter feature of the transects page + */ +angular.module('dias.projects').controller('exportController', ["$scope", "$http", "URL", "msg", function ($scope,$http,URL,msg) { + "use strict"; + $scope.basic=function(projectid){ + msg.success("The report will be prepared. You will get notified by email when it is ready."); + $http({ + method: 'GET', + url: URL+"/api/v1/projects/"+projectid+"/reports/basic" + }).then(function successCallback(response) { + }, function errorCallback(response) { + msg.danger("An error occured. If you keep getting this error please contact the administrator."); + }); + }; + $scope.extended=function(projectid){ + msg.success("The report will be prepared. You will get notified by email when it is ready."); + $http({ + method: 'GET', + url: URL+"/api/v1/projects/"+projectid+"/reports/extended" + }).then(function successCallback(response) { + }, function errorCallback(response) { + msg.danger("An error occured. If you keep getting this error please contact the administrator."); + }); + }; + $scope.full=function(projectid){ + msg.success("The report will be prepared. You will get notified by email when it is ready."); + $http({ + method: 'GET', + url: URL+"/api/v1/projects/"+projectid+"/reports/full" + }).then(function successCallback(response) { + }, function errorCallback(response) { + msg.danger("An error occured. If you keep getting this error please contact the administrator."); + }); + }; + }] +); + +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uanMiLCJjb250cm9sbGVycy9leHBvcnRDb250cm9sbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0FBSUEsUUFBQSxPQUFBLGVBQUEsQ0FBQSxZQUFBOzs7Ozs7QUFNQSxRQUFBLE9BQUEsZUFBQSw0QkFBQSxVQUFBLGtCQUFBO0lBQ0E7O0lBRUEsaUJBQUEsaUJBQUE7Ozs7Ozs7Ozs7QUNOQSxRQUFBLE9BQUEsaUJBQUEsV0FBQSxzREFBQSxVQUFBLE9BQUEsTUFBQSxJQUFBLEtBQUE7UUFDQTtRQUNBLE9BQUEsTUFBQSxTQUFBLFVBQUE7WUFDQSxJQUFBLFFBQUE7WUFDQSxNQUFBO2dCQUNBLFFBQUE7Z0JBQ0EsS0FBQSxJQUFBLG9CQUFBLFVBQUE7ZUFDQSxLQUFBLFNBQUEsZ0JBQUEsVUFBQTtlQUNBLFNBQUEsY0FBQSxVQUFBO29CQUNBLElBQUEsT0FBQTs7O1FBR0EsT0FBQSxTQUFBLFNBQUEsVUFBQTtZQUNBLElBQUEsUUFBQTtZQUNBLE1BQUE7Z0JBQ0EsUUFBQTtnQkFDQSxLQUFBLElBQUEsb0JBQUEsVUFBQTtlQUNBLEtBQUEsU0FBQSxnQkFBQSxVQUFBO2VBQ0EsU0FBQSxjQUFBLFVBQUE7b0JBQ0EsSUFBQSxPQUFBOzs7UUFHQSxPQUFBLEtBQUEsU0FBQSxVQUFBO3VCQUNBLElBQUEsUUFBQTtZQUNBLE1BQUE7Z0JBQ0EsUUFBQTtnQkFDQSxLQUFBLElBQUEsb0JBQUEsVUFBQTtlQUNBLEtBQUEsU0FBQSxnQkFBQSxVQUFBO2VBQ0EsU0FBQSxjQUFBLFVBQUE7b0JBQ0EsSUFBQSxPQUFBOzs7OztBQUtBIiwiZmlsZSI6Im1haW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBuYW1lc3BhY2UgZGlhcy50cmFuc2VjdHNcbiAqIEBkZXNjcmlwdGlvbiBUaGUgRElBUyB0cmFuc2VjdHMgbW9kdWxlLlxuICovXG5hbmd1bGFyLm1vZHVsZSgnZGlhcy5leHBvcnQnLCBbJ2RpYXMuYXBpJywgJ2RpYXMudWknXSk7XG5cbi8qXG4gKiBEaXNhYmxlIGRlYnVnIGluZm8gaW4gcHJvZHVjdGlvbiBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLlxuICogc2VlOiBodHRwczovL2NvZGUuYW5ndWxhcmpzLm9yZy8xLjQuNy9kb2NzL2d1aWRlL3Byb2R1Y3Rpb25cbiAqL1xuYW5ndWxhci5tb2R1bGUoJ2RpYXMuZXhwb3J0JykuY29uZmlnKGZ1bmN0aW9uICgkY29tcGlsZVByb3ZpZGVyKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAkY29tcGlsZVByb3ZpZGVyLmRlYnVnSW5mb0VuYWJsZWQoZmFsc2UpO1xufSk7XG4iLCIvKipcbiAqIEBuYW1lc3BhY2UgZGlhcy50cmFuc2VjdHNcbiAqIEBuZ2RvYyBjb250cm9sbGVyXG4gKiBAbmFtZSBGaWx0ZXJDb250cm9sbGVyXG4gKiBAbWVtYmVyT2YgZGlhcy50cmFuc2VjdHNcbiAqIEBkZXNjcmlwdGlvbiBDb250cm9sbGVyIGZvciB0aGUgZmlsdGVyIGZlYXR1cmUgb2YgdGhlIHRyYW5zZWN0cyBwYWdlXG4gKi9cbmFuZ3VsYXIubW9kdWxlKCdkaWFzLnByb2plY3RzJykuY29udHJvbGxlcignZXhwb3J0Q29udHJvbGxlcicsIGZ1bmN0aW9uICgkc2NvcGUsJGh0dHAsVVJMLG1zZykge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgJHNjb3BlLmJhc2ljPWZ1bmN0aW9uKHByb2plY3RpZCl7XG4gICAgICAgICAgICBtc2cuc3VjY2VzcyhcIlRoZSByZXBvcnQgd2lsbCBiZSBwcmVwYXJlZC4gWW91IHdpbGwgZ2V0IG5vdGlmaWVkIGJ5IGVtYWlsIHdoZW4gaXQgaXMgcmVhZHkuXCIpO1xuICAgICAgICAgICAgJGh0dHAoe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgICAgdXJsOiBVUkwrXCIvYXBpL3YxL3Byb2plY3RzL1wiK3Byb2plY3RpZCtcIi9yZXBvcnRzL2Jhc2ljXCJcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiBlcnJvckNhbGxiYWNrKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZy5kYW5nZXIoXCJBbiBlcnJvciBvY2N1cmVkLiBJZiB5b3Uga2VlcCBnZXR0aW5nIHRoaXMgZXJyb3IgcGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgICRzY29wZS5leHRlbmRlZD1mdW5jdGlvbihwcm9qZWN0aWQpe1xuICAgICAgICAgICAgbXNnLnN1Y2Nlc3MoXCJUaGUgcmVwb3J0IHdpbGwgYmUgcHJlcGFyZWQuIFlvdSB3aWxsIGdldCBub3RpZmllZCBieSBlbWFpbCB3aGVuIGl0IGlzIHJlYWR5LlwiKTtcbiAgICAgICAgICAgICRodHRwKHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHVybDogVVJMK1wiL2FwaS92MS9wcm9qZWN0cy9cIitwcm9qZWN0aWQrXCIvcmVwb3J0cy9leHRlbmRlZFwiXG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIHN1Y2Nlc3NDYWxsYmFjayhyZXNwb25zZSkge1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gZXJyb3JDYWxsYmFjayhyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBtc2cuZGFuZ2VyKFwiQW4gZXJyb3Igb2NjdXJlZC4gSWYgeW91IGtlZXAgZ2V0dGluZyB0aGlzIGVycm9yIHBsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLlwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAkc2NvcGUuZnVsbD1mdW5jdGlvbihwcm9qZWN0aWQpe1xuICAgICAgICAgICAgICAgICAgICAgICBtc2cuc3VjY2VzcyhcIlRoZSByZXBvcnQgd2lsbCBiZSBwcmVwYXJlZC4gWW91IHdpbGwgZ2V0IG5vdGlmaWVkIGJ5IGVtYWlsIHdoZW4gaXQgaXMgcmVhZHkuXCIpO1xuICAgICAgICAgICAgJGh0dHAoe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgICAgdXJsOiBVUkwrXCIvYXBpL3YxL3Byb2plY3RzL1wiK3Byb2plY3RpZCtcIi9yZXBvcnRzL2Z1bGxcIlxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2socmVzcG9uc2UpIHtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIGVycm9yQ2FsbGJhY2socmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbXNnLmRhbmdlcihcIkFuIGVycm9yIG9jY3VyZWQuIElmIHlvdSBrZWVwIGdldHRpbmcgdGhpcyBlcnJvciBwbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci5cIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG4pO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/resources/assets/js/controllers/exportController.js b/src/resources/assets/js/controllers/exportController.js new file mode 100644 index 000000000..8f84c4eca --- /dev/null +++ b/src/resources/assets/js/controllers/exportController.js @@ -0,0 +1,41 @@ +/** + * @namespace dias.transects + * @ngdoc controller + * @name FilterController + * @memberOf dias.transects + * @description Controller for the filter feature of the transects page + */ +angular.module('dias.projects').controller('exportController', function ($scope,$http,URL,msg) { + "use strict"; + $scope.basic=function(projectid){ + msg.success("The report will be prepared. You will get notified by email when it is ready."); + $http({ + method: 'GET', + url: URL+"/api/v1/projects/"+projectid+"/reports/basic" + }).then(function successCallback(response) { + }, function errorCallback(response) { + msg.danger("An error occured. If you keep getting this error please contact the administrator."); + }); + }; + $scope.extended=function(projectid){ + msg.success("The report will be prepared. You will get notified by email when it is ready."); + $http({ + method: 'GET', + url: URL+"/api/v1/projects/"+projectid+"/reports/extended" + }).then(function successCallback(response) { + }, function errorCallback(response) { + msg.danger("An error occured. If you keep getting this error please contact the administrator."); + }); + }; + $scope.full=function(projectid){ + msg.success("The report will be prepared. You will get notified by email when it is ready."); + $http({ + method: 'GET', + url: URL+"/api/v1/projects/"+projectid+"/reports/full" + }).then(function successCallback(response) { + }, function errorCallback(response) { + msg.danger("An error occured. If you keep getting this error please contact the administrator."); + }); + }; + } +); diff --git a/src/resources/assets/js/main.js b/src/resources/assets/js/main.js new file mode 100644 index 000000000..c6ba17582 --- /dev/null +++ b/src/resources/assets/js/main.js @@ -0,0 +1,15 @@ +/** + * @namespace dias.transects + * @description The DIAS transects module. + */ +angular.module('dias.export', ['dias.api', 'dias.ui']); + +/* + * Disable debug info in production for better performance. + * see: https://code.angularjs.org/1.4.7/docs/guide/production + */ +angular.module('dias.export').config(function ($compileProvider) { + "use strict"; + + $compileProvider.debugInfoEnabled(false); +}); diff --git a/src/resources/views/projectsScripts.blade.php b/src/resources/views/projectsScripts.blade.php new file mode 100644 index 000000000..f89eb51e0 --- /dev/null +++ b/src/resources/views/projectsScripts.blade.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/resources/views/projectsShow.blade.php b/src/resources/views/projectsShow.blade.php new file mode 100644 index 000000000..c79953f8f --- /dev/null +++ b/src/resources/views/projectsShow.blade.php @@ -0,0 +1,16 @@ +
+
+ Export Data +
+
    +
  • + +
  • +
  • + +
  • +
  • + +
  • +
+
From af63d0a423aeade84ff9e080829820e7cabef1ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Langenk=C3=A4mper?= Date: Tue, 21 Jun 2016 15:40:23 +0200 Subject: [PATCH 009/407] This fixes #2. --- src/ExportServiceProvider.php | 8 +++++++- src/Scripts/basicreport.py | 2 ++ src/Scripts/extendedreport.py | 7 ++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/ExportServiceProvider.php b/src/ExportServiceProvider.php index 8e4412b1f..c7b95d7b5 100644 --- a/src/ExportServiceProvider.php +++ b/src/ExportServiceProvider.php @@ -4,6 +4,7 @@ use Illuminate\Support\ServiceProvider; use Illuminate\Routing\Router; +use Dias\Services\Modules; use Dias\Modules\Export\Console\Commands\Install as InstallCommand; class ExportServiceProvider extends ServiceProvider { @@ -16,7 +17,7 @@ class ExportServiceProvider extends ServiceProvider { * * @return void */ - public function boot(Router $router) + public function boot(Modules $modules,Router $router) { $this->loadViewsFrom(__DIR__.'/resources/views', 'export'); $router->group([ @@ -28,6 +29,11 @@ public function boot(Router $router) $this->publishes([ __DIR__.'/database/migrations/' => database_path('migrations') ], 'migrations'); + $this->publishes([ + __DIR__.'/public/assets' => public_path('vendor/export'), + ], 'public'); + $modules->addMixin('export', 'projectsShow'); + $modules->addMixin('export', 'projectsScripts'); } /** diff --git a/src/Scripts/basicreport.py b/src/Scripts/basicreport.py index 9861fc4b2..c0f0621a4 100755 --- a/src/Scripts/basicreport.py +++ b/src/Scripts/basicreport.py @@ -42,6 +42,8 @@ def TitleSlide(text): f = open(transect, 'r') species = f.read().split("\n")[:-1] f.close() + if species == []: + continue c = collections.Counter(species) sorter = np.argsort(c.keys()) ind = np.arange(len(c.keys())) diff --git a/src/Scripts/extendedreport.py b/src/Scripts/extendedreport.py index e5564eea4..b197153b1 100755 --- a/src/Scripts/extendedreport.py +++ b/src/Scripts/extendedreport.py @@ -10,11 +10,14 @@ workbook = Workbook() - +numSheets = 0 for transect in transects: f = open(transect, 'r') res = np.array(map(lambda x: x.split(","), f.read().split("\n")[:-1])) f.close() + if not res.size: + continue + numSheets += 1 uniqueclasses = np.unique(res[:, 1]) uniqueimages = np.unique(res[:, 0]) class2column = dict(zip(uniqueclasses, range(len(uniqueclasses)))) @@ -30,6 +33,8 @@ ws.set_cell_value(1, 1, "") ws.set_row_style(1, Style(fill=Fill(background=Color(200, 200, 200, 0)))) ws.set_col_style(1, Style(fill=Fill(background=Color(200, 200, 200, 0)))) +if not numSheets: + ws = workbook.new_sheet("No labels found") uid = str(uuid.uuid4()) workbook.save(prefix + "/" + uid + ".xlsx") print uid + ";" + prefix + "/" + uid + ".xlsx" From a660c933bf3265bc2fa8f611bb881a1463ea0dab Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 29 Jun 2016 16:59:58 +0200 Subject: [PATCH 010/407] WIP Start dias integration --- README.md | 5 +- requirements.txt | 32 ----- .../Commands/{Install.php => Config.php} | 21 +-- src/Console/Commands/Publish.php | 37 +++++ src/ExportServiceProvider.php | 30 ++-- src/Jobs/GenerateBasicReport.php | 78 ++++++++--- src/Scripts/basicreport.py | 68 --------- src/Support/CsvFile.php | 130 ++++++++++++++++++ src/Support/Reports/Basic.php | 31 +++++ src/Support/Reports/Report.php | 50 +++++++ src/config/export.php | 28 ++++ .../2016_05_18_135218_add_files_table.php | 30 ---- .../assets/images}/biigle_dias_logo.png | Bin .../assets/images}/logo_en_tr-height72.png | Bin src/resources/scripts/basic_report.py | 86 ++++++++++++ .../scripts/extended_report.py} | 0 .../scripts/full_report.py} | 0 src/resources/views/emails/report.blade.php | 23 ++++ src/resources/views/reportmail.blade.php | 12 -- ...rtModuleJobsGenerateBasicReportJobTest.php | 76 ++++++++++ 20 files changed, 552 insertions(+), 185 deletions(-) rename src/Console/Commands/{Install.php => Config.php} (50%) create mode 100644 src/Console/Commands/Publish.php delete mode 100755 src/Scripts/basicreport.py create mode 100644 src/Support/CsvFile.php create mode 100644 src/Support/Reports/Basic.php create mode 100644 src/Support/Reports/Report.php create mode 100644 src/config/export.php delete mode 100644 src/database/migrations/2016_05_18_135218_add_files_table.php rename src/{Scripts => resources/assets/images}/biigle_dias_logo.png (100%) rename src/{Scripts => resources/assets/images}/logo_en_tr-height72.png (100%) create mode 100755 src/resources/scripts/basic_report.py rename src/{Scripts/extendedreport.py => resources/scripts/extended_report.py} (100%) rename src/{Scripts/fullreport.py => resources/scripts/full_report.py} (100%) create mode 100644 src/resources/views/emails/report.blade.php delete mode 100644 src/resources/views/reportmail.blade.php create mode 100644 tests/Jobs/ExportModuleJobsGenerateBasicReportJobTest.php diff --git a/README.md b/README.md index cfcdfa732..4b71348cf 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,8 @@ Add the following to the repositories array of your `composer.json`: } ``` -1. Run `php composer.phar require dias/export:dev-master`. +1. Run `php composer.phar require dias/export`. 2. Add `'Dias\Modules\Export\ExportServiceProvider'` to the `providers` array in `config/app.php`. 3. Run `php artisan export:publish` to refresh the public assets of this package. Do this for every update of the package. -4. Run `pip install -r requirements` to install python requirements \ No newline at end of file +4. Run `pip install -r vendor/dias/export/requirements.txt` to install python requirements. +5. Create a `storage/reports` directory that is read/writable for the web application. The location can be configured via the `export.exports_storage` key. diff --git a/requirements.txt b/requirements.txt index 6a4ba4f93..02d407a53 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,35 +1,3 @@ -Jinja2==2.8 -MarkupSafe==0.23 -Pillow==2.3.0 PyExcelerate==0.6.7 -apt-xapian-index==0.45 -argparse==1.2.1 -chardet==2.0.1 -colorama==0.2.5 -decorator==3.4.0 -html5lib==0.999 -ipython==1.2.1 -joblib==0.7.1 matplotlib==1.3.1 -meld3==0.6.10 -nose==1.3.1 numpy==1.8.2 -pexpect==3.1 -pyparsing==2.0.1 -python-apt==0.9.3.5ubuntu2 -python-dateutil==1.5 -python-debian==0.1.21-nmu2ubuntu2 -pytz==2012c -requests==2.2.1 -scikit-learn==0.14.1 -scipy==0.13.3 -simplegeneric==0.8.1 -simplejson==3.3.1 -six==1.5.2 -sklearn==0.0 -ssh-import-id==3.21 -supervisor==3.0b2 -urllib3==1.7.1 -virtualenv==15.0.1 -wheel==0.24.0 -wsgiref==0.1.2 diff --git a/src/Console/Commands/Install.php b/src/Console/Commands/Config.php similarity index 50% rename from src/Console/Commands/Install.php rename to src/Console/Commands/Config.php index 783f3c26d..75fd2bbce 100644 --- a/src/Console/Commands/Install.php +++ b/src/Console/Commands/Config.php @@ -3,24 +3,23 @@ namespace Dias\Modules\Export\Console\Commands; use Illuminate\Console\Command; -use Dias\Attribute; use Dias\Modules\Export\ExportServiceProvider as ServiceProvider; -class Install extends Command -{ +class Config extends Command { + /** * The console command name. * * @var string */ - protected $name = 'export:install'; + protected $name = 'export:config'; /** * The console command description. * * @var string */ - protected $description = 'Run the database migrations for the dias/export package'; + protected $description = 'Publish the configuration of this package'; /** * Execute the command. @@ -28,20 +27,10 @@ class Install extends Command * @return void */ public function handle() - { - $this->setUpMigration(); - $this->info('Finished! Please refer to the package readme on how to proceed.'); - } - - private function setUpMigration() { $this->call('vendor:publish', [ '--provider' => ServiceProvider::class, - '--tag' => ['migrations'], + '--tag' => ['config'], ]); - - if ($this->confirm('Do you want to run the migration right away?')) { - $this->call('migrate'); - } } } diff --git a/src/Console/Commands/Publish.php b/src/Console/Commands/Publish.php new file mode 100644 index 000000000..734d2d6fa --- /dev/null +++ b/src/Console/Commands/Publish.php @@ -0,0 +1,37 @@ +call('vendor:publish', [ + '--provider' => ServiceProvider::class, + '--tag' => ['public'], + '--force' => true, + ]); + } +} diff --git a/src/ExportServiceProvider.php b/src/ExportServiceProvider.php index c7b95d7b5..6c62deeb5 100644 --- a/src/ExportServiceProvider.php +++ b/src/ExportServiceProvider.php @@ -5,7 +5,6 @@ use Illuminate\Support\ServiceProvider; use Illuminate\Routing\Router; use Dias\Services\Modules; -use Dias\Modules\Export\Console\Commands\Install as InstallCommand; class ExportServiceProvider extends ServiceProvider { @@ -20,18 +19,22 @@ class ExportServiceProvider extends ServiceProvider { public function boot(Modules $modules,Router $router) { $this->loadViewsFrom(__DIR__.'/resources/views', 'export'); + $router->group([ 'namespace' => 'Dias\Modules\Export\Http\Controllers', 'middleware' => 'web', ], function ($router) { require __DIR__.'/Http/routes.php'; }); - $this->publishes([ - __DIR__.'/database/migrations/' => database_path('migrations') - ], 'migrations'); + $this->publishes([ __DIR__.'/public/assets' => public_path('vendor/export'), ], 'public'); + + $this->publishes([ + __DIR__.'/config/export.php' => config_path('export.php'), + ], 'config'); + $modules->addMixin('export', 'projectsShow'); $modules->addMixin('export', 'projectsScripts'); } @@ -43,12 +46,20 @@ public function boot(Modules $modules,Router $router) */ public function register() { - // set up the install console command - $this->app->singleton('command.export.install', function ($app) { - return new InstallCommand(); + $this->mergeConfigFrom(__DIR__.'/config/export.php', 'export'); + + $this->app->singleton('command.export.publish', function ($app) { + return new \Dias\Modules\Export\Console\Commands\Publish(); + }); + + $this->app->singleton('command.export.config', function ($app) { + return new \Dias\Modules\Export\Console\Commands\Config(); }); - $this->commands('command.export.install'); + $this->commands([ + 'command.export.publish', + 'command.export.config', + ]); } /** @@ -59,7 +70,8 @@ public function register() public function provides() { return [ - 'command.export.install', + 'command.export.publish', + 'command.export.config', ]; } } diff --git a/src/Jobs/GenerateBasicReport.php b/src/Jobs/GenerateBasicReport.php index 96b641dfd..dce9fb5ea 100644 --- a/src/Jobs/GenerateBasicReport.php +++ b/src/Jobs/GenerateBasicReport.php @@ -4,6 +4,8 @@ use Mail; use DB; +use Dias\Modules\Export\Support\CsvFile; +use Dias\Modules\Export\Support\Reports\Basic; use Dias\Jobs\Job; use Dias\Project; use Dias\User; @@ -21,12 +23,19 @@ class GenerateBasicReport extends Job implements ShouldQueue * @var Project */ private $project; + + /** + * The user to notify of the finished report + * + * @var User + */ private $user; /** * Create a new job instance. * * @param Project $project The project for which the report should be generated. + * @param User $user The user to notify of the finished report * * @return void */ @@ -43,21 +52,58 @@ public function __construct(Project $project, User $user) */ public function handle() { - DB::reconnect(); - $transects = DB::select('SELECT transects.id, transects.name FROM transects, project_transect WHERE project_transect.project_id = '.$this->project->id.' AND transects.id = project_transect.transect_id'); - $cmd=$this->project->name." "; - $path = uniqid("/tmp/"); - mkdir($path); - chmod($path,0777); - foreach ($transects as $transect) { - DB::statement('copy (SELECT labels.name FROM annotation_labels, annotations, images, labels WHERE annotation_labels.annotation_id = annotations.id AND annotations.image_id = images.id AND labels.id = annotation_labels.label_id AND images.transect_id = '.$transect->id.') to \''.$path."/".$transect->name.'.csv\' csv'); - $cmd.=$path."/".$transect->name.'.csv '; + $transects = $this->project->transects() + ->pluck('name', 'id'); + + $tmpPath = config('export.tmp_storage'); + $tmpFiles = []; + + $query = DB::table('labels') + ->join('annotation_labels', 'annotation_labels.label_id', '=', 'labels.id') + ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') + ->join('images', 'annotations.image_id', '=', 'images.id') + ->select('labels.id', 'labels.name', 'labels.color'); + + try { + foreach ($transects as $id => $name) { + $csv = CsvFile::makeTmp(); + $tmpFiles[] = $csv; + + // put transect name to first line + $csv->put([$name]); + + $query->where('images.transect_id', $id) + ->chunk(500, function ($rows) use ($csv) { + foreach ($rows as $row) { + $csv->put((array) $row); + } + }); + + $csv->close(); + } + + $report = app()->make(Basic::class); + $report->generate($this->project, $tmpFiles); + + Mail::send('export::emails.report', [ + 'user' => $this->user, + 'project' => $this->project, + 'type' => 'basic', + 'uuid' => $report->basename(), + ], function ($mail) { + if ($this->user->firstname && $this->user->lastname) { + $name = "{$this->user->firstname} {$this->user->lastname}"; + } else { + $name = null; + } + + $mail->subject("BIIGLE basic report for project {$this->project->name}") + ->to($this->user->email, $name); + }); + } finally { + array_walk($tmpFiles, function ($file) { + $file->delete(); + }); } - $ret = system('/usr/bin/python '.__DIR__.'/../Scripts/basicreport.py '.$cmd); - $uuid2path = explode(";",$ret); - DB::insert('insert into files (id, path) values (?, ?)', $uuid2path); - Mail::send('export::reportmail', ["uuid"=>$uuid2path[0],"ending"=>".pdf","name"=>$this->user['attributes']['firstname']." ".$this->user['attributes']['lastname']], function($message){ - $message->to($this->user['attributes']['email'], $this->user['attributes']['firstname']." ".$this->user['attributes']['lastname'])->subject('BiigleDiasReport'); - }); } -} \ No newline at end of file +} diff --git a/src/Scripts/basicreport.py b/src/Scripts/basicreport.py deleted file mode 100755 index c0f0621a4..000000000 --- a/src/Scripts/basicreport.py +++ /dev/null @@ -1,68 +0,0 @@ -import matplotlib -matplotlib.use('Agg') -import matplotlib.pyplot as plt -from matplotlib.backends.backend_pdf import PdfPages -import matplotlib.image as mpimg -import datetime -import sys -import collections -import numpy as np -import uuid - - -prjName = sys.argv[1] -transects = sys.argv[2:] -prefix = "/home/vagrant/dias/storage/" - - -def TitleSlide(text): - fig = plt.figure(figsize=(10, 4)) - plt.subplot2grid((3, 3), (0, 0), colspan=3) - mid = plt.subplot2grid((3, 3), (0, 0), colspan=3) - mid.axis('off') - btleft = plt.subplot2grid((3, 3), (2, 0)) - btleft.axis('off') - btmid = plt.subplot2grid((3, 3), (2, 1)) - btmid.axis('off') - btright = plt.subplot2grid((3, 3), (2, 2)) - btright.axis('off') - mid.text(0.404, 0.5, text, fontsize=15) - # btleft.imshow(mpimg.imread('biigle_dias_logo.png')) - btmid.text(0.423, 0.5, datetime.date.today(), fontsize=9) - # btright.imshow(mpimg.imread('logo_en_tr-height72.png')) - return fig - -uid = str(uuid.uuid4()) -pdf = PdfPages(prefix + "/" + uid + ".pdf") -fig = TitleSlide("BiigleDias Report") -pdf.savefig(fig) -width = 1. - -for transect in transects: - f = open(transect, 'r') - species = f.read().split("\n")[:-1] - f.close() - if species == []: - continue - c = collections.Counter(species) - sorter = np.argsort(c.keys()) - ind = np.arange(len(c.keys())) - fig, ax = plt.subplots(figsize=(10, 6)) - fig.subplots_adjust(bottom=0.33) - ax.bar(ind, np.array(c.values())[sorter], width, color='b') - if np.array(c.values()).max() > 100: - ax.set_yscale('log') - ax.set_xticks(ind + width / 2) - ax.set_xticklabels(np.array(c.keys())[sorter], rotation='vertical', fontsize=8) - plt.title(str(transect.split("/")[-1][:-4])) - plt.xlim([0, len(c.keys())]) - pdf.savefig() -d = pdf.infodict() -d['Title'] = 'BiigleDias Report' -d['Author'] = 'Biodata Mining Group, Bielefeld University' -d['Subject'] = 'Histograms of label distribution in all transects of a project' -d['Keywords'] = '' -d['CreationDate'] = datetime.datetime.today() -d['ModDate'] = datetime.datetime.today() -pdf.close() -print uid + ";" + prefix + "/" + uid + ".pdf" diff --git a/src/Support/CsvFile.php b/src/Support/CsvFile.php new file mode 100644 index 000000000..ab994dc2e --- /dev/null +++ b/src/Support/CsvFile.php @@ -0,0 +1,130 @@ +path = $path; + $this->delimiter = $delimiter; + $this->enclosure = $enclosure; + $this->escape_char = $escape_char; + $this->handle = fopen($this->path, 'w'); + } + + public function __destruct() + { + $this->close(); + } + + /** + * Creates a new CsvFile in the temporary storage + * + * @return CsvFile + */ + public static function makeTmp() + { + do { + $path = uniqid(config('export.tmp_storage').'/'); + } while (File::exists($path)); + + return app()->make(self::class, [$path]); + } + + /** + * Append a new row to the CSV file + * + * @param array $items Row items + */ + public function put(array $items) + { + fputcsv($this->handle, $items, $this->delimiter, $this->enclosure, $this->escape_char); + } + + /** + * Delete the CSV file + */ + public function delete() + { + $this->close(); + File::delete($this->path); + } + + /** + * Return the basename of this file + * + * @return string + */ + public function basename() + { + return File::basename($this->path); + } + + /** + * Return the dirname of this file + * + * @return string + */ + public function dirname() + { + return File::dirname($this->path); + } + + /** + * Close the CSV file + */ + private function close() + { + try { + fclose($this->handle); + } catch (\Exception $e) { + // + } + } +} diff --git a/src/Support/Reports/Basic.php b/src/Support/Reports/Basic.php new file mode 100644 index 000000000..83faa71db --- /dev/null +++ b/src/Support/Reports/Basic.php @@ -0,0 +1,31 @@ +path; + }, $csvs)); + + system("{$python} {$script} \"{$project->name}\" {$this->path} {$csvs}", $code); + + if ($code !== 0) { + throw new Exception("Basic report generation failed with exit code {$code}."); + } + } +} diff --git a/src/Support/Reports/Report.php b/src/Support/Reports/Report.php new file mode 100644 index 000000000..9da99b17f --- /dev/null +++ b/src/Support/Reports/Report.php @@ -0,0 +1,50 @@ +path = $path; + } + + /** + * Return the basename of the file of this repost + * + * @return string + */ + public function basename() + { + return File::basename($this->path); + } + + /** + * Return the dirname of the file of this repost + * + * @return string + */ + public function dirname() + { + return File::dirname($this->path); + } + +} diff --git a/src/config/export.php b/src/config/export.php new file mode 100644 index 000000000..5abc97797 --- /dev/null +++ b/src/config/export.php @@ -0,0 +1,28 @@ + '/usr/bin/python', + + /* + | Paths to the python scripts. + */ + 'scripts' => [ + 'basic_report' => __DIR__.'/../resources/scripts/basic_report.py', + 'extended_report' => __DIR__.'/../resources/scripts/extended_report.py', + 'full_report' => __DIR__.'/../resources/scripts/full_report.py', + ], + + /* + | Directory to store the report files to + */ + 'reports_storage' => storage_path('reports'), + + /* + | Directory to store temporary files to + */ + 'tmp_storage' => '/tmp', +]; diff --git a/src/database/migrations/2016_05_18_135218_add_files_table.php b/src/database/migrations/2016_05_18_135218_add_files_table.php deleted file mode 100644 index 878c84610..000000000 --- a/src/database/migrations/2016_05_18_135218_add_files_table.php +++ /dev/null @@ -1,30 +0,0 @@ -uuid('id'); - $table->longText('path'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::drop('files'); - } -} diff --git a/src/Scripts/biigle_dias_logo.png b/src/resources/assets/images/biigle_dias_logo.png similarity index 100% rename from src/Scripts/biigle_dias_logo.png rename to src/resources/assets/images/biigle_dias_logo.png diff --git a/src/Scripts/logo_en_tr-height72.png b/src/resources/assets/images/logo_en_tr-height72.png similarity index 100% rename from src/Scripts/logo_en_tr-height72.png rename to src/resources/assets/images/logo_en_tr-height72.png diff --git a/src/resources/scripts/basic_report.py b/src/resources/scripts/basic_report.py new file mode 100755 index 000000000..032be165c --- /dev/null +++ b/src/resources/scripts/basic_report.py @@ -0,0 +1,86 @@ +import matplotlib +matplotlib.use('Agg') +import matplotlib.pyplot as plt +from matplotlib.backends.backend_pdf import PdfPages +import matplotlib.image as mpimg +import datetime +import sys +import collections +import numpy as np +import uuid +import csv + + +project_name = sys.argv[1] +target_file = sys.argv[2] +transect_csvs = sys.argv[3:] + + +def TitleSlide(text): + fig = plt.figure(figsize=(10, 4)) + plt.subplot2grid((3, 3), (0, 0), colspan=3) + mid = plt.subplot2grid((3, 3), (0, 0), colspan=3) + mid.axis('off') + btleft = plt.subplot2grid((3, 3), (2, 0)) + btleft.axis('off') + btmid = plt.subplot2grid((3, 3), (2, 1)) + btmid.axis('off') + btright = plt.subplot2grid((3, 3), (2, 2)) + btright.axis('off') + mid.text(0.404, 0.5, text, fontsize=15) + # btleft.imshow(mpimg.imread('biigle_dias_logo.png')) + btmid.text(0.423, 0.5, datetime.date.today(), fontsize=9) + # btright.imshow(mpimg.imread('logo_en_tr-height72.png')) + return fig + +pdf = PdfPages(target_file) +fig = TitleSlide("BIIGLE DIAS basic report for project " + project_name) +pdf.savefig(fig) +width = 1. + +for path in transect_csvs: + f = open(path, 'r') + transect_csv = csv.reader(f) + transect_name = transect_csv.next()[0] + id_map = {} + names = [] + colors = [] + counts = [] + species_dict = {}; + for row in transect_csv: + if row[0] in id_map: + counts[id_map[row[0]]] += 1 + else: + id_map[row[0]] = len(names) + names.append(row[1]) + colors.append(row[2]) + counts.append(1) + f.close() + print names, colors, counts + # transect_name = f.readline().rstrip().strip('"'); + # species = f.read().split("\n")[:-1] + # f.close() + # if species == []: + # continue + # c = collections.Counter(species) + # sorter = np.argsort(c.keys()) +# ind = np.arange(len(c.keys())) +# fig, ax = plt.subplots(figsize=(10, 6)) +# fig.subplots_adjust(bottom=0.33) +# ax.bar(ind, np.array(c.values())[sorter], width, color='b') +# if np.array(c.values()).max() > 100: +# ax.set_yscale('log') +# ax.set_xticks(ind + width / 2) +# ax.set_xticklabels(np.array(c.keys())[sorter], rotation='vertical', fontsize=8) +# plt.title(str(transect.split("/")[-1][:-4])) +# plt.xlim([0, len(c.keys())]) +# pdf.savefig() +# d = pdf.infodict() +# d['Title'] = 'BiigleDias Report' +# d['Author'] = 'Biodata Mining Group, Bielefeld University' +# d['Subject'] = 'Histograms of label distribution in all transects of a project' +# d['Keywords'] = '' +# d['CreationDate'] = datetime.datetime.today() +# d['ModDate'] = datetime.datetime.today() +# pdf.close() +# print uid + ";" + prefix + "/" + uid + ".pdf" diff --git a/src/Scripts/extendedreport.py b/src/resources/scripts/extended_report.py similarity index 100% rename from src/Scripts/extendedreport.py rename to src/resources/scripts/extended_report.py diff --git a/src/Scripts/fullreport.py b/src/resources/scripts/full_report.py similarity index 100% rename from src/Scripts/fullreport.py rename to src/resources/scripts/full_report.py diff --git a/src/resources/views/emails/report.blade.php b/src/resources/views/emails/report.blade.php new file mode 100644 index 000000000..8775c05b5 --- /dev/null +++ b/src/resources/views/emails/report.blade.php @@ -0,0 +1,23 @@ + + + + + BIGLE DIAS Report Notification + + +

+ @if ($user->firstname && $user->lastname) + Dear {{$user->firstname}} {{$user->lastname}},

+ @else + Dear user,

+ @endif + your BIGLE DIAS {{$type}} report for project {{$project->name}} is ready for download. +

+

+ The report will be removed once you have downloaded it. +

+

+ Download report +

+ + diff --git a/src/resources/views/reportmail.blade.php b/src/resources/views/reportmail.blade.php deleted file mode 100644 index eb2ec4ae3..000000000 --- a/src/resources/views/reportmail.blade.php +++ /dev/null @@ -1,12 +0,0 @@ - - - - - BiigleDias Report Notification - - -

Dear {{{$name}}},

-

your BiigleDias report is ready for download. Please save it because it is deleted after the first access.

- Download report - - \ No newline at end of file diff --git a/tests/Jobs/ExportModuleJobsGenerateBasicReportJobTest.php b/tests/Jobs/ExportModuleJobsGenerateBasicReportJobTest.php new file mode 100644 index 000000000..c0f4298bd --- /dev/null +++ b/tests/Jobs/ExportModuleJobsGenerateBasicReportJobTest.php @@ -0,0 +1,76 @@ +transects()->attach($transect); + $user = UserTest::create(); + + $al = AnnotationLabelTest::create(); + $al->annotation->image->transect_id = $transect->id; + $al->annotation->image->save(); + + // check if the temporary file exists + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->once() + ->with([$transect->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$al->label->id, $al->label->name, $al->label->color]); + + $mock->shouldReceive('close') + ->once(); + + $mock->shouldReceive('delete') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('generate') + ->once() + ->with(Mockery::type(Project::class), Mockery::type('array')); + + $mock->shouldReceive('basename') + ->once() + ->andReturn('abc123'); + + App::singleton(Basic::class, function () use ($mock) { + return $mock; + }); + + Mail::shouldReceive('send') + ->once() + ->withArgs([ + 'export::emails.report', + [ + 'user' => $user, + 'type' => 'basic', + 'project' => $project, + 'uuid' => 'abc123', + ], + Mockery::type('callable') + ]); + + + with(new GenerateBasicReport($project, $user))->handle(); + } +} From c5ecaf8b4de6825472d2adbb30772244ffff6124 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 30 Jun 2016 11:48:40 +0200 Subject: [PATCH 011/407] Make basic report functional --- .../Controllers/Api/ReportsController.php | 48 +++-- src/Http/routes.php | 10 +- src/Jobs/GenerateBasicReport.php | 82 ++++---- src/Jobs/GenerateReportJob.php | 43 +++++ src/Support/CsvFile.php | 2 +- src/Support/Reports/Basic.php | 2 +- src/Support/Reports/Report.php | 42 ++++- src/resources/scripts/basic_report.py | 85 ++++----- src/resources/views/emails/report.blade.php | 4 +- ...rtModuleJobsGenerateBasicReportJobTest.php | 76 -------- ...xportModuleJobsGenerateBasicReportTest.php | 176 ++++++++++++++++++ 11 files changed, 350 insertions(+), 220 deletions(-) create mode 100644 src/Jobs/GenerateReportJob.php delete mode 100644 tests/Jobs/ExportModuleJobsGenerateBasicReportJobTest.php create mode 100644 tests/Jobs/ExportModuleJobsGenerateBasicReportTest.php diff --git a/src/Http/Controllers/Api/ReportsController.php b/src/Http/Controllers/Api/ReportsController.php index 082039278..f736e5500 100644 --- a/src/Http/Controllers/Api/ReportsController.php +++ b/src/Http/Controllers/Api/ReportsController.php @@ -1,19 +1,20 @@ authorize('access', $project); $this->dispatch(new GenerateBasicReport($project, $this->user)); - return "Job submitted please wait. An Email will be sent to you."; } - + /** * Generate a extended report * - * @api {post} projects/:id/reports/extended Generate a new report + * @api {get} projects/:id/reports/extended Generate a new report * @apiGroup Projects * @apiName GenerateExtendedProjectReport * @apiPermission projectMember @@ -48,13 +48,12 @@ public function extended($id) { $project = Project::findOrFail($id); $this->authorize('access', $project); - $this->dispatch(new GenerateExtendedReport($project,$this->user)); - return "Job submitted please wait. An Email will be sent to you."; + $this->dispatch(new GenerateExtendedReport($project, $this->user)); } /** * Generate a full report * - * @api {post} projects/:id/reports/full Generate a new report + * @api {get} projects/:id/reports/full Generate a new report * @apiGroup Projects * @apiName GenerateFullProjectReport * @apiPermission projectMember @@ -68,36 +67,31 @@ public function full($id) { $project = Project::findOrFail($id); $this->authorize('access', $project); - $this->dispatch(new GenerateFullReport($project,$this->user)); - return "Job submitted please wait. An Email will be sent to you."; + $this->dispatch(new GenerateFullReport($project, $this->user)); } /** * Retrieve report from filesystem * - * @api {post} files/retrieve/:uuid + * @api {get} reports/:uid/:filename * @apiGroup Files * @apiName RetrieveProjectReport - * @apiPermission projectMember * - * @apiParam {Text} uuid The report uuid. + * @apiParam {string} uid The report uid. + * @apiParam {string} filename Filename of the downloaded file. * - * @param int $uuid report uuid + * @param string $uid report uid + * @param string $filename Download filename * @return \Illuminate\Http\Response */ - public function retrieveReport($uuid,$filename) + public function show($uid, $filename) { - $results = DB::select('select path from files where id=?',[$uuid]); - if ($results){ - $path = $results[0]->path; - $finfo = finfo_open(FILEINFO_MIME_TYPE); - $mime=finfo_file($finfo, $path); - finfo_close($finfo); - $file = file_get_contents($path); - unlink($path); - DB::delete("delete from files where id=?",[$uuid]); - return response($file)->header("Content-Type",$mime); - }else{ - return "The file is not available. Please check your uid."; + $report = new Report($uid); + if ($report->exists()) { + return response() + ->download($report->path, $filename) + ->deleteFileAfterSend(true); + } else { + abort(404); } } } diff --git a/src/Http/routes.php b/src/Http/routes.php index 6fc20ad45..46ad71cff 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -14,7 +14,9 @@ $router->get('projects/{id}/reports/full', [ 'uses' => 'ReportsController@full', ]); - $router->get('files/retrieve/{uid}/{filename}', [ - 'uses' => 'ReportsController@retrieveReport', - ]); -}); \ No newline at end of file +}); + +// this route should be public public (is protected by random uids) +$router->get('api/v1/reports/{uid}/{filename}', [ + 'uses' => 'Api\ReportsController@show', +]); diff --git a/src/Jobs/GenerateBasicReport.php b/src/Jobs/GenerateBasicReport.php index dce9fb5ea..efb4ee967 100644 --- a/src/Jobs/GenerateBasicReport.php +++ b/src/Jobs/GenerateBasicReport.php @@ -6,45 +6,9 @@ use DB; use Dias\Modules\Export\Support\CsvFile; use Dias\Modules\Export\Support\Reports\Basic; -use Dias\Jobs\Job; -use Dias\Project; -use Dias\User; -use Illuminate\Queue\SerializesModels; -use Illuminate\Queue\InteractsWithQueue; -use Illuminate\Contracts\Queue\ShouldQueue; -class GenerateBasicReport extends Job implements ShouldQueue +class GenerateBasicReport extends GenerateReportJob { - use InteractsWithQueue, SerializesModels; - - /** - * The project for which the report should be generated. - * - * @var Project - */ - private $project; - - /** - * The user to notify of the finished report - * - * @var User - */ - private $user; - - /** - * Create a new job instance. - * - * @param Project $project The project for which the report should be generated. - * @param User $user The user to notify of the finished report - * - * @return void - */ - public function __construct(Project $project, User $user) - { - $this->project = $project; - $this->user = $user; - } - /** * Execute the job. * @@ -55,29 +19,26 @@ public function handle() $transects = $this->project->transects() ->pluck('name', 'id'); - $tmpPath = config('export.tmp_storage'); $tmpFiles = []; - $query = DB::table('labels') - ->join('annotation_labels', 'annotation_labels.label_id', '=', 'labels.id') - ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') - ->join('images', 'annotations.image_id', '=', 'images.id') - ->select('labels.id', 'labels.name', 'labels.color'); - try { foreach ($transects as $id => $name) { $csv = CsvFile::makeTmp(); $tmpFiles[] = $csv; + // put transect name to first line $csv->put([$name]); - $query->where('images.transect_id', $id) - ->chunk(500, function ($rows) use ($csv) { - foreach ($rows as $row) { - $csv->put((array) $row); - } - }); + $rows = $this->query()->where('images.transect_id', $id)->get(); + + foreach ($rows as $row) { + $csv->put([ + $row->name, + $row->color, + $row->count, + ]); + } $csv->close(); } @@ -90,6 +51,7 @@ public function handle() 'project' => $this->project, 'type' => 'basic', 'uuid' => $report->basename(), + 'filename' => "biigle_{$this->project->id}_basic_report.pdf", ], function ($mail) { if ($this->user->firstname && $this->user->lastname) { $name = "{$this->user->firstname} {$this->user->lastname}"; @@ -100,10 +62,30 @@ public function handle() $mail->subject("BIIGLE basic report for project {$this->project->name}") ->to($this->user->email, $name); }); + } catch (\Exception $e) { + if (isset($report)) { + $report->delete(); + throw $e; + } } finally { array_walk($tmpFiles, function ($file) { $file->delete(); }); } } + + /** + * Assemble a new DB query for a transect. + * + * @return \Illuminate\Database\Query\Builder + */ + private function query() + { + return DB::table('labels') + ->join('annotation_labels', 'annotation_labels.label_id', '=', 'labels.id') + ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') + ->join('images', 'annotations.image_id', '=', 'images.id') + ->select(DB::raw('labels.name, labels.color, count(labels.id) as count')) + ->groupBy('labels.id'); + } } diff --git a/src/Jobs/GenerateReportJob.php b/src/Jobs/GenerateReportJob.php new file mode 100644 index 000000000..59ec88f3e --- /dev/null +++ b/src/Jobs/GenerateReportJob.php @@ -0,0 +1,43 @@ +project = $project; + $this->user = $user; + } +} diff --git a/src/Support/CsvFile.php b/src/Support/CsvFile.php index ab994dc2e..4f6b941cb 100644 --- a/src/Support/CsvFile.php +++ b/src/Support/CsvFile.php @@ -119,7 +119,7 @@ public function dirname() /** * Close the CSV file */ - private function close() + public function close() { try { fclose($this->handle); diff --git a/src/Support/Reports/Basic.php b/src/Support/Reports/Basic.php index 83faa71db..f6d9590c9 100644 --- a/src/Support/Reports/Basic.php +++ b/src/Support/Reports/Basic.php @@ -25,7 +25,7 @@ public function generate(Project $project, array $csvs) system("{$python} {$script} \"{$project->name}\" {$this->path} {$csvs}", $code); if ($code !== 0) { - throw new Exception("Basic report generation failed with exit code {$code}."); + throw new \Exception("Basic report generation failed with exit code {$code}."); } } } diff --git a/src/Support/Reports/Report.php b/src/Support/Reports/Report.php index 9da99b17f..8c26fa7a1 100644 --- a/src/Support/Reports/Report.php +++ b/src/Support/Reports/Report.php @@ -15,20 +15,26 @@ class Report /** * Create a new report object + * + * @param string $path Optional basename of an existing report file. If not specified, a new one will be generated */ - public function __construct() + public function __construct($basename = null) { - do { - // use str_random to generate a cryptographically secure random string - // because it will be used to retrieve the file via a public url - $path = config('export.reports_storage').'/'.str_random(); - } while (File::exists($path)); + if ($basename) { + $this->path = config('export.reports_storage').'/'.$basename; + } else { + do { + // use str_random to generate a cryptographically secure random string + // because it will be used to retrieve the file via a public url + $path = config('export.reports_storage').'/'.str_random(); + } while (File::exists($path)); - $this->path = $path; + $this->path = $path; + } } /** - * Return the basename of the file of this repost + * Return the basename of the file of this report * * @return string */ @@ -38,7 +44,7 @@ public function basename() } /** - * Return the dirname of the file of this repost + * Return the dirname of the file of this report * * @return string */ @@ -47,4 +53,22 @@ public function dirname() return File::dirname($this->path); } + /** + * Delete the report file + */ + public function delete() + { + return File::delete($this->path); + } + + /** + * Check if the report exists + * + * @return bool + */ + public function exists() + { + return File::exists($this->path); + } + } diff --git a/src/resources/scripts/basic_report.py b/src/resources/scripts/basic_report.py index 032be165c..1b91218f9 100755 --- a/src/resources/scripts/basic_report.py +++ b/src/resources/scripts/basic_report.py @@ -2,20 +2,16 @@ matplotlib.use('Agg') import matplotlib.pyplot as plt from matplotlib.backends.backend_pdf import PdfPages -import matplotlib.image as mpimg +# import matplotlib.image as mpimg import datetime import sys -import collections import numpy as np -import uuid import csv - project_name = sys.argv[1] target_file = sys.argv[2] transect_csvs = sys.argv[3:] - def TitleSlide(text): fig = plt.figure(figsize=(10, 4)) plt.subplot2grid((3, 3), (0, 0), colspan=3) @@ -27,14 +23,14 @@ def TitleSlide(text): btmid.axis('off') btright = plt.subplot2grid((3, 3), (2, 2)) btright.axis('off') - mid.text(0.404, 0.5, text, fontsize=15) - # btleft.imshow(mpimg.imread('biigle_dias_logo.png')) + mid.text(0.5, 0.5, text, fontsize=15, horizontalalignment='center') + # btleft.imshow(mpimg.imread('../assets/images/biigle_dias_logo.png')) btmid.text(0.423, 0.5, datetime.date.today(), fontsize=9) - # btright.imshow(mpimg.imread('logo_en_tr-height72.png')) + # btright.imshow(mpimg.imread('../assets/images/logo_en_tr-height72.png')) return fig pdf = PdfPages(target_file) -fig = TitleSlide("BIIGLE DIAS basic report for project " + project_name) +fig = TitleSlide("BIIGLE DIAS basic report for project\n" + project_name) pdf.savefig(fig) width = 1. @@ -42,45 +38,34 @@ def TitleSlide(text): f = open(path, 'r') transect_csv = csv.reader(f) transect_name = transect_csv.next()[0] - id_map = {} - names = [] - colors = [] - counts = [] - species_dict = {}; - for row in transect_csv: - if row[0] in id_map: - counts[id_map[row[0]]] += 1 - else: - id_map[row[0]] = len(names) - names.append(row[1]) - colors.append(row[2]) - counts.append(1) + rows = np.array(list(transect_csv)) f.close() - print names, colors, counts - # transect_name = f.readline().rstrip().strip('"'); - # species = f.read().split("\n")[:-1] - # f.close() - # if species == []: - # continue - # c = collections.Counter(species) - # sorter = np.argsort(c.keys()) -# ind = np.arange(len(c.keys())) -# fig, ax = plt.subplots(figsize=(10, 6)) -# fig.subplots_adjust(bottom=0.33) -# ax.bar(ind, np.array(c.values())[sorter], width, color='b') -# if np.array(c.values()).max() > 100: -# ax.set_yscale('log') -# ax.set_xticks(ind + width / 2) -# ax.set_xticklabels(np.array(c.keys())[sorter], rotation='vertical', fontsize=8) -# plt.title(str(transect.split("/")[-1][:-4])) -# plt.xlim([0, len(c.keys())]) -# pdf.savefig() -# d = pdf.infodict() -# d['Title'] = 'BiigleDias Report' -# d['Author'] = 'Biodata Mining Group, Bielefeld University' -# d['Subject'] = 'Histograms of label distribution in all transects of a project' -# d['Keywords'] = '' -# d['CreationDate'] = datetime.datetime.today() -# d['ModDate'] = datetime.datetime.today() -# pdf.close() -# print uid + ";" + prefix + "/" + uid + ".pdf" + if rows.shape[0] == 0: + continue + # rows have the content: label_name, label_color, label_count + counts = rows[:,2].astype(int) + ind = np.arange(rows.shape[0]) + + fig, ax = plt.subplots(figsize=(10, 6)) + fig.subplots_adjust(bottom=0.33) + + # '#'-characters to prepend to the hex color codes + hashes = np.chararray(rows.shape[0]) + hashes[:] = '#' + + ax.bar(ind, counts, width, color=np.core.defchararray.add(hashes, rows[:,1]), log=counts.max() > 100) + + ax.set_xticks(ind + width / 2) + ax.set_xticklabels(rows[:,0], rotation=45, fontsize=8) + plt.title(transect_name) + plt.xlim([0, ind.size]) + pdf.savefig() + +d = pdf.infodict() +d['Title'] = "BIIGLE DIAS basic report for project " + project_name +d['Author'] = 'Biodata Mining Group, Bielefeld University' +d['Subject'] = 'Histograms of label distribution in all transects of the project' +d['Keywords'] = '' +d['CreationDate'] = datetime.datetime.today() +d['ModDate'] = datetime.datetime.today() +pdf.close() diff --git a/src/resources/views/emails/report.blade.php b/src/resources/views/emails/report.blade.php index 8775c05b5..2fd5cac61 100644 --- a/src/resources/views/emails/report.blade.php +++ b/src/resources/views/emails/report.blade.php @@ -5,7 +5,7 @@ BIGLE DIAS Report Notification -

+

@if ($user->firstname && $user->lastname) Dear {{$user->firstname}} {{$user->lastname}},

@else @@ -17,7 +17,7 @@ The report will be removed once you have downloaded it.

- Download report + Download report

diff --git a/tests/Jobs/ExportModuleJobsGenerateBasicReportJobTest.php b/tests/Jobs/ExportModuleJobsGenerateBasicReportJobTest.php deleted file mode 100644 index c0f4298bd..000000000 --- a/tests/Jobs/ExportModuleJobsGenerateBasicReportJobTest.php +++ /dev/null @@ -1,76 +0,0 @@ -transects()->attach($transect); - $user = UserTest::create(); - - $al = AnnotationLabelTest::create(); - $al->annotation->image->transect_id = $transect->id; - $al->annotation->image->save(); - - // check if the temporary file exists - File::shouldReceive('exists') - ->once() - ->andReturn(false); - - $mock = Mockery::mock(); - - $mock->shouldReceive('put') - ->once() - ->with([$transect->name]); - - $mock->shouldReceive('put') - ->once() - ->with([$al->label->id, $al->label->name, $al->label->color]); - - $mock->shouldReceive('close') - ->once(); - - $mock->shouldReceive('delete') - ->once(); - - App::singleton(CsvFile::class, function () use ($mock) { - return $mock; - }); - - $mock = Mockery::mock(); - - $mock->shouldReceive('generate') - ->once() - ->with(Mockery::type(Project::class), Mockery::type('array')); - - $mock->shouldReceive('basename') - ->once() - ->andReturn('abc123'); - - App::singleton(Basic::class, function () use ($mock) { - return $mock; - }); - - Mail::shouldReceive('send') - ->once() - ->withArgs([ - 'export::emails.report', - [ - 'user' => $user, - 'type' => 'basic', - 'project' => $project, - 'uuid' => 'abc123', - ], - Mockery::type('callable') - ]); - - - with(new GenerateBasicReport($project, $user))->handle(); - } -} diff --git a/tests/Jobs/ExportModuleJobsGenerateBasicReportTest.php b/tests/Jobs/ExportModuleJobsGenerateBasicReportTest.php new file mode 100644 index 000000000..cc4c1793f --- /dev/null +++ b/tests/Jobs/ExportModuleJobsGenerateBasicReportTest.php @@ -0,0 +1,176 @@ +transects()->attach($transect); + $user = UserTest::create(); + + $al = AnnotationLabelTest::create(); + $al->annotation->image->transect_id = $transect->id; + $al->annotation->image->save(); + AnnotationLabelTest::create([ + 'annotation_id' => $al->annotation_id, + 'label_id' => $al->label_id, + ]); + + $al2 = AnnotationLabelTest::create(['annotation_id' => $al->annotation_id]); + + // check if the temporary file exists + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->once() + ->with([$transect->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$al->label->name, $al->label->color, 2]); + + $mock->shouldReceive('put') + ->once() + ->with([$al2->label->name, $al2->label->color, 1]); + + $mock->shouldReceive('delete', 'close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('generate') + ->once() + ->with(Mockery::type(Project::class), Mockery::type('array')); + + $mock->shouldReceive('basename') + ->once() + ->andReturn('abc123'); + + App::singleton(Basic::class, function () use ($mock) { + return $mock; + }); + + Mail::shouldReceive('send') + ->once() + ->withArgs([ + 'export::emails.report', + [ + 'user' => $user, + 'type' => 'basic', + 'project' => $project, + 'uuid' => 'abc123', + 'filename' => "biigle_{$project->id}_basic_report.pdf", + ], + Mockery::type('callable') + ]); + + + with(new GenerateBasicReport($project, $user))->handle(); + } + + public function testHandleExceptionCsv() + { + $project = ProjectTest::create(); + $transect = TransectTest::create(); + $project->transects()->attach($transect); + $user = UserTest::create(); + + $al = AnnotationLabelTest::create(); + $al->annotation->image->transect_id = $transect->id; + $al->annotation->image->save(); + + // check if the temporary file exists + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->once() + ->andThrow('Exception'); + + $mock->shouldReceive('delete') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('generate') + ->never(); + + App::singleton(Basic::class, function () use ($mock) { + return $mock; + }); + + Mail::shouldReceive('send') + ->never(); + + with(new GenerateBasicReport($project, $user))->handle(); + } + + public function testHandleExceptionReport() + { + $project = ProjectTest::create(); + $transect = TransectTest::create(); + $project->transects()->attach($transect); + $user = UserTest::create(); + + $al = AnnotationLabelTest::create(); + $al->annotation->image->transect_id = $transect->id; + $al->annotation->image->save(); + + // check if the temporary file exists + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->twice(); + + $mock->shouldReceive('delete', 'close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('generate') + ->once() + ->andThrow('Exception'); + + $mock->shouldReceive('delete') + ->once(); + + App::singleton(Basic::class, function () use ($mock) { + return $mock; + }); + + Mail::shouldReceive('send') + ->never(); + + $this->setExpectedException('Exception'); + with(new GenerateBasicReport($project, $user))->handle(); + } +} From 7161367f412d3d57a0cff8392716438c48678ce3 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 30 Jun 2016 11:48:52 +0200 Subject: [PATCH 012/407] Make extended report functional --- src/Jobs/GenerateExtendedReport.php | 120 +++++++----- src/Support/Reports/Extended.php | 32 ++++ src/resources/scripts/extended_report.py | 50 +++-- ...rtModuleJobsGenerateExtendedReportTest.php | 176 ++++++++++++++++++ 4 files changed, 305 insertions(+), 73 deletions(-) create mode 100644 src/Support/Reports/Extended.php create mode 100644 tests/Jobs/ExportModuleJobsGenerateExtendedReportTest.php diff --git a/src/Jobs/GenerateExtendedReport.php b/src/Jobs/GenerateExtendedReport.php index 42eb988e1..1e8f71fad 100644 --- a/src/Jobs/GenerateExtendedReport.php +++ b/src/Jobs/GenerateExtendedReport.php @@ -2,62 +2,94 @@ namespace Dias\Modules\Export\Jobs; -use DB; use Mail; -use Dias\Jobs\Job; -use Dias\Project; -use Dias\User; -use Illuminate\Queue\SerializesModels; -use Illuminate\Queue\InteractsWithQueue; -use Illuminate\Contracts\Queue\ShouldQueue; - -class GenerateExtendedReport extends Job implements ShouldQueue -{ - use InteractsWithQueue, SerializesModels; - - /** - * The project for which the report should be generated. - * - * @var Project - */ - private $project; - private $user; +use DB; +use Dias\Modules\Export\Support\CsvFile; +use Dias\Modules\Export\Support\Reports\Extended; +class GenerateExtendedReport extends GenerateReportJob +{ /** - * Create a new job instance. - * - * @param Project $project The project for which the report should be generated. + * Execute the job. * * @return void */ - public function __construct(Project $project, User $user) + public function handle() { - $this->project = $project; - $this->user = $user; + $transects = $this->project->transects() + ->pluck('name', 'id'); + + $tmpFiles = []; + + try { + foreach ($transects as $id => $name) { + $csv = CsvFile::makeTmp(); + $tmpFiles[] = $csv; + + // put transect name to first line + $csv->put([$name]); + + $query = $this->query()->where('images.transect_id', $id); + + $query->chunk(500, function ($rows) use ($csv) { + foreach ($rows as $row) { + $csv->put([ + $row->filename, + $row->name, + $row->count, + ]); + } + }); + + $csv->close(); + } + + $report = app()->make(Extended::class); + $report->generate($this->project, $tmpFiles); + + Mail::send('export::emails.report', [ + 'user' => $this->user, + 'project' => $this->project, + 'type' => 'extended', + 'uuid' => $report->basename(), + 'filename' => "biigle_{$this->project->id}_extended_report.xlsx", + ], function ($mail) { + if ($this->user->firstname && $this->user->lastname) { + $name = "{$this->user->firstname} {$this->user->lastname}"; + } else { + $name = null; + } + + $mail->subject("BIIGLE extended report for project {$this->project->name}") + ->to($this->user->email, $name); + }); + } catch (\Exception $e) { + if (isset($report)) { + $report->delete(); + throw $e; + } + } finally { + array_walk($tmpFiles, function ($file) { + $file->delete(); + }); + } } /** - * Execute the job. + * Assemble a new DB query for a transect. * - * @return void + * @return \Illuminate\Database\Query\Builder */ - public function handle() + private function query() { - DB::reconnect(); - $transects = DB::select('SELECT transects.id, transects.name FROM transects, project_transect WHERE project_transect.project_id = '.$this->project->id.' AND transects.id = project_transect.transect_id'); - $cmd=$this->project->name." "; - $path = uniqid("/tmp/"); - mkdir($path); - chmod($path,0777); - foreach ($transects as $transect) { - DB::statement('copy (SELECT images.filename, labels.name FROM labels, annotations, annotation_labels, images WHERE annotation_labels.annotation_id = annotations.id AND annotations.image_id = images.id AND labels.id = annotation_labels.label_id AND images.transect_id = '.$transect->id.') to \''.$path."/".$transect->name.'.csv\' csv'); - $cmd.=$path."/".$transect->name.'.csv '; - } - $ret = system('/usr/bin/python '.__DIR__.'/../Scripts/extendedreport.py '.$cmd); - $uuid2path = explode(";",$ret); - DB::insert('insert into files (id, path) values (?, ?)', $uuid2path); - Mail::send('export::reportmail', ["uuid"=>$uuid2path[0],"ending"=>".xlsx","name"=>$this->user['attributes']['firstname']." ".$this->user['attributes']['lastname']], function($message){ - $message->to($this->user['attributes']['email'], $this->user['attributes']['firstname']." ".$this->user['attributes']['lastname'])->subject('BiigleDiasReport'); - }); + return DB::table('labels') + ->join('annotation_labels', 'annotation_labels.label_id', '=', 'labels.id') + ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') + ->join('images', 'annotations.image_id', '=', 'images.id') + ->select(DB::raw('images.filename, labels.name, count(labels.id) as count')) + ->groupBy('labels.id', 'images.id') + // order by is essential for chunking! + ->orderBy('images.id') + ->orderBy('labels.id'); } } diff --git a/src/Support/Reports/Extended.php b/src/Support/Reports/Extended.php new file mode 100644 index 000000000..9b4dc23c2 --- /dev/null +++ b/src/Support/Reports/Extended.php @@ -0,0 +1,32 @@ +path; + }, $csvs)); + + system("{$python} {$script} \"{$project->name}\" {$this->path} {$csvs}", $code); + + if ($code !== 0) { + \Log::debug("{$python} {$script} \"{$project->name}\" {$this->path} {$csvs}"); + throw new \Exception("Extended report generation failed with exit code {$code}."); + } + } +} diff --git a/src/resources/scripts/extended_report.py b/src/resources/scripts/extended_report.py index b197153b1..1bcc79eb6 100755 --- a/src/resources/scripts/extended_report.py +++ b/src/resources/scripts/extended_report.py @@ -1,40 +1,32 @@ import sys -import collections import numpy as np -from pyexcelerate import Workbook, Color, Style, Fill -import uuid - -prjName = sys.argv[1] -transects = sys.argv[2:] -prefix = "/home/vagrant/dias/storage/" +from pyexcelerate import Workbook, Style, Font +import csv +project_name = sys.argv[1] +target_file = sys.argv[2] +transect_csvs = sys.argv[3:] workbook = Workbook() numSheets = 0 -for transect in transects: - f = open(transect, 'r') - res = np.array(map(lambda x: x.split(","), f.read().split("\n")[:-1])) + +for path in transect_csvs: + f = open(path, 'r') + transect_csv = csv.reader(f) + rows = np.array(list(transect_csv)) f.close() - if not res.size: + # transect name is the first row + if rows.shape[0] == 1: continue numSheets += 1 - uniqueclasses = np.unique(res[:, 1]) - uniqueimages = np.unique(res[:, 0]) - class2column = dict(zip(uniqueclasses, range(len(uniqueclasses)))) - data = np.zeros((len(uniqueimages) + 1, len(uniqueclasses) + 1), np.int).tolist() - for cl in class2column: - data[0][1 + class2column[cl]] = cl - for rowidx, img in enumerate(uniqueimages): - data[rowidx + 1][0] = img - c = collections.Counter(res[res[:, 0] == img][:, 1]) - for entry in c: - data[rowidx + 1][class2column[entry] + 1] = int(c[entry]) - ws = workbook.new_sheet(transect.split("/")[-1][:-4], data=data) - ws.set_cell_value(1, 1, "") - ws.set_row_style(1, Style(fill=Fill(background=Color(200, 200, 200, 0)))) - ws.set_col_style(1, Style(fill=Fill(background=Color(200, 200, 200, 0)))) + # rows have the content: image_filename, label_name, label_count + + # Excel does not permit worksheet names longer than 31 characters + ws = workbook.new_sheet("transect " + str(numSheets), data=rows) + # first row is transect name + ws.set_row_style(1, Style(font=Font(bold=True))) + if not numSheets: ws = workbook.new_sheet("No labels found") -uid = str(uuid.uuid4()) -workbook.save(prefix + "/" + uid + ".xlsx") -print uid + ";" + prefix + "/" + uid + ".xlsx" + +workbook.save(target_file) diff --git a/tests/Jobs/ExportModuleJobsGenerateExtendedReportTest.php b/tests/Jobs/ExportModuleJobsGenerateExtendedReportTest.php new file mode 100644 index 000000000..274d81c33 --- /dev/null +++ b/tests/Jobs/ExportModuleJobsGenerateExtendedReportTest.php @@ -0,0 +1,176 @@ +transects()->attach($transect); + $user = UserTest::create(); + + $al = AnnotationLabelTest::create(); + $al->annotation->image->transect_id = $transect->id; + $al->annotation->image->save(); + AnnotationLabelTest::create([ + 'annotation_id' => $al->annotation_id, + 'label_id' => $al->label_id, + ]); + + $al2 = AnnotationLabelTest::create(['annotation_id' => $al->annotation_id]); + + // check if the temporary file exists + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->once() + ->with([$transect->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$al->annotation->image->filename, $al->label->name, 2]); + + $mock->shouldReceive('put') + ->once() + ->with([$al->annotation->image->filename, $al2->label->name, 1]); + + $mock->shouldReceive('delete', 'close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('generate') + ->once() + ->with(Mockery::type(Project::class), Mockery::type('array')); + + $mock->shouldReceive('basename') + ->once() + ->andReturn('abc123'); + + App::singleton(Extended::class, function () use ($mock) { + return $mock; + }); + + Mail::shouldReceive('send') + ->once() + ->withArgs([ + 'export::emails.report', + [ + 'user' => $user, + 'type' => 'extended', + 'project' => $project, + 'uuid' => 'abc123', + 'filename' => "biigle_{$project->id}_extended_report.xlsx", + ], + Mockery::type('callable') + ]); + + + with(new GenerateExtendedReport($project, $user))->handle(); + } + + public function testHandleExceptionCsv() + { + $project = ProjectTest::create(); + $transect = TransectTest::create(); + $project->transects()->attach($transect); + $user = UserTest::create(); + + $al = AnnotationLabelTest::create(); + $al->annotation->image->transect_id = $transect->id; + $al->annotation->image->save(); + + // check if the temporary file exists + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->once() + ->andThrow('Exception'); + + $mock->shouldReceive('delete') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('generate') + ->never(); + + App::singleton(Extended::class, function () use ($mock) { + return $mock; + }); + + Mail::shouldReceive('send') + ->never(); + + with(new GenerateExtendedReport($project, $user))->handle(); + } + + public function testHandleExceptionReport() + { + $project = ProjectTest::create(); + $transect = TransectTest::create(); + $project->transects()->attach($transect); + $user = UserTest::create(); + + $al = AnnotationLabelTest::create(); + $al->annotation->image->transect_id = $transect->id; + $al->annotation->image->save(); + + // check if the temporary file exists + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->twice(); + + $mock->shouldReceive('delete', 'close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('generate') + ->once() + ->andThrow('Exception'); + + $mock->shouldReceive('delete') + ->once(); + + App::singleton(Extended::class, function () use ($mock) { + return $mock; + }); + + Mail::shouldReceive('send') + ->never(); + + $this->setExpectedException('Exception'); + with(new GenerateExtendedReport($project, $user))->handle(); + } +} From f8f2c02b88b96839624b8de60113435ce4d17f08 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 30 Jun 2016 15:06:28 +0200 Subject: [PATCH 013/407] Make full report functional --- src/Jobs/GenerateFullReport.php | 131 ++++++++----- src/Support/Reports/Basic.php | 3 +- src/Support/Reports/Extended.php | 4 +- src/Support/Reports/Full.php | 32 ++++ src/resources/scripts/full_report.py | 60 +++--- ...ExportModuleJobsGenerateFullReportTest.php | 172 ++++++++++++++++++ 6 files changed, 327 insertions(+), 75 deletions(-) create mode 100644 src/Support/Reports/Full.php create mode 100644 tests/Jobs/ExportModuleJobsGenerateFullReportTest.php diff --git a/src/Jobs/GenerateFullReport.php b/src/Jobs/GenerateFullReport.php index 255a89979..7c0e1285c 100644 --- a/src/Jobs/GenerateFullReport.php +++ b/src/Jobs/GenerateFullReport.php @@ -2,62 +2,103 @@ namespace Dias\Modules\Export\Jobs; -use DB; use Mail; -use Dias\Jobs\Job; -use Dias\Project; -use Dias\User; -use Illuminate\Queue\SerializesModels; -use Illuminate\Queue\InteractsWithQueue; -use Illuminate\Contracts\Queue\ShouldQueue; - -class GenerateFullReport extends Job implements ShouldQueue -{ - use InteractsWithQueue, SerializesModels; - - /** - * The project for which the report should be generated. - * - * @var Project - */ - private $project; - private $user; +use DB; +use Dias\Modules\Export\Support\CsvFile; +use Dias\Modules\Export\Support\Reports\Full; +class GenerateFullReport extends GenerateReportJob +{ /** - * Create a new job instance. - * - * @param Project $project The project for which the report should be generated. + * Execute the job. * * @return void */ - public function __construct(Project $project, User $user) + public function handle() { - $this->project = $project; - $this->user = $user; + $transects = $this->project->transects() + ->pluck('name', 'id'); + + $tmpFiles = []; + + try { + foreach ($transects as $id => $name) { + $csv = CsvFile::makeTmp(); + $tmpFiles[] = $csv; + + // put transect name to first line + $csv->put([$name]); + + $query = $this->query()->where('images.transect_id', $id); + + $query->chunk(500, function ($rows) use ($csv) { + foreach ($rows as $row) { + $csv->put([ + $row->filename, + $row->annotation_id, + $row->label_name, + $row->shape_name, + $row->points, + ]); + } + }); + + $csv->close(); + } + + $report = app()->make(Full::class); + $report->generate($this->project, $tmpFiles); + + Mail::send('export::emails.report', [ + 'user' => $this->user, + 'project' => $this->project, + 'type' => 'full', + 'uuid' => $report->basename(), + 'filename' => "biigle_{$this->project->id}_full_report.xlsx", + ], function ($mail) { + if ($this->user->firstname && $this->user->lastname) { + $name = "{$this->user->firstname} {$this->user->lastname}"; + } else { + $name = null; + } + + $mail->subject("BIIGLE full report for project {$this->project->name}") + ->to($this->user->email, $name); + }); + } catch (\Exception $e) { + if (isset($report)) { + $report->delete(); + throw $e; + } + } finally { + array_walk($tmpFiles, function ($file) { + $file->delete(); + }); + } } /** - * Execute the job. + * Assemble a new DB query for a transect. * - * @return void + * @return \Illuminate\Database\Query\Builder */ - public function handle() + private function query() { - DB::reconnect(); - $transects = DB::select('SELECT transects.id, transects.name FROM transects, project_transect WHERE project_transect.project_id = '.$this->project->id.' AND transects.id = project_transect.transect_id'); - $cmd=$this->project->name." "; - $path = uniqid("/tmp/"); - mkdir($path); - chmod($path,0777); - foreach ($transects as $transect) { - DB::statement('copy (SELECT labels.name, images.filename, annotations.id, annotations.shape_id, annotation_labels.label_id, shapes.name, annotations.points, annotation_labels.user_id FROM labels, annotations, images, annotation_labels, shapes WHERE images.transect_id = '.$transect->id.' AND annotations.image_id = images.id AND shapes.id = annotations.shape_id AND annotation_labels.annotation_id = annotations.id AND labels.id=annotation_labels.label_id and annotation_labels.annotation_id = annotations.id) to \''.$path."/".$transect->name.'.csv\' csv'); - $cmd.=$path."/".$transect->name.'.csv '; - } - $ret = system('/usr/bin/python '.__DIR__.'/../Scripts/fullreport.py '.$cmd); - $uuid2path = explode(";",$ret); - DB::insert('insert into files (id, path) values (?, ?)', $uuid2path); - Mail::send('export::reportmail', ["uuid"=>$uuid2path[0],"ending"=>".xlsx","name"=>$this->user['attributes']['firstname']." ".$this->user['attributes']['lastname']], function($message){ - $message->to($this->user['attributes']['email'], $this->user['attributes']['firstname']." ".$this->user['attributes']['lastname'])->subject('BiigleDiasReport'); - }); + return DB::table('labels') + ->join('annotation_labels', 'annotation_labels.label_id', '=', 'labels.id') + ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') + ->join('images', 'annotations.image_id', '=', 'images.id') + ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') + ->select( + 'images.filename', + 'annotations.id as annotation_id', + 'labels.name as label_name', + 'shapes.name as shape_name', + 'annotations.points' + ) + // order by is essential for chunking! + ->orderBy('annotations.id') + ->orderBy('labels.id') + ->orderBy('annotation_labels.user_id'); } -} \ No newline at end of file +} diff --git a/src/Support/Reports/Basic.php b/src/Support/Reports/Basic.php index f6d9590c9..2f3de31f7 100644 --- a/src/Support/Reports/Basic.php +++ b/src/Support/Reports/Basic.php @@ -22,7 +22,8 @@ public function generate(Project $project, array $csvs) return $csv->path; }, $csvs)); - system("{$python} {$script} \"{$project->name}\" {$this->path} {$csvs}", $code); + $dump = []; + exec("{$python} {$script} \"{$project->name}\" {$this->path} {$csvs}", $dump, $code); if ($code !== 0) { throw new \Exception("Basic report generation failed with exit code {$code}."); diff --git a/src/Support/Reports/Extended.php b/src/Support/Reports/Extended.php index 9b4dc23c2..6e26a56b6 100644 --- a/src/Support/Reports/Extended.php +++ b/src/Support/Reports/Extended.php @@ -22,10 +22,10 @@ public function generate(Project $project, array $csvs) return $csv->path; }, $csvs)); - system("{$python} {$script} \"{$project->name}\" {$this->path} {$csvs}", $code); + $dump = []; + exec("{$python} {$script} \"{$project->name}\" {$this->path} {$csvs}", $dump, $code); if ($code !== 0) { - \Log::debug("{$python} {$script} \"{$project->name}\" {$this->path} {$csvs}"); throw new \Exception("Extended report generation failed with exit code {$code}."); } } diff --git a/src/Support/Reports/Full.php b/src/Support/Reports/Full.php new file mode 100644 index 000000000..349af8f58 --- /dev/null +++ b/src/Support/Reports/Full.php @@ -0,0 +1,32 @@ +path; + }, $csvs)); + + $dump = []; + exec("{$python} {$script} \"{$project->name}\" {$this->path} {$csvs}", $dump, $code); + + if ($code !== 0) { + throw new \Exception("Full report generation failed with exit code {$code}."); + } + } +} diff --git a/src/resources/scripts/full_report.py b/src/resources/scripts/full_report.py index db7a04066..8efd8be77 100755 --- a/src/resources/scripts/full_report.py +++ b/src/resources/scripts/full_report.py @@ -1,39 +1,44 @@ import sys import numpy as np -from pyexcelerate import Workbook, Color, Style, Fill +from pyexcelerate import Workbook, Style, Font import csv import ast -import uuid -prjName = sys.argv[1] -transects = sys.argv[2:] -prefix = "/home/vagrant/dias/storage/" +project_name = sys.argv[1] +target_file = sys.argv[2] +transect_csvs = sys.argv[3:] +workbook = Workbook() +numSheets = 0 def addRow(x="", y="", label="", filename="", annotation_id="", shape=""): - return[filename, annotation_id, shape, x, y, label] - -workbook = Workbook() + return [filename, annotation_id, shape, x, y, label] -for transect in transects: - f = open(transect, 'r') - res = np.array(list(csv.reader(f))) +for path in transect_csvs: + f = open(path, 'r') + transect_csv = csv.reader(f) + transect_name = transect_csv.next()[0] + rows = np.array(list(transect_csv)) f.close() - if res.size == 0: - workbook.new_sheet(transect.split("/")[-1][:-4]) + if rows.shape[0] == 0: continue - celldata = [] - celldata.append(addRow("x/radius", "y", "label", "filename", "annotation_id", "shape")) - uniqueimages = np.unique(res[:, 1]) + numSheets += 1 + # rows have the content: image_filename, annotation_id, label_name, shape_name, points + celldata = [[transect_name]] + celldata.append(addRow("x/radius", "y", "labels", "filename", "annotation_id", "shape")) + + uniqueimages = np.unique(rows[:, 0]) + for img in uniqueimages: - curImgData = res[res[:, 1] == img] - uniqueannotations = np.unique(curImgData[:, 2]) + curImgData = rows[rows[:, 0] == img] + uniqueannotations = np.unique(curImgData[:, 1]) + for annotation in uniqueannotations: - curAnnotationData = curImgData[curImgData[:, 2] == annotation] - labels = ",".join(curAnnotationData[:, 0]) - points = ast.literal_eval(curAnnotationData[:, 6][0]) + curAnnotationData = curImgData[curImgData[:, 1] == annotation] + labels = ", ".join(curAnnotationData[:, 2]) + points = ast.literal_eval(curAnnotationData[:, 4][0]) it = iter(points) - celldata.append(addRow(it.next(), it.next(), labels, img, annotation, curAnnotationData[0, 5])) + celldata.append(addRow(it.next(), it.next(), labels, img, annotation, curAnnotationData[0, 3])) try: for x in it: celldata.append(addRow(x, next(it))) @@ -42,8 +47,9 @@ def addRow(x="", y="", label="", filename="", annotation_id="", shape=""): if len(points) % 2 == 1: # add radius celldata.append(addRow(points[-1], "")) - ws = workbook.new_sheet(transect.split("/")[-1][:-4], data=celldata) - ws.set_row_style(1, Style(fill=Fill(background=Color(200, 200, 200, 0)))) -uid = str(uuid.uuid4()) -workbook.save(prefix + "/" + uid + ".xlsx") -print uid + ";" + prefix + "/" + uid + ".xlsx" + + ws = workbook.new_sheet("transect " + str(numSheets), data=celldata) + ws.set_row_style(1, Style(font=Font(bold=True))) + ws.set_row_style(2, Style(font=Font(bold=True))) + +workbook.save(target_file) diff --git a/tests/Jobs/ExportModuleJobsGenerateFullReportTest.php b/tests/Jobs/ExportModuleJobsGenerateFullReportTest.php new file mode 100644 index 000000000..14ee01110 --- /dev/null +++ b/tests/Jobs/ExportModuleJobsGenerateFullReportTest.php @@ -0,0 +1,172 @@ +transects()->attach($transect); + $user = UserTest::create(); + + $al = AnnotationLabelTest::create(); + $al->annotation->image->transect_id = $transect->id; + $al->annotation->image->save(); + + // check if the temporary file exists + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->once() + ->with([$transect->name]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $al->annotation->image->filename, + $al->annotation_id, + $al->label->name, + $al->annotation->shape->name, + json_encode($al->annotation->points), + ]); + + $mock->shouldReceive('delete', 'close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('generate') + ->once() + ->with(Mockery::type(Project::class), Mockery::type('array')); + + $mock->shouldReceive('basename') + ->once() + ->andReturn('abc123'); + + App::singleton(Full::class, function () use ($mock) { + return $mock; + }); + + Mail::shouldReceive('send') + ->once() + ->withArgs([ + 'export::emails.report', + [ + 'user' => $user, + 'type' => 'full', + 'project' => $project, + 'uuid' => 'abc123', + 'filename' => "biigle_{$project->id}_full_report.xlsx", + ], + Mockery::type('callable') + ]); + + + with(new GenerateFullReport($project, $user))->handle(); + } + + public function testHandleExceptionCsv() + { + $project = ProjectTest::create(); + $transect = TransectTest::create(); + $project->transects()->attach($transect); + $user = UserTest::create(); + + $al = AnnotationLabelTest::create(); + $al->annotation->image->transect_id = $transect->id; + $al->annotation->image->save(); + + // check if the temporary file exists + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->once() + ->andThrow('Exception'); + + $mock->shouldReceive('delete') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('generate') + ->never(); + + App::singleton(Full::class, function () use ($mock) { + return $mock; + }); + + Mail::shouldReceive('send') + ->never(); + + with(new GenerateFullReport($project, $user))->handle(); + } + + public function testHandleExceptionReport() + { + $project = ProjectTest::create(); + $transect = TransectTest::create(); + $project->transects()->attach($transect); + $user = UserTest::create(); + + $al = AnnotationLabelTest::create(); + $al->annotation->image->transect_id = $transect->id; + $al->annotation->image->save(); + + // check if the temporary file exists + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->twice(); + + $mock->shouldReceive('delete', 'close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('generate') + ->once() + ->andThrow('Exception'); + + $mock->shouldReceive('delete') + ->once(); + + App::singleton(Full::class, function () use ($mock) { + return $mock; + }); + + Mail::shouldReceive('send') + ->never(); + + $this->setExpectedException('Exception'); + with(new GenerateFullReport($project, $user))->handle(); + } +} From 32ab0ee5880d5fe2ab8f1dfe7701b37f21660b49 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 30 Jun 2016 15:53:14 +0200 Subject: [PATCH 014/407] Polish the UI --- README.md | 1 + composer.json | 1 + gulpfile.js | 4 +- src/Console/Commands/Config.php | 36 ----------- src/ExportServiceProvider.php | 8 +-- src/public/assets/scripts/main.js | 59 ------------------- src/public/assets/scripts/projects.js | 1 + .../assets/js/controllers/exportController.js | 41 ------------- src/resources/assets/js/main.js | 15 ----- .../projects/controllers/ExportController.js | 42 +++++++++++++ .../assets/js/projects/factories/Report.js | 27 +++++++++ src/resources/views/projectsScripts.blade.php | 1 - src/resources/views/projectsShow.blade.php | 43 ++++++++++---- .../views/projectsShowScripts.blade.php | 1 + 14 files changed, 106 insertions(+), 174 deletions(-) delete mode 100644 src/Console/Commands/Config.php delete mode 100644 src/public/assets/scripts/main.js create mode 100644 src/public/assets/scripts/projects.js delete mode 100644 src/resources/assets/js/controllers/exportController.js delete mode 100644 src/resources/assets/js/main.js create mode 100644 src/resources/assets/js/projects/controllers/ExportController.js create mode 100644 src/resources/assets/js/projects/factories/Report.js delete mode 100644 src/resources/views/projectsScripts.blade.php create mode 100644 src/resources/views/projectsShowScripts.blade.php diff --git a/README.md b/README.md index 4b71348cf..fd1a94bd0 100644 --- a/README.md +++ b/README.md @@ -15,3 +15,4 @@ Add the following to the repositories array of your `composer.json`: 3. Run `php artisan export:publish` to refresh the public assets of this package. Do this for every update of the package. 4. Run `pip install -r vendor/dias/export/requirements.txt` to install python requirements. 5. Create a `storage/reports` directory that is read/writable for the web application. The location can be configured via the `export.exports_storage` key. +6. Make sure the `export.tmp_storage` directory is read/writable for the web application (default is `/tmp`). diff --git a/composer.json b/composer.json index 21ae9cb5c..9dd219bbd 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,7 @@ { "name": "dias/export", "require": { + "dias/projects": "^0.4.1" }, "require-dev": { }, diff --git a/gulpfile.js b/gulpfile.js index 94643cc14..f7240fd2c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -8,8 +8,8 @@ var shell = require('gulp-shell'); elixir(function (mix) { process.chdir('src'); - mix.sass('main.scss', 'public/assets/styles/main.css'); - mix.angular('resources/assets/js/', 'public/assets/scripts', 'main.js'); + // mix.sass('main.scss', 'public/assets/styles/main.css'); + mix.angular('resources/assets/js/projects/', 'public/assets/scripts', 'projects.js'); mix.task('publish', 'public/assets/**/*'); }); diff --git a/src/Console/Commands/Config.php b/src/Console/Commands/Config.php deleted file mode 100644 index 75fd2bbce..000000000 --- a/src/Console/Commands/Config.php +++ /dev/null @@ -1,36 +0,0 @@ -call('vendor:publish', [ - '--provider' => ServiceProvider::class, - '--tag' => ['config'], - ]); - } -} diff --git a/src/ExportServiceProvider.php b/src/ExportServiceProvider.php index 6c62deeb5..f96142dc4 100644 --- a/src/ExportServiceProvider.php +++ b/src/ExportServiceProvider.php @@ -36,7 +36,7 @@ public function boot(Modules $modules,Router $router) ], 'config'); $modules->addMixin('export', 'projectsShow'); - $modules->addMixin('export', 'projectsScripts'); + $modules->addMixin('export', 'projectsShowScripts'); } /** @@ -52,13 +52,8 @@ public function register() return new \Dias\Modules\Export\Console\Commands\Publish(); }); - $this->app->singleton('command.export.config', function ($app) { - return new \Dias\Modules\Export\Console\Commands\Config(); - }); - $this->commands([ 'command.export.publish', - 'command.export.config', ]); } @@ -71,7 +66,6 @@ public function provides() { return [ 'command.export.publish', - 'command.export.config', ]; } } diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js deleted file mode 100644 index 30bf01ba6..000000000 --- a/src/public/assets/scripts/main.js +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @namespace dias.transects - * @description The DIAS transects module. - */ -angular.module('dias.export', ['dias.api', 'dias.ui']); - -/* - * Disable debug info in production for better performance. - * see: https://code.angularjs.org/1.4.7/docs/guide/production - */ -angular.module('dias.export').config(["$compileProvider", function ($compileProvider) { - "use strict"; - - $compileProvider.debugInfoEnabled(false); -}]); - -/** - * @namespace dias.transects - * @ngdoc controller - * @name FilterController - * @memberOf dias.transects - * @description Controller for the filter feature of the transects page - */ -angular.module('dias.projects').controller('exportController', ["$scope", "$http", "URL", "msg", function ($scope,$http,URL,msg) { - "use strict"; - $scope.basic=function(projectid){ - msg.success("The report will be prepared. You will get notified by email when it is ready."); - $http({ - method: 'GET', - url: URL+"/api/v1/projects/"+projectid+"/reports/basic" - }).then(function successCallback(response) { - }, function errorCallback(response) { - msg.danger("An error occured. If you keep getting this error please contact the administrator."); - }); - }; - $scope.extended=function(projectid){ - msg.success("The report will be prepared. You will get notified by email when it is ready."); - $http({ - method: 'GET', - url: URL+"/api/v1/projects/"+projectid+"/reports/extended" - }).then(function successCallback(response) { - }, function errorCallback(response) { - msg.danger("An error occured. If you keep getting this error please contact the administrator."); - }); - }; - $scope.full=function(projectid){ - msg.success("The report will be prepared. You will get notified by email when it is ready."); - $http({ - method: 'GET', - url: URL+"/api/v1/projects/"+projectid+"/reports/full" - }).then(function successCallback(response) { - }, function errorCallback(response) { - msg.danger("An error occured. If you keep getting this error please contact the administrator."); - }); - }; - }] -); - -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uanMiLCJjb250cm9sbGVycy9leHBvcnRDb250cm9sbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0FBSUEsUUFBQSxPQUFBLGVBQUEsQ0FBQSxZQUFBOzs7Ozs7QUFNQSxRQUFBLE9BQUEsZUFBQSw0QkFBQSxVQUFBLGtCQUFBO0lBQ0E7O0lBRUEsaUJBQUEsaUJBQUE7Ozs7Ozs7Ozs7QUNOQSxRQUFBLE9BQUEsaUJBQUEsV0FBQSxzREFBQSxVQUFBLE9BQUEsTUFBQSxJQUFBLEtBQUE7UUFDQTtRQUNBLE9BQUEsTUFBQSxTQUFBLFVBQUE7WUFDQSxJQUFBLFFBQUE7WUFDQSxNQUFBO2dCQUNBLFFBQUE7Z0JBQ0EsS0FBQSxJQUFBLG9CQUFBLFVBQUE7ZUFDQSxLQUFBLFNBQUEsZ0JBQUEsVUFBQTtlQUNBLFNBQUEsY0FBQSxVQUFBO29CQUNBLElBQUEsT0FBQTs7O1FBR0EsT0FBQSxTQUFBLFNBQUEsVUFBQTtZQUNBLElBQUEsUUFBQTtZQUNBLE1BQUE7Z0JBQ0EsUUFBQTtnQkFDQSxLQUFBLElBQUEsb0JBQUEsVUFBQTtlQUNBLEtBQUEsU0FBQSxnQkFBQSxVQUFBO2VBQ0EsU0FBQSxjQUFBLFVBQUE7b0JBQ0EsSUFBQSxPQUFBOzs7UUFHQSxPQUFBLEtBQUEsU0FBQSxVQUFBO3VCQUNBLElBQUEsUUFBQTtZQUNBLE1BQUE7Z0JBQ0EsUUFBQTtnQkFDQSxLQUFBLElBQUEsb0JBQUEsVUFBQTtlQUNBLEtBQUEsU0FBQSxnQkFBQSxVQUFBO2VBQ0EsU0FBQSxjQUFBLFVBQUE7b0JBQ0EsSUFBQSxPQUFBOzs7OztBQUtBIiwiZmlsZSI6Im1haW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBuYW1lc3BhY2UgZGlhcy50cmFuc2VjdHNcbiAqIEBkZXNjcmlwdGlvbiBUaGUgRElBUyB0cmFuc2VjdHMgbW9kdWxlLlxuICovXG5hbmd1bGFyLm1vZHVsZSgnZGlhcy5leHBvcnQnLCBbJ2RpYXMuYXBpJywgJ2RpYXMudWknXSk7XG5cbi8qXG4gKiBEaXNhYmxlIGRlYnVnIGluZm8gaW4gcHJvZHVjdGlvbiBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLlxuICogc2VlOiBodHRwczovL2NvZGUuYW5ndWxhcmpzLm9yZy8xLjQuNy9kb2NzL2d1aWRlL3Byb2R1Y3Rpb25cbiAqL1xuYW5ndWxhci5tb2R1bGUoJ2RpYXMuZXhwb3J0JykuY29uZmlnKGZ1bmN0aW9uICgkY29tcGlsZVByb3ZpZGVyKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAkY29tcGlsZVByb3ZpZGVyLmRlYnVnSW5mb0VuYWJsZWQoZmFsc2UpO1xufSk7XG4iLCIvKipcbiAqIEBuYW1lc3BhY2UgZGlhcy50cmFuc2VjdHNcbiAqIEBuZ2RvYyBjb250cm9sbGVyXG4gKiBAbmFtZSBGaWx0ZXJDb250cm9sbGVyXG4gKiBAbWVtYmVyT2YgZGlhcy50cmFuc2VjdHNcbiAqIEBkZXNjcmlwdGlvbiBDb250cm9sbGVyIGZvciB0aGUgZmlsdGVyIGZlYXR1cmUgb2YgdGhlIHRyYW5zZWN0cyBwYWdlXG4gKi9cbmFuZ3VsYXIubW9kdWxlKCdkaWFzLnByb2plY3RzJykuY29udHJvbGxlcignZXhwb3J0Q29udHJvbGxlcicsIGZ1bmN0aW9uICgkc2NvcGUsJGh0dHAsVVJMLG1zZykge1xuICAgICAgICBcInVzZSBzdHJpY3RcIjtcbiAgICAgICAgJHNjb3BlLmJhc2ljPWZ1bmN0aW9uKHByb2plY3RpZCl7XG4gICAgICAgICAgICBtc2cuc3VjY2VzcyhcIlRoZSByZXBvcnQgd2lsbCBiZSBwcmVwYXJlZC4gWW91IHdpbGwgZ2V0IG5vdGlmaWVkIGJ5IGVtYWlsIHdoZW4gaXQgaXMgcmVhZHkuXCIpO1xuICAgICAgICAgICAgJGh0dHAoe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgICAgdXJsOiBVUkwrXCIvYXBpL3YxL3Byb2plY3RzL1wiK3Byb2plY3RpZCtcIi9yZXBvcnRzL2Jhc2ljXCJcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiBlcnJvckNhbGxiYWNrKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1zZy5kYW5nZXIoXCJBbiBlcnJvciBvY2N1cmVkLiBJZiB5b3Uga2VlcCBnZXR0aW5nIHRoaXMgZXJyb3IgcGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuXCIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgICRzY29wZS5leHRlbmRlZD1mdW5jdGlvbihwcm9qZWN0aWQpe1xuICAgICAgICAgICAgbXNnLnN1Y2Nlc3MoXCJUaGUgcmVwb3J0IHdpbGwgYmUgcHJlcGFyZWQuIFlvdSB3aWxsIGdldCBub3RpZmllZCBieSBlbWFpbCB3aGVuIGl0IGlzIHJlYWR5LlwiKTtcbiAgICAgICAgICAgICRodHRwKHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICAgIHVybDogVVJMK1wiL2FwaS92MS9wcm9qZWN0cy9cIitwcm9qZWN0aWQrXCIvcmVwb3J0cy9leHRlbmRlZFwiXG4gICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIHN1Y2Nlc3NDYWxsYmFjayhyZXNwb25zZSkge1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gZXJyb3JDYWxsYmFjayhyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBtc2cuZGFuZ2VyKFwiQW4gZXJyb3Igb2NjdXJlZC4gSWYgeW91IGtlZXAgZ2V0dGluZyB0aGlzIGVycm9yIHBsZWFzZSBjb250YWN0IHRoZSBhZG1pbmlzdHJhdG9yLlwiKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICAkc2NvcGUuZnVsbD1mdW5jdGlvbihwcm9qZWN0aWQpe1xuICAgICAgICAgICAgICAgICAgICAgICBtc2cuc3VjY2VzcyhcIlRoZSByZXBvcnQgd2lsbCBiZSBwcmVwYXJlZC4gWW91IHdpbGwgZ2V0IG5vdGlmaWVkIGJ5IGVtYWlsIHdoZW4gaXQgaXMgcmVhZHkuXCIpO1xuICAgICAgICAgICAgJGh0dHAoe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgICAgdXJsOiBVUkwrXCIvYXBpL3YxL3Byb2plY3RzL1wiK3Byb2plY3RpZCtcIi9yZXBvcnRzL2Z1bGxcIlxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2socmVzcG9uc2UpIHtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIGVycm9yQ2FsbGJhY2socmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgbXNnLmRhbmdlcihcIkFuIGVycm9yIG9jY3VyZWQuIElmIHlvdSBrZWVwIGdldHRpbmcgdGhpcyBlcnJvciBwbGVhc2UgY29udGFjdCB0aGUgYWRtaW5pc3RyYXRvci5cIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICB9XG4pO1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9 diff --git a/src/public/assets/scripts/projects.js b/src/public/assets/scripts/projects.js new file mode 100644 index 000000000..9e1e29ac4 --- /dev/null +++ b/src/public/assets/scripts/projects.js @@ -0,0 +1 @@ +angular.module("dias.projects").controller("ExportController",["$scope","Report","msg","PROJECT",function(e,t,r,s){"use strict";var o=!1,c={basic:t.getBasic,extended:t.getExtended,full:t.getFull},n=function(){o=!0},p=function(e){o=!1,r.responseError(e)};e.selected={type:"basic"},e.requestReport=function(){e.selected.type&&c[e.selected.type]({project_id:s.id},n,p)},e.isRequested=function(){return o}}]),angular.module("dias.projects").factory("Report",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/projects/:project_id/reports/:type",{},{getBasic:{params:{type:"basic"}},getExtended:{params:{type:"extended"}},getFull:{params:{type:"full"}}})}]); \ No newline at end of file diff --git a/src/resources/assets/js/controllers/exportController.js b/src/resources/assets/js/controllers/exportController.js deleted file mode 100644 index 8f84c4eca..000000000 --- a/src/resources/assets/js/controllers/exportController.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @namespace dias.transects - * @ngdoc controller - * @name FilterController - * @memberOf dias.transects - * @description Controller for the filter feature of the transects page - */ -angular.module('dias.projects').controller('exportController', function ($scope,$http,URL,msg) { - "use strict"; - $scope.basic=function(projectid){ - msg.success("The report will be prepared. You will get notified by email when it is ready."); - $http({ - method: 'GET', - url: URL+"/api/v1/projects/"+projectid+"/reports/basic" - }).then(function successCallback(response) { - }, function errorCallback(response) { - msg.danger("An error occured. If you keep getting this error please contact the administrator."); - }); - }; - $scope.extended=function(projectid){ - msg.success("The report will be prepared. You will get notified by email when it is ready."); - $http({ - method: 'GET', - url: URL+"/api/v1/projects/"+projectid+"/reports/extended" - }).then(function successCallback(response) { - }, function errorCallback(response) { - msg.danger("An error occured. If you keep getting this error please contact the administrator."); - }); - }; - $scope.full=function(projectid){ - msg.success("The report will be prepared. You will get notified by email when it is ready."); - $http({ - method: 'GET', - url: URL+"/api/v1/projects/"+projectid+"/reports/full" - }).then(function successCallback(response) { - }, function errorCallback(response) { - msg.danger("An error occured. If you keep getting this error please contact the administrator."); - }); - }; - } -); diff --git a/src/resources/assets/js/main.js b/src/resources/assets/js/main.js deleted file mode 100644 index c6ba17582..000000000 --- a/src/resources/assets/js/main.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * @namespace dias.transects - * @description The DIAS transects module. - */ -angular.module('dias.export', ['dias.api', 'dias.ui']); - -/* - * Disable debug info in production for better performance. - * see: https://code.angularjs.org/1.4.7/docs/guide/production - */ -angular.module('dias.export').config(function ($compileProvider) { - "use strict"; - - $compileProvider.debugInfoEnabled(false); -}); diff --git a/src/resources/assets/js/projects/controllers/ExportController.js b/src/resources/assets/js/projects/controllers/ExportController.js new file mode 100644 index 000000000..dc0a4c9a9 --- /dev/null +++ b/src/resources/assets/js/projects/controllers/ExportController.js @@ -0,0 +1,42 @@ +/** + * @namespace dias.projects + * @ngdoc controller + * @name ExportController + * @memberOf dias.projects + * @description Controller for the export feature of the projects page + */ +angular.module('dias.projects').controller('ExportController', function ($scope, Report, msg, PROJECT) { + "use strict"; + + var requested = false; + + var types = { + basic: Report.getBasic, + extended: Report.getExtended, + full: Report.getFull, + }; + + var handleSuccess = function () { + requested = true; + }; + + var handleError = function (response) { + requested = false; + msg.responseError(response); + }; + + $scope.selected = { + type: 'basic' + }; + + $scope.requestReport = function () { + if (!$scope.selected.type) return; + + types[$scope.selected.type]({project_id: PROJECT.id}, handleSuccess, handleError); + }; + + $scope.isRequested = function () { + return requested; + }; + } +); diff --git a/src/resources/assets/js/projects/factories/Report.js b/src/resources/assets/js/projects/factories/Report.js new file mode 100644 index 000000000..6b96aee56 --- /dev/null +++ b/src/resources/assets/js/projects/factories/Report.js @@ -0,0 +1,27 @@ +/** + * @ngdoc factory + * @name Report + * @memberOf dias.projects + * @description Provides the resource for requesting project reports + * @requires $resource + * @returns {Object} A new [ngResource](https://docs.angularjs.org/api/ngResource/service/$resource) object + * @example +// request a basic report +Report.getBasic({project_id: 1}); + +// request a extended report +Report.getExtended({project_id: 1}); + +// request a full report +Report.getFull({project_id: 1}); + + */ +angular.module('dias.projects').factory('Report', function ($resource, URL) { + "use strict"; + + return $resource(URL + '/api/v1/projects/:project_id/reports/:type', {}, { + getBasic: {params: {type: 'basic'}}, + getExtended: {params: {type: 'extended'}}, + getFull: {params: {type: 'full'}} + }); +}); diff --git a/src/resources/views/projectsScripts.blade.php b/src/resources/views/projectsScripts.blade.php deleted file mode 100644 index f89eb51e0..000000000 --- a/src/resources/views/projectsScripts.blade.php +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/resources/views/projectsShow.blade.php b/src/resources/views/projectsShow.blade.php index c79953f8f..2441c5bbb 100644 --- a/src/resources/views/projectsShow.blade.php +++ b/src/resources/views/projectsShow.blade.php @@ -1,16 +1,33 @@ -
+
- Export Data + Reports +
+
+
+ The report will be prepared for you. You will get notified by email when it is ready. +
+
+
+ +
+
+ +
+
+
+ The basic report contains graphical plots of abundancies of the different annotation labels for each transect of this project (as PDF). +
+
+ The extended report lists the abundancies of annotation labels for each image in all transects of this project (as XLSX). +
+
+ The full report lists the labels, shape and coordinates of all annotations in all transects of this project (as XLSX). +
+
+
-
    -
  • - -
  • -
  • - -
  • -
  • - -
  • -
diff --git a/src/resources/views/projectsShowScripts.blade.php b/src/resources/views/projectsShowScripts.blade.php new file mode 100644 index 000000000..c07c3c588 --- /dev/null +++ b/src/resources/views/projectsShowScripts.blade.php @@ -0,0 +1 @@ + From 9b83bd1f98be1cea9f8c1a3409118396b57e920c Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 30 Jun 2016 15:56:38 +0200 Subject: [PATCH 015/407] Fix typo --- src/Http/routes.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/routes.php b/src/Http/routes.php index 46ad71cff..2b6750416 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -16,7 +16,7 @@ ]); }); -// this route should be public public (is protected by random uids) +// this route should be public (is protected by random uids) $router->get('api/v1/reports/{uid}/{filename}', [ 'uses' => 'Api\ReportsController@show', ]); From 4c3234816ae48001de9182004bff309bb3d962ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Langenk=C3=A4mper?= Date: Thu, 14 Jul 2016 11:23:43 +0200 Subject: [PATCH 016/407] closes #5 --- src/resources/views/projectsShow.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/resources/views/projectsShow.blade.php b/src/resources/views/projectsShow.blade.php index 2441c5bbb..0fc388355 100644 --- a/src/resources/views/projectsShow.blade.php +++ b/src/resources/views/projectsShow.blade.php @@ -19,10 +19,10 @@
- The basic report contains graphical plots of abundancies of the different annotation labels for each transect of this project (as PDF). + The basic report contains graphical plots of abundances of the different annotation labels for each transect of this project (as PDF).
- The extended report lists the abundancies of annotation labels for each image in all transects of this project (as XLSX). + The extended report lists the abundances of annotation labels for each image in all transects of this project (as XLSX).
The full report lists the labels, shape and coordinates of all annotations in all transects of this project (as XLSX). From 790672a4adc76de8903990886c7746a51357bccf Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 26 Jul 2016 15:51:41 +0200 Subject: [PATCH 017/407] WIP implement displaying and editing of the export area References #4 --- gulpfile.js | 3 +- src/ExportServiceProvider.php | 2 + .../Api/TransectExportAreaController.php | 86 ++++++++ src/Http/routes.php | 16 ++ src/Transect.php | 85 ++++++++ src/public/assets/scripts/annotations.js | 1 + .../ExportAreaSettingsController.js | 37 ++++ .../js/annotations/factories/ExportArea.js | 25 +++ .../js/annotations/services/exportArea.js | 190 ++++++++++++++++++ .../views/annotationsScripts.blade.php | 4 + .../views/annotationsSettings.blade.php | 14 ++ tests/ExportModuleTransectTest.php | 64 ++++++ ...ersApiTransectExportAreaControllerTest.php | 73 +++++++ 13 files changed, 599 insertions(+), 1 deletion(-) create mode 100644 src/Http/Controllers/Api/TransectExportAreaController.php create mode 100644 src/Transect.php create mode 100644 src/public/assets/scripts/annotations.js create mode 100644 src/resources/assets/js/annotations/controllers/ExportAreaSettingsController.js create mode 100644 src/resources/assets/js/annotations/factories/ExportArea.js create mode 100644 src/resources/assets/js/annotations/services/exportArea.js create mode 100644 src/resources/views/annotationsScripts.blade.php create mode 100644 src/resources/views/annotationsSettings.blade.php create mode 100644 tests/ExportModuleTransectTest.php create mode 100644 tests/Http/Controllers/Api/ExportModuleHttpControllersApiTransectExportAreaControllerTest.php diff --git a/gulpfile.js b/gulpfile.js index f7240fd2c..d4f786bd0 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -10,9 +10,10 @@ elixir(function (mix) { process.chdir('src'); // mix.sass('main.scss', 'public/assets/styles/main.css'); mix.angular('resources/assets/js/projects/', 'public/assets/scripts', 'projects.js'); + mix.angular('resources/assets/js/annotations/', 'public/assets/scripts', 'annotations.js'); mix.task('publish', 'public/assets/**/*'); }); gulp.task('publish', function () { - gulp.src('').pipe(shell('php ../../../../artisan vendor:publish --provider="Dias\\Modules\\Export\\ExportServiceProvider" --force')); + gulp.src('').pipe(shell('php ../../../../artisan vendor:publish --provider="Dias\\Modules\\Export\\ExportServiceProvider" --tag public --force')); }); diff --git a/src/ExportServiceProvider.php b/src/ExportServiceProvider.php index f96142dc4..eeda64493 100644 --- a/src/ExportServiceProvider.php +++ b/src/ExportServiceProvider.php @@ -37,6 +37,8 @@ public function boot(Modules $modules,Router $router) $modules->addMixin('export', 'projectsShow'); $modules->addMixin('export', 'projectsShowScripts'); + $modules->addMixin('export', 'annotationsSettings'); + $modules->addMixin('export', 'annotationsScripts'); } /** diff --git a/src/Http/Controllers/Api/TransectExportAreaController.php b/src/Http/Controllers/Api/TransectExportAreaController.php new file mode 100644 index 000000000..283bb6cda --- /dev/null +++ b/src/Http/Controllers/Api/TransectExportAreaController.php @@ -0,0 +1,86 @@ +authorize('access', $transect); + + return Transect::convert($transect)->exportArea; + } + + /** + * Set the export area + * + * @api {post} transects/:id/export-area Set the export area + * @apiGroup Transects + * @apiName StoreTransectsExportArea + * @apiPermission admin + * + * @apiParam (Required attributes) {Number[]} coordinates Coordinates of the export area formatted as `[x1, y1, x2, y2]` array of integers + * + * @param int $id Transect ID + * @return \Illuminate\Http\Response + */ + public function store($id) + { + $transect = BaseTransect::findOrFail($id); + $this->authorize('update', $transect); + $this->validate($this->request, Transect::$storeRules); + + $transect = Transect::convert($transect); + + try { + $transect->exportArea = $this->request->input('coordinates'); + $transect->save(); + } catch (Exception $e) { + return $this->buildFailedValidationResponse($this->request, [ + 'coordinates' => $e->getMessage(), + ]); + } + } + + /** + * Remove the export area + * + * @api {delete} transects/:id/export-area Remove the export area + * @apiGroup Transects + * @apiName DestroyTransectsExportArea + * @apiPermission admin + * + * @param int $id Transect ID + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $transect = BaseTransect::findOrFail($id); + $this->authorize('update', $transect); + $transect = Transect::convert($transect); + $transect->exportArea = null; + $transect->save(); + } +} diff --git a/src/Http/routes.php b/src/Http/routes.php index 2b6750416..c63a50233 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -5,18 +5,34 @@ 'prefix' => 'api/v1', 'middleware' => 'auth.api', ], function ($router) { + $router->get('projects/{id}/reports/basic', [ 'uses' => 'ReportsController@basic', ]); + $router->get('projects/{id}/reports/extended', [ 'uses' => 'ReportsController@extended', ]); + $router->get('projects/{id}/reports/full', [ 'uses' => 'ReportsController@full', ]); + + $router->get('transects/{id}/export-area', [ + 'uses' => 'TransectExportAreaController@show', + ]); + + $router->post('transects/{id}/export-area', [ + 'uses' => 'TransectExportAreaController@store', + ]); + + $router->delete('transects/{id}/export-area', [ + 'uses' => 'TransectExportAreaController@destroy', + ]); }); // this route should be public (is protected by random uids) $router->get('api/v1/reports/{uid}/{filename}', [ 'uses' => 'Api\ReportsController@show', ]); + diff --git a/src/Transect.php b/src/Transect.php new file mode 100644 index 000000000..ff76f0fb6 --- /dev/null +++ b/src/Transect.php @@ -0,0 +1,85 @@ + 'required|array', + ]; + + /** + * Converts a regular Dias transect to an export transect + * + * @param BaseTransect $transect Regular Dias transect instance + * + * @return Transect + */ + public static function convert(BaseTransect $transect) + { + $instance = new static; + $instance->setRawAttributes($transect->attributes); + $instance->exists = $transect->exists; + return $instance->setRelations($transect->relations); + } + + /** + * Return the dynamic attribute for the export area + * + * @return array + */ + public function getExportAreaAttribute() + { + return array_get($this->attrs, self::EXPORT_AREA_ATTRIBUTE); + } + + /** + * Set or update the dynamic attribute for the export area + * + * @param array $value The value to set + */ + public function setExportAreaAttribute($value) + { + if (!is_array($value) && !is_null($value)) { + throw new Exception("Export area coordinates must be an array!"); + } + + $attrs = $this->attrs; + + if ($value === null) { + unset($attrs[self::EXPORT_AREA_ATTRIBUTE]); + } else { + if (sizeof($value) !== 4) { + throw new Exception("Malformed export area coordinates!"); + } + + foreach ($value as $coordinate) { + if (!is_int($coordinate)) { + throw new Exception("Malformed export area coordinates!"); + } + } + + $attrs[self::EXPORT_AREA_ATTRIBUTE] = $value; + } + + $this->attrs = $attrs; + } +} diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js new file mode 100644 index 000000000..57b2c7106 --- /dev/null +++ b/src/public/assets/scripts/annotations.js @@ -0,0 +1 @@ +angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea",function(e,t){"use strict";e.setDefaultSettings("export_area_opacity","1"),e.edit=function(){e.isShown()||(e.settings.export_area_opacity="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e.settings.export_area_opacity},e["delete"]=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch("settings.export_area_opacity",t.setOpacity)}]),angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA",function(e,t,o,n,i){"use strict";var r,a,s=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],l=!1,c=new ol.Collection,u=new ol.source.Vector({features:c}),d=new ol.layer.Vector({source:u,style:s,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(d);var g=new ol.interaction.Draw({source:u,type:"Rectangle",style:s,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var o=t;return o?o.setCoordinates([e]):o=new ol.geom.Rectangle([e]),o}});g.on("drawend",function(e){h(),a=e.feature,p()});var y=new ol.interaction.Modify({features:c,style:s,deleteCondition:ol.events.condition.never}),h=function(){void 0!==a&&(u.removeFeature(a),a=void 0)},f=function(){h(),o["delete"]({transect_id:n})},p=function(){a&&(coordinates=m(a.getGeometry().getCoordinates()),o.save({transect_id:n},{coordinates:coordinates},function(){i=coordinates}))};y.on("modifyend",p);var w=function(e){return[[e[0],r-e[1]],[e[0],r-e[3]],[e[2],r-e[3]],[e[2],r-e[1]]]},m=function(e){return e=e[0],e=[e[0][0],r-e[0][1],e[2][0],r-e[2][1]],e.map(Math.round)},v=function(){if(i&&4===i.length){var e=new ol.geom.Rectangle([w(i)]);a?a.setGeometry(e):(a=new ol.Feature({geometry:e}),u.addFeature(a))}};this.updateHeight=function(e,t){r!==t.height&&(r=t.height,v())},this.toggleEdit=function(){l?(e.removeInteraction(g),e.removeInteraction(y)):(e.addInteraction(g),e.addInteraction(y)),l=!l},this.isEditing=function(){return l},this.setOpacity=function(e){d.setOpacity(e)},this.deleteArea=f,this.hasArea=function(){return!!a}}]); \ No newline at end of file diff --git a/src/resources/assets/js/annotations/controllers/ExportAreaSettingsController.js b/src/resources/assets/js/annotations/controllers/ExportAreaSettingsController.js new file mode 100644 index 000000000..33ae0e778 --- /dev/null +++ b/src/resources/assets/js/annotations/controllers/ExportAreaSettingsController.js @@ -0,0 +1,37 @@ +/** + * @namespace dias.annotations + * @ngdoc controller + * @name ExportAreaSettingsController + * @memberOf dias.annotations + * @description Controller for ATE example patches settings + */ +angular.module('dias.annotations').controller('ExportAreaSettingsController', function ($scope, exportArea) { + "use strict"; + + $scope.setDefaultSettings('export_area_opacity', '1'); + + $scope.edit = function () { + if (!$scope.isShown()) { + $scope.settings.export_area_opacity = '1'; + } + + exportArea.toggleEdit(); + }; + + $scope.isEditing = exportArea.isEditing; + + $scope.isShown = function () { + return $scope.settings.export_area_opacity !== '0'; + }; + + $scope.delete = function () { + if (exportArea.hasArea() && confirm('Do you really want to delete the export area?')) { + exportArea.deleteArea(); + } + }; + + $scope.$on('image.shown', exportArea.updateHeight); + + $scope.$watch('settings.export_area_opacity', exportArea.setOpacity); + } +); diff --git a/src/resources/assets/js/annotations/factories/ExportArea.js b/src/resources/assets/js/annotations/factories/ExportArea.js new file mode 100644 index 000000000..65ec09196 --- /dev/null +++ b/src/resources/assets/js/annotations/factories/ExportArea.js @@ -0,0 +1,25 @@ +/** + * @ngdoc factory + * @name ExportArea + * @memberOf dias.annotations + * @description Provides the resource for the export area of a transect + * @requires $resource + * @returns {Object} A new [ngResource](https://docs.angularjs.org/api/ngResource/service/$resource) object + * @example +// get the export area +var area = ExportArea.query({transect_id: 1}, function () { + console.log(area); // [10, 20, 30, 40] +}); + +// set the area +ExportArea.save({transect_id: 1}, {coordinates: [10, 20, 30, 40]}); + +// delete the area +ExportArea.delete({transect_id: 1}); + * + */ +angular.module('dias.annotations').factory('ExportArea', function ($resource, URL) { + "use strict"; + + return $resource(URL + '/api/v1/transects/:transect_id/export-area'); +}); diff --git a/src/resources/assets/js/annotations/services/exportArea.js b/src/resources/assets/js/annotations/services/exportArea.js new file mode 100644 index 000000000..e70f9afc9 --- /dev/null +++ b/src/resources/assets/js/annotations/services/exportArea.js @@ -0,0 +1,190 @@ +/** + * @namespace dias.annotations + * @ngdoc service + * @name exportArea + * @memberOf dias.annotations + * @description Manages the export area drawn on the map + */ +angular.module('dias.annotations').service('exportArea', function (map, styles, ExportArea, TRANSECT_ID, EXPORT_AREA) { + "use strict"; + + // a circle with a red and white stroke + var style = [ + new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: styles.colors.white, + width: 4 + }), + image: new ol.style.Circle({ + radius: 6, + fill: new ol.style.Fill({ + color: '#666666' + }), + stroke: new ol.style.Stroke({ + color: styles.colors.white, + width: 2, + lineDash: [2] + }) + }) + }), + new ol.style.Style({ + stroke: new ol.style.Stroke({ + color: '#666666', + width: 1, + lineDash: [2] + }) + }) + ]; + var height; + var area; + + var editing = false; + + var collection = new ol.Collection(); + var source = new ol.source.Vector({ + features: collection + }); + var layer = new ol.layer.Vector({ + source: source, + style: style, + zIndex: 4, + updateWhileAnimating: true, + updateWhileInteracting: true + }); + map.addLayer(layer); + + var draw = new ol.interaction.Draw({ + source: source, + type: 'Rectangle', + style: style, + minPoints: 2, + maxPoints: 2, + geometryFunction: function (coordinates, opt_geometry) { + coordinates = coordinates[0]; + if (coordinates.length > 1) { + coordinates = [ + coordinates[0], + [coordinates[0][0], coordinates[1][1]], + coordinates[1], + [coordinates[1][0], coordinates[0][1]] + ]; + } + var geometry = opt_geometry; + if (geometry) { + geometry.setCoordinates([coordinates]); + } else { + geometry = new ol.geom.Rectangle([coordinates]); + } + return geometry; + } + }); + + draw.on('drawend', function (e) { + removeAreaFeature(); + area = e.feature; + saveArea(); + }); + + var modify = new ol.interaction.Modify({ + features: collection, + style: style, + deleteCondition: ol.events.condition.never + }); + + var removeAreaFeature = function () { + if (area !== undefined) { + source.removeFeature(area); + area = undefined; + } + }; + + var deleteArea = function () { + removeAreaFeature(); + ExportArea.delete({transect_id: TRANSECT_ID}); + }; + + var saveArea = function () { + if (area) { + coordinates = fromOlCoordinates(area.getGeometry().getCoordinates()); + ExportArea.save({transect_id: TRANSECT_ID}, { + coordinates: coordinates + }, function () { + EXPORT_AREA = coordinates; + }); + } + // ------------------ + // TODO HANDLE ERRORS + // ------------------ + }; + modify.on('modifyend', saveArea); + + var toOlCoordinates = function (cooridnates) { + return [ + // swap y coordinates for OpenLayers + [cooridnates[0], height - cooridnates[1]], + [cooridnates[0], height - cooridnates[3]], + [cooridnates[2], height - cooridnates[3]], + [cooridnates[2], height - cooridnates[1]], + ]; + }; + + var fromOlCoordinates = function (coordinates) { + coordinates = coordinates[0]; + coordinates = [ + coordinates[0][0], height - coordinates[0][1], + coordinates[2][0], height - coordinates[2][1], + ]; + + return coordinates.map(Math.round); + }; + + var update = function () { + if (!EXPORT_AREA || EXPORT_AREA.length !== 4) { + return; + } + + var geometry = new ol.geom.Rectangle([ + toOlCoordinates(EXPORT_AREA) + ]); + if (!area) { + area = new ol.Feature({geometry: geometry}); + source.addFeature(area); + } else { + area.setGeometry(geometry); + } + }; + + this.updateHeight = function (e, image) { + if (height !== image.height) { + height = image.height; + update(); + } + }; + + this.toggleEdit = function () { + if (!editing) { + map.addInteraction(draw); + map.addInteraction(modify); + } else { + map.removeInteraction(draw); + map.removeInteraction(modify); + } + + editing = !editing; + }; + + this.isEditing = function () { + return editing; + }; + + this.setOpacity = function (o) { + layer.setOpacity(o); + }; + + this.deleteArea = deleteArea; + + this.hasArea = function () { + return !!area; + }; + } +); diff --git a/src/resources/views/annotationsScripts.blade.php b/src/resources/views/annotationsScripts.blade.php new file mode 100644 index 000000000..ebc11709d --- /dev/null +++ b/src/resources/views/annotationsScripts.blade.php @@ -0,0 +1,4 @@ + + diff --git a/src/resources/views/annotationsSettings.blade.php b/src/resources/views/annotationsSettings.blade.php new file mode 100644 index 000000000..8faff708c --- /dev/null +++ b/src/resources/views/annotationsSettings.blade.php @@ -0,0 +1,14 @@ +
+

+ @can('update', $transect) + + + + + @endcan + Export area +

+ + + +
diff --git a/tests/ExportModuleTransectTest.php b/tests/ExportModuleTransectTest.php new file mode 100644 index 000000000..e4c0059e6 --- /dev/null +++ b/tests/ExportModuleTransectTest.php @@ -0,0 +1,64 @@ + [Transect::EXPORT_AREA_ATTRIBUTE => [1, 2, 3, 4]] + ]); + $exportTransect = Transect::convert($transect); + $this->assertEquals($transect->id, $exportTransect->id); + $this->assertTrue($exportTransect instanceof Transect); + $this->assertEquals(3, $exportTransect->exportArea[2]); + } + + public function testExportArea() + { + $transect = static::create(); + $transect->exportArea = [10, 20, 30, 40]; + $transect->save(); + + $expect = [10, 20, 30, 40]; + $this->assertEquals($expect, $transect->fresh()->exportArea); + + $transect->exportArea = null; + $transect->save(); + $this->assertNull($transect->fresh()->exportArea); + } + + public function testExportAreaNotThere() + { + $transect = static::create(['attrs' => ['something' => 'else']]); + // no error is thrown + $this->assertNull($transect->exportArea); + } + + public function testExportAreaTooShort() + { + $transect = static::create(); + $this->setExpectedException('Exception'); + $transect->exportArea = [10]; + } + + public function testExportInvalidType() + { + $transect = static::create(); + $this->setExpectedException('Exception'); + $transect->exportArea = 'abc'; + } + + public function testExportAreaNoInteger() + { + $transect = static::create(); + $this->setExpectedException('Exception'); + $transect->exportArea = ['10', 20, 30, 40]; + } +} diff --git a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiTransectExportAreaControllerTest.php b/tests/Http/Controllers/Api/ExportModuleHttpControllersApiTransectExportAreaControllerTest.php new file mode 100644 index 000000000..e0115a42a --- /dev/null +++ b/tests/Http/Controllers/Api/ExportModuleHttpControllersApiTransectExportAreaControllerTest.php @@ -0,0 +1,73 @@ +transect()); + $transect->exportArea = [10, 20, 30, 40]; + $transect->save(); + + $this->doTestApiRoute('GET', "/api/v1/transects/{$transect->id}/export-area"); + + $this->beUser(); + $this->get("/api/v1/transects/{$transect->id}/export-area"); + $this->assertResponseStatus(403); + + $this->beGuest(); + $this->get("/api/v1/transects/{$transect->id}/export-area"); + $this->assertResponseOk(); + $this->seeJsonEquals([10, 20, 30, 40]); + } + + public function testStore() + { + $transect = Transect::convert($this->transect()); + + $this->doTestApiRoute('POST', "/api/v1/transects/{$transect->id}/export-area"); + + $this->beEditor(); + $this->post("/api/v1/transects/{$transect->id}/export-area", [ + 'coordinates' => [10, 20, 30, 40], + ]); + $this->assertResponseStatus(403); + + $this->beAdmin(); + $this->json('POST', "/api/v1/transects/{$transect->id}/export-area", [ + 'coordinates' => [10, 20], + ]); + $this->assertResponseStatus(422); + + $this->json('POST', "/api/v1/transects/{$transect->id}/export-area", [ + 'coordinates' => [10, 20, 30, '40'], + ]); + $this->assertResponseStatus(422); + + $this->post("/api/v1/transects/{$transect->id}/export-area", [ + 'coordinates' => [10, 20, 30, 40], + ]); + $this->assertResponseOk(); + $this->assertEquals([10, 20, 30, 40], $transect->fresh()->exportArea); + } + + public function testDestroy() + { + $transect = Transect::convert($this->transect()); + $transect->exportArea = [10, 20, 30, 40]; + $transect->save(); + + $this->doTestApiRoute('DELETE', "/api/v1/transects/{$transect->id}/export-area"); + + $this->beEditor(); + $this->delete("/api/v1/transects/{$transect->id}/export-area"); + $this->assertResponseStatus(403); + + $this->beAdmin(); + $this->assertNotNull($transect->fresh()->exportArea); + $this->delete("/api/v1/transects/{$transect->id}/export-area"); + $this->assertResponseOk(); + $this->assertNull($transect->fresh()->exportArea); + } +} From 55ab668f1a97f6f76629e206023db1a698aa8867 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 27 Jul 2016 09:40:33 +0200 Subject: [PATCH 018/407] Implement error handling for editing and deleting the export area References #4 --- src/public/assets/scripts/annotations.js | 2 +- src/public/assets/scripts/projects.js | 2 +- .../js/annotations/services/exportArea.js | 58 +++++++++++-------- 3 files changed, 37 insertions(+), 25 deletions(-) diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index 57b2c7106..7a5b57b1c 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1 @@ -angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea",function(e,t){"use strict";e.setDefaultSettings("export_area_opacity","1"),e.edit=function(){e.isShown()||(e.settings.export_area_opacity="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e.settings.export_area_opacity},e["delete"]=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch("settings.export_area_opacity",t.setOpacity)}]),angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA",function(e,t,o,n,i){"use strict";var r,a,s=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],l=!1,c=new ol.Collection,u=new ol.source.Vector({features:c}),d=new ol.layer.Vector({source:u,style:s,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(d);var g=new ol.interaction.Draw({source:u,type:"Rectangle",style:s,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var o=t;return o?o.setCoordinates([e]):o=new ol.geom.Rectangle([e]),o}});g.on("drawend",function(e){h(),a=e.feature,p()});var y=new ol.interaction.Modify({features:c,style:s,deleteCondition:ol.events.condition.never}),h=function(){void 0!==a&&(u.removeFeature(a),a=void 0)},f=function(){h(),o["delete"]({transect_id:n})},p=function(){a&&(coordinates=m(a.getGeometry().getCoordinates()),o.save({transect_id:n},{coordinates:coordinates},function(){i=coordinates}))};y.on("modifyend",p);var w=function(e){return[[e[0],r-e[1]],[e[0],r-e[3]],[e[2],r-e[3]],[e[2],r-e[1]]]},m=function(e){return e=e[0],e=[e[0][0],r-e[0][1],e[2][0],r-e[2][1]],e.map(Math.round)},v=function(){if(i&&4===i.length){var e=new ol.geom.Rectangle([w(i)]);a?a.setGeometry(e):(a=new ol.Feature({geometry:e}),u.addFeature(a))}};this.updateHeight=function(e,t){r!==t.height&&(r=t.height,v())},this.toggleEdit=function(){l?(e.removeInteraction(g),e.removeInteraction(y)):(e.addInteraction(g),e.addInteraction(y)),l=!l},this.isEditing=function(){return l},this.setOpacity=function(e){d.setOpacity(e)},this.deleteArea=f,this.hasArea=function(){return!!a}}]); \ No newline at end of file +angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea",function(e,t){"use strict";e.setDefaultSettings("export_area_opacity","1"),e.edit=function(){e.isShown()||(e.settings.export_area_opacity="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e.settings.export_area_opacity},e["delete"]=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch("settings.export_area_opacity",t.setOpacity)}]),angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,c=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],l=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:c,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:c,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),p(e.feature).then(function(){s=e.feature})["catch"](function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:c,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n["delete"]({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},p=function(e){var t=m(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&p(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},m=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){l?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),l=!l},this.isEditing=function(){return l},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]); \ No newline at end of file diff --git a/src/public/assets/scripts/projects.js b/src/public/assets/scripts/projects.js index 9e1e29ac4..8a5826888 100644 --- a/src/public/assets/scripts/projects.js +++ b/src/public/assets/scripts/projects.js @@ -1 +1 @@ -angular.module("dias.projects").controller("ExportController",["$scope","Report","msg","PROJECT",function(e,t,r,s){"use strict";var o=!1,c={basic:t.getBasic,extended:t.getExtended,full:t.getFull},n=function(){o=!0},p=function(e){o=!1,r.responseError(e)};e.selected={type:"basic"},e.requestReport=function(){e.selected.type&&c[e.selected.type]({project_id:s.id},n,p)},e.isRequested=function(){return o}}]),angular.module("dias.projects").factory("Report",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/projects/:project_id/reports/:type",{},{getBasic:{params:{type:"basic"}},getExtended:{params:{type:"extended"}},getFull:{params:{type:"full"}}})}]); \ No newline at end of file +angular.module("dias.projects").factory("Report",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/projects/:project_id/reports/:type",{},{getBasic:{params:{type:"basic"}},getExtended:{params:{type:"extended"}},getFull:{params:{type:"full"}}})}]),angular.module("dias.projects").controller("ExportController",["$scope","Report","msg","PROJECT",function(e,t,r,s){"use strict";var o=!1,c={basic:t.getBasic,extended:t.getExtended,full:t.getFull},n=function(){o=!0},p=function(e){o=!1,r.responseError(e)};e.selected={type:"basic"},e.requestReport=function(){e.selected.type&&c[e.selected.type]({project_id:s.id},n,p)},e.isRequested=function(){return o}}]); \ No newline at end of file diff --git a/src/resources/assets/js/annotations/services/exportArea.js b/src/resources/assets/js/annotations/services/exportArea.js index e70f9afc9..7d6232f31 100644 --- a/src/resources/assets/js/annotations/services/exportArea.js +++ b/src/resources/assets/js/annotations/services/exportArea.js @@ -5,7 +5,7 @@ * @memberOf dias.annotations * @description Manages the export area drawn on the map */ -angular.module('dias.annotations').service('exportArea', function (map, styles, ExportArea, TRANSECT_ID, EXPORT_AREA) { +angular.module('dias.annotations').service('exportArea', function (map, styles, ExportArea, TRANSECT_ID, EXPORT_AREA, msg) { "use strict"; // a circle with a red and white stroke @@ -80,9 +80,18 @@ angular.module('dias.annotations').service('exportArea', function (map, styles, }); draw.on('drawend', function (e) { - removeAreaFeature(); - area = e.feature; - saveArea(); + if (area) { + source.removeFeature(area); + } + + saveArea(e.feature).then(function () { + area = e.feature; + }).catch(function () { + source.removeFeature(e.feature); + if (area) { + source.addFeature(area); + } + }); }); var modify = new ol.interaction.Modify({ @@ -91,32 +100,35 @@ angular.module('dias.annotations').service('exportArea', function (map, styles, deleteCondition: ol.events.condition.never }); - var removeAreaFeature = function () { - if (area !== undefined) { - source.removeFeature(area); - area = undefined; + var deleteArea = function () { + if (!area) { + return; } + + source.removeFeature(area); + ExportArea.delete({transect_id: TRANSECT_ID}, function () { + area = undefined; + }, function (response) { + source.addFeature(area); + msg.responseError(response); + }); }; - var deleteArea = function () { - removeAreaFeature(); - ExportArea.delete({transect_id: TRANSECT_ID}); + var saveArea = function (feature) { + var coordinates = fromOlCoordinates(feature.getGeometry().getCoordinates()); + + return ExportArea.save({transect_id: TRANSECT_ID}, { + coordinates: coordinates + }, function () { + EXPORT_AREA = coordinates; + }, msg.responseError).$promise; }; - var saveArea = function () { + modify.on('modifyend', function () { if (area) { - coordinates = fromOlCoordinates(area.getGeometry().getCoordinates()); - ExportArea.save({transect_id: TRANSECT_ID}, { - coordinates: coordinates - }, function () { - EXPORT_AREA = coordinates; - }); + saveArea(area); } - // ------------------ - // TODO HANDLE ERRORS - // ------------------ - }; - modify.on('modifyend', saveArea); + }); var toOlCoordinates = function (cooridnates) { return [ From 01c10f75f4ee4b1e8b485055f2bec044790befe1 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 27 Jul 2016 17:21:06 +0200 Subject: [PATCH 019/407] Implement the export area restriction for the reports This does not work until laravel/framework#14499 is resolved! References #4 --- .../Controllers/Api/ReportsController.php | 30 ++++- .../Api/TransectExportAreaController.php | 8 +- src/Jobs/GenerateBasicReport.php | 28 ++--- src/Jobs/GenerateExtendedReport.php | 42 +++---- src/Jobs/GenerateFullReport.php | 37 +++--- src/Jobs/GenerateReportJob.php | 115 +++++++++++++++++- src/public/assets/scripts/projects.js | 2 +- .../projects/controllers/ExportController.js | 9 +- src/resources/views/emails/report.blade.php | 5 + src/resources/views/projectsShow.blade.php | 10 +- ...xportModuleJobsGenerateBasicReportTest.php | 115 +++++++++++++++++- ...rtModuleJobsGenerateExtendedReportTest.php | 102 +++++++++++++++- ...ExportModuleJobsGenerateFullReportTest.php | 102 +++++++++++++++- 13 files changed, 514 insertions(+), 91 deletions(-) diff --git a/src/Http/Controllers/Api/ReportsController.php b/src/Http/Controllers/Api/ReportsController.php index f736e5500..f66e5e44a 100644 --- a/src/Http/Controllers/Api/ReportsController.php +++ b/src/Http/Controllers/Api/ReportsController.php @@ -2,12 +2,12 @@ namespace Dias\Modules\Export\Http\Controllers\Api; -use Dias\Http\Controllers\Api\Controller; use Dias\Project; +use Dias\Http\Controllers\Api\Controller; +use Dias\Modules\Export\Support\Reports\Report; +use Dias\Modules\Export\Jobs\GenerateFullReport; use Dias\Modules\Export\Jobs\GenerateBasicReport; use Dias\Modules\Export\Jobs\GenerateExtendedReport; -use Dias\Modules\Export\Jobs\GenerateFullReport; -use Dias\Modules\Export\Support\Reports\Report; class ReportsController extends Controller { @@ -17,6 +17,7 @@ class ReportsController extends Controller * @api {get} projects/:id/reports/basic Generate a new report * @apiGroup Projects * @apiName GenerateBasicProjectReport + * @apiParam (Optional arguments) {Boolean} restrict If `1`, restrict the report to the export area defined for the individual transects. * @apiPermission projectMember * * @apiParam {Number} id The project ID. @@ -28,7 +29,12 @@ public function basic($id) { $project = Project::findOrFail($id); $this->authorize('access', $project); - $this->dispatch(new GenerateBasicReport($project, $this->user)); + $this->validate($this->request, ['restrict' => 'boolean']); + $this->dispatch(new GenerateBasicReport( + $project, + $this->user, + (bool) $this->request->input('restrict', false) + )); } /** @@ -37,6 +43,7 @@ public function basic($id) * @api {get} projects/:id/reports/extended Generate a new report * @apiGroup Projects * @apiName GenerateExtendedProjectReport + * @apiParam (Optional arguments) {Boolean} restrict If `1`, restrict the report to the export area defined for the individual transects. * @apiPermission projectMember * * @apiParam {Number} id The project ID. @@ -48,7 +55,12 @@ public function extended($id) { $project = Project::findOrFail($id); $this->authorize('access', $project); - $this->dispatch(new GenerateExtendedReport($project, $this->user)); + $this->validate($this->request, ['restrict' => 'boolean']); + $this->dispatch(new GenerateExtendedReport( + $project, + $this->user, + (bool) $this->request->input('restrict', false) + )); } /** * Generate a full report @@ -56,6 +68,7 @@ public function extended($id) * @api {get} projects/:id/reports/full Generate a new report * @apiGroup Projects * @apiName GenerateFullProjectReport + * @apiParam (Optional arguments) {Boolean} restrict If `1`, restrict the report to the export area defined for the individual transects. * @apiPermission projectMember * * @apiParam {Number} id The project ID. @@ -67,7 +80,12 @@ public function full($id) { $project = Project::findOrFail($id); $this->authorize('access', $project); - $this->dispatch(new GenerateFullReport($project, $this->user)); + $this->validate($this->request, ['restrict' => 'boolean']); + $this->dispatch(new GenerateFullReport( + $project, + $this->user, + (bool) $this->request->input('restrict', false) + )); } /** * Retrieve report from filesystem diff --git a/src/Http/Controllers/Api/TransectExportAreaController.php b/src/Http/Controllers/Api/TransectExportAreaController.php index 283bb6cda..6e60c84e1 100644 --- a/src/Http/Controllers/Api/TransectExportAreaController.php +++ b/src/Http/Controllers/Api/TransectExportAreaController.php @@ -15,7 +15,7 @@ class TransectExportAreaController extends Controller * @api {get} transects/:id/export-area Show the export area * @apiGroup Transects * @apiName IndexTransectsExportArea - * @apiPermission member + * @apiPermission projectMember * @apiDescription The export area is a rectangle defined by two points. This endpoint returns an array containing the coordinates as follows: `[x1, y1, x2, y2]`. * The first point may be any of the 4 points of the rectangle. The second point is the point not directly adjacent to the first. * @@ -39,9 +39,9 @@ public function show($id) * @api {post} transects/:id/export-area Set the export area * @apiGroup Transects * @apiName StoreTransectsExportArea - * @apiPermission admin + * @apiPermission projectAdmin * - * @apiParam (Required attributes) {Number[]} coordinates Coordinates of the export area formatted as `[x1, y1, x2, y2]` array of integers + * @apiParam (Required arguments) {Number[]} coordinates Coordinates of the export area formatted as `[x1, y1, x2, y2]` array of integers * * @param int $id Transect ID * @return \Illuminate\Http\Response @@ -70,7 +70,7 @@ public function store($id) * @api {delete} transects/:id/export-area Remove the export area * @apiGroup Transects * @apiName DestroyTransectsExportArea - * @apiPermission admin + * @apiPermission projectAdmin * * @param int $id Transect ID * @return \Illuminate\Http\Response diff --git a/src/Jobs/GenerateBasicReport.php b/src/Jobs/GenerateBasicReport.php index efb4ee967..47c19252b 100644 --- a/src/Jobs/GenerateBasicReport.php +++ b/src/Jobs/GenerateBasicReport.php @@ -2,7 +2,6 @@ namespace Dias\Modules\Export\Jobs; -use Mail; use DB; use Dias\Modules\Export\Support\CsvFile; use Dias\Modules\Export\Support\Reports\Basic; @@ -26,11 +25,10 @@ public function handle() $csv = CsvFile::makeTmp(); $tmpFiles[] = $csv; - // put transect name to first line $csv->put([$name]); - $rows = $this->query()->where('images.transect_id', $id)->get(); + $rows = $this->query($id)->get(); foreach ($rows as $row) { $csv->put([ @@ -46,22 +44,8 @@ public function handle() $report = app()->make(Basic::class); $report->generate($this->project, $tmpFiles); - Mail::send('export::emails.report', [ - 'user' => $this->user, - 'project' => $this->project, - 'type' => 'basic', - 'uuid' => $report->basename(), - 'filename' => "biigle_{$this->project->id}_basic_report.pdf", - ], function ($mail) { - if ($this->user->firstname && $this->user->lastname) { - $name = "{$this->user->firstname} {$this->user->lastname}"; - } else { - $name = null; - } + $this->sendReportMail('basic', $report->basename(), 'pdf'); - $mail->subject("BIIGLE basic report for project {$this->project->name}") - ->to($this->user->email, $name); - }); } catch (\Exception $e) { if (isset($report)) { $report->delete(); @@ -77,14 +61,20 @@ public function handle() /** * Assemble a new DB query for a transect. * + * @param int $id Transect ID + * * @return \Illuminate\Database\Query\Builder */ - private function query() + protected function query($id) { return DB::table('labels') ->join('annotation_labels', 'annotation_labels.label_id', '=', 'labels.id') ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') ->join('images', 'annotations.image_id', '=', 'images.id') + ->where('images.transect_id', $id) + ->when($this->restricted, function ($query) use ($id) { + return $query->whereNotIn('annotations.id', $this->getSkipIds($id)); + }) ->select(DB::raw('labels.name, labels.color, count(labels.id) as count')) ->groupBy('labels.id'); } diff --git a/src/Jobs/GenerateExtendedReport.php b/src/Jobs/GenerateExtendedReport.php index 1e8f71fad..f04aa2c2e 100644 --- a/src/Jobs/GenerateExtendedReport.php +++ b/src/Jobs/GenerateExtendedReport.php @@ -2,7 +2,6 @@ namespace Dias\Modules\Export\Jobs; -use Mail; use DB; use Dias\Modules\Export\Support\CsvFile; use Dias\Modules\Export\Support\Reports\Extended; @@ -29,9 +28,9 @@ public function handle() // put transect name to first line $csv->put([$name]); - $query = $this->query()->where('images.transect_id', $id); + $query = $this->query($id); - $query->chunk(500, function ($rows) use ($csv) { + $query->chunkById(500, function ($rows) use ($csv) { foreach ($rows as $row) { $csv->put([ $row->filename, @@ -39,7 +38,7 @@ public function handle() $row->count, ]); } - }); + }, 'images.id'); $csv->close(); } @@ -47,22 +46,8 @@ public function handle() $report = app()->make(Extended::class); $report->generate($this->project, $tmpFiles); - Mail::send('export::emails.report', [ - 'user' => $this->user, - 'project' => $this->project, - 'type' => 'extended', - 'uuid' => $report->basename(), - 'filename' => "biigle_{$this->project->id}_extended_report.xlsx", - ], function ($mail) { - if ($this->user->firstname && $this->user->lastname) { - $name = "{$this->user->firstname} {$this->user->lastname}"; - } else { - $name = null; - } + $this->sendReportMail('extended', $report->basename(), 'xlsx'); - $mail->subject("BIIGLE extended report for project {$this->project->name}") - ->to($this->user->email, $name); - }); } catch (\Exception $e) { if (isset($report)) { $report->delete(); @@ -78,16 +63,23 @@ public function handle() /** * Assemble a new DB query for a transect. * + * @param int $id Transect ID + * * @return \Illuminate\Database\Query\Builder */ - private function query() + private function query($id) { - return DB::table('labels') - ->join('annotation_labels', 'annotation_labels.label_id', '=', 'labels.id') - ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') - ->join('images', 'annotations.image_id', '=', 'images.id') - ->select(DB::raw('images.filename, labels.name, count(labels.id) as count')) + return DB::table('images') + ->join('annotations', 'annotations.image_id', '=', 'images.id') + ->join('annotation_labels', 'annotation_labels.annotation_id', '=', 'annotations.id') + ->join('labels', 'annotation_labels.label_id', '=', 'labels.id') + // images.id is required for chunkById + ->select(DB::raw('images.id, images.filename, labels.name, count(labels.id) as count')) ->groupBy('labels.id', 'images.id') + ->where('images.transect_id', $id) + ->when($this->restricted, function ($query) use ($id) { + return $query->whereNotIn('annotations.id', $this->getSkipIds($id)); + }) // order by is essential for chunking! ->orderBy('images.id') ->orderBy('labels.id'); diff --git a/src/Jobs/GenerateFullReport.php b/src/Jobs/GenerateFullReport.php index 7c0e1285c..257b98484 100644 --- a/src/Jobs/GenerateFullReport.php +++ b/src/Jobs/GenerateFullReport.php @@ -2,7 +2,6 @@ namespace Dias\Modules\Export\Jobs; -use Mail; use DB; use Dias\Modules\Export\Support\CsvFile; use Dias\Modules\Export\Support\Reports\Full; @@ -29,9 +28,9 @@ public function handle() // put transect name to first line $csv->put([$name]); - $query = $this->query()->where('images.transect_id', $id); + $query = $this->query($id); - $query->chunk(500, function ($rows) use ($csv) { + $query->chunkById(500, function ($rows) use ($csv) { foreach ($rows as $row) { $csv->put([ $row->filename, @@ -41,30 +40,15 @@ public function handle() $row->points, ]); } - }); - + }, 'annotation_labels.id'); $csv->close(); } $report = app()->make(Full::class); $report->generate($this->project, $tmpFiles); - Mail::send('export::emails.report', [ - 'user' => $this->user, - 'project' => $this->project, - 'type' => 'full', - 'uuid' => $report->basename(), - 'filename' => "biigle_{$this->project->id}_full_report.xlsx", - ], function ($mail) { - if ($this->user->firstname && $this->user->lastname) { - $name = "{$this->user->firstname} {$this->user->lastname}"; - } else { - $name = null; - } + $this->sendReportMail('full', $report->basename(), 'xlsx'); - $mail->subject("BIIGLE full report for project {$this->project->name}") - ->to($this->user->email, $name); - }); } catch (\Exception $e) { if (isset($report)) { $report->delete(); @@ -80,22 +64,29 @@ public function handle() /** * Assemble a new DB query for a transect. * + * @param int $id Transect ID + * * @return \Illuminate\Database\Query\Builder */ - private function query() + private function query($id) { - return DB::table('labels') - ->join('annotation_labels', 'annotation_labels.label_id', '=', 'labels.id') + return DB::table('annotation_labels') + ->join('labels', 'annotation_labels.label_id', '=', 'labels.id') ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') ->join('images', 'annotations.image_id', '=', 'images.id') ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') ->select( + 'annotation_labels.id', // required for chunkById 'images.filename', 'annotations.id as annotation_id', 'labels.name as label_name', 'shapes.name as shape_name', 'annotations.points' ) + ->where('images.transect_id', $id) + ->when($this->restricted, function ($query) use ($id) { + return $query->whereNotIn('annotations.id', $this->getSkipIds($id)); + }) // order by is essential for chunking! ->orderBy('annotations.id') ->orderBy('labels.id') diff --git a/src/Jobs/GenerateReportJob.php b/src/Jobs/GenerateReportJob.php index 59ec88f3e..5e5bff477 100644 --- a/src/Jobs/GenerateReportJob.php +++ b/src/Jobs/GenerateReportJob.php @@ -2,9 +2,12 @@ namespace Dias\Modules\Export\Jobs; -use Dias\Jobs\Job; -use Dias\Project; +use DB; +use Mail; use Dias\User; +use Dias\Project; +use Dias\Jobs\Job; +use Dias\Modules\Export\Transect; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; @@ -27,17 +30,121 @@ class GenerateReportJob extends Job implements ShouldQueue */ protected $user; + /** + * Restrict the report to the export areas of the transects + * + * @var bool + */ + protected $restricted; + /** * Create a new job instance. * * @param Project $project The project for which the report should be generated. * @param User $user The user to notify of the finished report + * @param bool $restricted Restrict the report to the export areas of the transects * * @return void */ - public function __construct(Project $project, User $user) + public function __construct(Project $project, User $user, $restricted = false) { - $this->project = $project; $this->user = $user; + $this->project = $project; + $this->restricted = $restricted; + } + + /** + * Returns the annotation IDs to skip as outside of the transect export area + * + * We collect the IDs to skip rather than the IDs to include since there are probably + * fewer annotations outside of the export area. + * + * @param int $id Transect ID + * + * @return array Annotation IDs + */ + protected function getSkipIds($id) + { + $skip = []; + $exportArea = Transect::find($id)->exportArea; + + if (!$exportArea) { + // take all annotations if no export area is specified + return $skip; + } + + $exportArea = [ + // min x + min($exportArea[0], $exportArea[2]), + // min y + min($exportArea[1], $exportArea[3]), + // max x + max($exportArea[0], $exportArea[2]), + // max y + max($exportArea[1], $exportArea[3]), + ]; + + $handleChunk = function ($annotations) use ($exportArea, &$skip) { + foreach ($annotations as $annotation) { + $points = json_decode($annotation->points); + $size = sizeof($points); + // Works for circles with 3 elements in $points, too! + for ($x = 0, $y = 1; $y < $size; $x += 2, $y += 2) { + if ($points[$x] >= $exportArea[0] && + $points[$x] <= $exportArea[2] && + $points[$y] >= $exportArea[1] && + $points[$y] <= $exportArea[3]) { + // As long as one point of the annotation is inside the + // area, don't skip it. + continue 2; + } + } + + $skip[] = $annotation->id; + } + }; + + DB::table('annotations') + ->join('images', 'annotations.image_id', '=', 'images.id') + ->where('images.transect_id', $id) + ->select('annotations.id', 'annotations.points') + ->chunkById(500, $handleChunk, 'annotations.id'); + + return $skip; + } + + /** + * Send the email with the link to the report file + * + * @param string $type Report type + * @param string $uuid Refort file UUID for the download link + * @param string $filetype Type of the report file, e.g. `pdf` or `xls`. + * @return void + */ + protected function sendReportMail($type, $uuid, $filetype) + { + if ($this->restricted) { + $filename = "biigle_{$this->project->id}_{$type}_report_restricted.{$filetype}"; + } else { + $filename = "biigle_{$this->project->id}_{$type}_report.{$filetype}"; + } + + return Mail::send('export::emails.report', [ + 'user' => $this->user, + 'project' => $this->project, + 'restricted' => $this->restricted, + 'type' => $type, + 'uuid' => $uuid, + 'filename' => $filename, + ], function ($mail) use ($type) { + if ($this->user->firstname && $this->user->lastname) { + $name = "{$this->user->firstname} {$this->user->lastname}"; + } else { + $name = null; + } + + $mail->subject("BIIGLE {$type} report for project {$this->project->name}") + ->to($this->user->email, $name); + }); } } diff --git a/src/public/assets/scripts/projects.js b/src/public/assets/scripts/projects.js index 8a5826888..a1600cc6b 100644 --- a/src/public/assets/scripts/projects.js +++ b/src/public/assets/scripts/projects.js @@ -1 +1 @@ -angular.module("dias.projects").factory("Report",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/projects/:project_id/reports/:type",{},{getBasic:{params:{type:"basic"}},getExtended:{params:{type:"extended"}},getFull:{params:{type:"full"}}})}]),angular.module("dias.projects").controller("ExportController",["$scope","Report","msg","PROJECT",function(e,t,r,s){"use strict";var o=!1,c={basic:t.getBasic,extended:t.getExtended,full:t.getFull},n=function(){o=!0},p=function(e){o=!1,r.responseError(e)};e.selected={type:"basic"},e.requestReport=function(){e.selected.type&&c[e.selected.type]({project_id:s.id},n,p)},e.isRequested=function(){return o}}]); \ No newline at end of file +angular.module("dias.projects").controller("ExportController",["$scope","Report","msg","PROJECT",function(e,t,r,s){"use strict";var c=!1,o={basic:t.getBasic,extended:t.getExtended,full:t.getFull},i=function(){c=!0},n=function(e){c=!1,r.responseError(e)};e.selected={type:"basic",restrict:!1},e.requestReport=function(){e.selected.type&&o[e.selected.type]({project_id:s.id,restrict:e.selected.restrict?"1":"0"},i,n)},e.isRequested=function(){return c}}]),angular.module("dias.projects").factory("Report",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/projects/:project_id/reports/:type",{},{getBasic:{params:{type:"basic"}},getExtended:{params:{type:"extended"}},getFull:{params:{type:"full"}}})}]); \ No newline at end of file diff --git a/src/resources/assets/js/projects/controllers/ExportController.js b/src/resources/assets/js/projects/controllers/ExportController.js index dc0a4c9a9..af201a0ce 100644 --- a/src/resources/assets/js/projects/controllers/ExportController.js +++ b/src/resources/assets/js/projects/controllers/ExportController.js @@ -26,13 +26,18 @@ angular.module('dias.projects').controller('ExportController', function ($scope, }; $scope.selected = { - type: 'basic' + type: 'basic', + restrict: false }; $scope.requestReport = function () { if (!$scope.selected.type) return; - types[$scope.selected.type]({project_id: PROJECT.id}, handleSuccess, handleError); + types[$scope.selected.type]( + {project_id: PROJECT.id, restrict: $scope.selected.restrict ? '1' : '0'}, + handleSuccess, + handleError + ); }; $scope.isRequested = function () { diff --git a/src/resources/views/emails/report.blade.php b/src/resources/views/emails/report.blade.php index 2fd5cac61..cc9e8e509 100644 --- a/src/resources/views/emails/report.blade.php +++ b/src/resources/views/emails/report.blade.php @@ -13,6 +13,11 @@ @endif your BIGLE DIAS {{$type}} report for project {{$project->name}} is ready for download.

+ @if($restricted) +

+ All annotations that were outside of the export area were discarded for this report. +

+ @endif

The report will be removed once you have downloaded it.

diff --git a/src/resources/views/projectsShow.blade.php b/src/resources/views/projectsShow.blade.php index 0fc388355..de77c7ef8 100644 --- a/src/resources/views/projectsShow.blade.php +++ b/src/resources/views/projectsShow.blade.php @@ -7,6 +7,11 @@ The report will be prepared for you. You will get notified by email when it is ready.
+
+ +
- - - + + + +
@@ -19,13 +20,16 @@
- The basic report contains graphical plots of abundances of the different annotation labels for each transect of this project (as PDF). + The basic annotation report contains graphical plots of abundances of the different annotation labels for each transect of this project (as PDF).
- The extended report lists the abundances of annotation labels for each image in all transects of this project (as XLSX). + The extended annotation report lists the abundances of annotation labels for each image in all transects of this project (as XLSX).
- The full report lists the labels, shape and coordinates of all annotations in all transects of this project (as XLSX). + The full annotation report lists the labels, shape and coordinates of all annotations in all transects of this project (as XLSX). +
+
+ The image label report lists the image labels of all images of all transects of this projects (as XLSX).
diff --git a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiReportsControllerTest.php b/tests/Http/Controllers/Api/ExportModuleHttpControllersApiReportsControllerTest.php index 556c86ab3..314390af7 100644 --- a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiReportsControllerTest.php +++ b/tests/Http/Controllers/Api/ExportModuleHttpControllersApiReportsControllerTest.php @@ -3,6 +3,7 @@ use Dias\Modules\Export\Jobs\Annotations\GenerateFullReport; use Dias\Modules\Export\Jobs\Annotations\GenerateBasicReport; use Dias\Modules\Export\Jobs\Annotations\GenerateExtendedReport; +use Dias\Modules\Export\Jobs\ImageLabels\GenerateStandardReport; class ExportModuleHttpControllersApiReportsControllerTest extends ApiTestCase { @@ -41,4 +42,16 @@ public function testFull() { $this->post("api/v1/projects/{$id}/reports/full") ->assertResponseOk(); } + + public function testStoreImageLabelReport() { + $id = $this->project()->id; + + $this->post("api/v1/projects/{$id}/reports/image-labels") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateStandardReport::class); + $this->beGuest(); + $this->post("api/v1/projects/{$id}/reports/image-labels") + ->assertResponseOk(); + } } diff --git a/tests/Jobs/ImageLabels/ExportModuleJobsImageLabelsGenerateStandardReportTest.php b/tests/Jobs/ImageLabels/ExportModuleJobsImageLabelsGenerateStandardReportTest.php new file mode 100644 index 000000000..0500cbf85 --- /dev/null +++ b/tests/Jobs/ImageLabels/ExportModuleJobsImageLabelsGenerateStandardReportTest.php @@ -0,0 +1,92 @@ +transects()->attach($transect); + $user = UserTest::create(); + + $il = ImageLabelTest::create([ + 'image_id' => ImageTest::create([ + 'transect_id' => $transect->id, + 'filename' => 'foo.jpg', + ])->id + ]); + + $il2 = ImageLabelTest::create([ + 'image_id' => $il->image_id, + ]); + + $il3 = ImageLabelTest::create([ + 'image_id' => ImageTest::create([ + 'transect_id' => $transect->id, + 'filename' => 'bar.jpg', + ])->id + ]); + + // check if the temporary file exists + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->once() + ->with([$transect->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$il->image->id, $il->image->filename, "{$il->label->name}, {$il2->label->name}"]); + + $mock->shouldReceive('put') + ->once() + ->with([$il3->image->id, $il3->image->filename, $il3->label->name]); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('generate') + ->once() + ->with(Mockery::type(Project::class), Mockery::type('array')); + + $mock->shouldReceive('basename') + ->once() + ->andReturn('abc123'); + + App::singleton(Standard::class, function () use ($mock) { + return $mock; + }); + + Mail::shouldReceive('send') + ->once() + ->withArgs([ + 'export::emails.report', + [ + 'user' => $user, + 'type' => 'image label', + 'project' => $project, + 'uuid' => 'abc123', + 'filename' => "biigle_{$project->id}_image_label_report.xlsx", + ], + Mockery::type('callable') + ]); + + + with(new GenerateStandardReport($project, $user))->generateReport(); + } +} From 955747152a8a0cd2df1e2dd95a26a3b81d8992b5 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 23 Aug 2016 09:24:25 +0200 Subject: [PATCH 034/407] Update to use the new annotations settings service --- src/public/assets/scripts/annotations.js | 2 +- src/public/assets/scripts/projects.js | 2 +- .../controllers/ExportAreaSettingsController.js | 17 +++++++++++------ .../views/annotationsSettings.blade.php | 4 ++-- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index 7a5b57b1c..6ad7f800c 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1 @@ -angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea",function(e,t){"use strict";e.setDefaultSettings("export_area_opacity","1"),e.edit=function(){e.isShown()||(e.settings.export_area_opacity="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e.settings.export_area_opacity},e["delete"]=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch("settings.export_area_opacity",t.setOpacity)}]),angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,c=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],l=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:c,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:c,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),p(e.feature).then(function(){s=e.feature})["catch"](function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:c,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n["delete"]({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},p=function(e){var t=m(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&p(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},m=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){l?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),l=!l},this.isEditing=function(){return l},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]); \ No newline at end of file +angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature})["catch"](function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n["delete"]({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]),angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e["delete"]=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]); \ No newline at end of file diff --git a/src/public/assets/scripts/projects.js b/src/public/assets/scripts/projects.js index 3675948ac..8d6462925 100644 --- a/src/public/assets/scripts/projects.js +++ b/src/public/assets/scripts/projects.js @@ -1 +1 @@ -angular.module("dias.projects").controller("ExportController",["$scope","Report","msg","PROJECT",function(e,t,n,a){"use strict";var r=!1,o={"basic annotation":t.getBasic,"extended annotation":t.getExtended,"full annotation":t.getFull,"image label":t.getImageLabel},s=["basic annotation","extended annotation","full annotation"],i=function(){r=!0},c=function(e){r=!1,n.responseError(e)};e.selected={type:"basic annotation",restrict:!1},e.canBeRestricted=function(){return s.indexOf(e.selected.type)!==-1},e.requestReport=function(){if(e.selected.type){var t={};e.canBeRestricted()&&(t.restrict=e.selected.restrict?"1":"0"),o[e.selected.type]({project_id:a.id},t,i,c)}},e.isRequested=function(){return r}}]),angular.module("dias.projects").factory("Report",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/projects/:project_id/reports/:type",{},{getBasic:{method:"POST",params:{type:"basic"}},getExtended:{method:"POST",params:{type:"extended"}},getFull:{method:"POST",params:{type:"full"}},getImageLabel:{method:"POST",params:{type:"image-labels"}}})}]); \ No newline at end of file +angular.module("dias.projects").factory("Report",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/projects/:project_id/reports/:type",{},{getBasic:{method:"POST",params:{type:"basic"}},getExtended:{method:"POST",params:{type:"extended"}},getFull:{method:"POST",params:{type:"full"}},getImageLabel:{method:"POST",params:{type:"image-labels"}}})}]),angular.module("dias.projects").controller("ExportController",["$scope","Report","msg","PROJECT",function(e,t,n,a){"use strict";var r=!1,o={"basic annotation":t.getBasic,"extended annotation":t.getExtended,"full annotation":t.getFull,"image label":t.getImageLabel},s=["basic annotation","extended annotation","full annotation"],i=function(){r=!0},c=function(e){r=!1,n.responseError(e)};e.selected={type:"basic annotation",restrict:!1},e.canBeRestricted=function(){return s.indexOf(e.selected.type)!==-1},e.requestReport=function(){if(e.selected.type){var t={};e.canBeRestricted()&&(t.restrict=e.selected.restrict?"1":"0"),o[e.selected.type]({project_id:a.id},t,i,c)}},e.isRequested=function(){return r}}]); \ No newline at end of file diff --git a/src/resources/assets/js/annotations/controllers/ExportAreaSettingsController.js b/src/resources/assets/js/annotations/controllers/ExportAreaSettingsController.js index 33ae0e778..8c92126fd 100644 --- a/src/resources/assets/js/annotations/controllers/ExportAreaSettingsController.js +++ b/src/resources/assets/js/annotations/controllers/ExportAreaSettingsController.js @@ -5,14 +5,17 @@ * @memberOf dias.annotations * @description Controller for ATE example patches settings */ -angular.module('dias.annotations').controller('ExportAreaSettingsController', function ($scope, exportArea) { +angular.module('dias.annotations').controller('ExportAreaSettingsController', function ($scope, exportArea, settings) { "use strict"; - $scope.setDefaultSettings('export_area_opacity', '1'); + var key = 'export_area_opacity'; + + settings.setDefaultSettings(key, '1'); + $scope[key] = settings.getPermanentSettings(key); $scope.edit = function () { if (!$scope.isShown()) { - $scope.settings.export_area_opacity = '1'; + $scope[key] = '1'; } exportArea.toggleEdit(); @@ -21,7 +24,7 @@ angular.module('dias.annotations').controller('ExportAreaSettingsController', fu $scope.isEditing = exportArea.isEditing; $scope.isShown = function () { - return $scope.settings.export_area_opacity !== '0'; + return $scope[key] !== '0'; }; $scope.delete = function () { @@ -31,7 +34,9 @@ angular.module('dias.annotations').controller('ExportAreaSettingsController', fu }; $scope.$on('image.shown', exportArea.updateHeight); - - $scope.$watch('settings.export_area_opacity', exportArea.setOpacity); + $scope.$watch(key, function (opacity) { + settings.setPermanentSettings(key, opacity); + exportArea.setOpacity(opacity); + }); } ); diff --git a/src/resources/views/annotationsSettings.blade.php b/src/resources/views/annotationsSettings.blade.php index 8faff708c..13d45b7a2 100644 --- a/src/resources/views/annotationsSettings.blade.php +++ b/src/resources/views/annotationsSettings.blade.php @@ -9,6 +9,6 @@ Export area - - + +
From f6382b0577839c83d540b33dec7dbd3fbac876d4 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 23 Aug 2016 14:59:12 +0200 Subject: [PATCH 035/407] Refactor generating of reports and use new notifications --- src/AvailableReport.php | 88 ++++++++ .../Api/AvailableReportController.php | 31 +++ .../Api/BasicAnnotationReportController.php | 40 ++++ .../ExtendedAnnotationReportController.php | 40 ++++ .../Api/FullAnnotationReportController.php | 40 ++++ .../Api/ImageLabelReportController.php | 35 ++++ .../Controllers/Api/ReportsController.php | 147 ------------- src/Http/routes.php | 11 +- src/Jobs/GenerateReportJob.php | 93 +-------- src/Notifications/ReportReady.php | 54 +++++ src/Support/Exec.php | 35 ++++ .../Reports/Annotations/AnnotationReport.php} | 67 +++--- src/Support/Reports/Annotations/Basic.php | 33 --- .../Reports/Annotations/BasicReport.php} | 53 +++-- src/Support/Reports/Annotations/Extended.php | 33 --- .../Reports/Annotations/ExtendedReport.php} | 55 +++-- src/Support/Reports/Annotations/Full.php | 33 --- .../Reports/Annotations/FullReport.php} | 55 +++-- src/Support/Reports/ImageLabels/Standard.php | 33 --- .../Reports/ImageLabels/StandardReport.php} | 57 +++-- src/Support/Reports/Report.php | 110 +++++++--- src/Transect.php | 2 +- src/resources/views/emails/report.blade.php | 28 --- tests/ExportModuleAvailableReportTest.php | 14 ++ ...ApiBasicAnnotationReportControllerTest.php | 20 ++ ...ExtendedAnnotationReportControllerTest.php | 20 ++ ...sApiFullAnnotationReportControllerTest.php | 20 ++ ...llersApiImageLabelReportControllerTest.php | 20 ++ ...ttpControllersApiReportsControllerTest.php | 57 ----- ...JobsAnnotationsGenerateBasicReportTest.php | 194 ------------------ ...eJobsAnnotationsGenerateFullReportTest.php | 194 ------------------ .../ExportModuleJobsGenerateReportTest.php | 51 +---- ...eportsAnnotationsAnnotationReportTest.php} | 97 +-------- ...pportReportsAnnotationsBasicReportTest.php | 63 ++++++ ...rtReportsAnnotationsExtendedReportTest.php | 63 ++++++ ...upportReportsAnnotationsFullReportTest.php | 61 ++++++ .../ExportModuleSupportReportsReportTest.php | 59 ++++++ ...tReportsImageLabelsStandardReportTest.php} | 41 +--- 38 files changed, 1029 insertions(+), 1118 deletions(-) create mode 100644 src/AvailableReport.php create mode 100644 src/Http/Controllers/Api/AvailableReportController.php create mode 100644 src/Http/Controllers/Api/BasicAnnotationReportController.php create mode 100644 src/Http/Controllers/Api/ExtendedAnnotationReportController.php create mode 100644 src/Http/Controllers/Api/FullAnnotationReportController.php create mode 100644 src/Http/Controllers/Api/ImageLabelReportController.php delete mode 100644 src/Http/Controllers/Api/ReportsController.php create mode 100644 src/Notifications/ReportReady.php create mode 100644 src/Support/Exec.php rename src/{Jobs/Annotations/GenerateAnnotationReportJob.php => Support/Reports/Annotations/AnnotationReport.php} (69%) delete mode 100644 src/Support/Reports/Annotations/Basic.php rename src/{Jobs/Annotations/GenerateBasicReport.php => Support/Reports/Annotations/BasicReport.php} (53%) delete mode 100644 src/Support/Reports/Annotations/Extended.php rename src/{Jobs/Annotations/GenerateExtendedReport.php => Support/Reports/Annotations/ExtendedReport.php} (57%) delete mode 100644 src/Support/Reports/Annotations/Full.php rename src/{Jobs/Annotations/GenerateFullReport.php => Support/Reports/Annotations/FullReport.php} (62%) delete mode 100644 src/Support/Reports/ImageLabels/Standard.php rename src/{Jobs/ImageLabels/GenerateStandardReport.php => Support/Reports/ImageLabels/StandardReport.php} (50%) delete mode 100644 src/resources/views/emails/report.blade.php create mode 100644 tests/ExportModuleAvailableReportTest.php create mode 100644 tests/Http/Controllers/Api/ExportModuleHttpControllersApiBasicAnnotationReportControllerTest.php create mode 100644 tests/Http/Controllers/Api/ExportModuleHttpControllersApiExtendedAnnotationReportControllerTest.php create mode 100644 tests/Http/Controllers/Api/ExportModuleHttpControllersApiFullAnnotationReportControllerTest.php create mode 100644 tests/Http/Controllers/Api/ExportModuleHttpControllersApiImageLabelReportControllerTest.php delete mode 100644 tests/Http/Controllers/Api/ExportModuleHttpControllersApiReportsControllerTest.php delete mode 100644 tests/Jobs/Annotations/ExportModuleJobsAnnotationsGenerateBasicReportTest.php delete mode 100644 tests/Jobs/Annotations/ExportModuleJobsAnnotationsGenerateFullReportTest.php rename tests/{Jobs/Annotations/ExportModuleJobsAnnotationsGenerateExtendedReportTest.php => Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsAnnotationReportTest.php} (50%) create mode 100644 tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php create mode 100644 tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php create mode 100644 tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php create mode 100644 tests/Support/Reports/ExportModuleSupportReportsReportTest.php rename tests/{Jobs/ImageLabels/ExportModuleJobsImageLabelsGenerateStandardReportTest.php => Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsStandardReportTest.php} (57%) diff --git a/src/AvailableReport.php b/src/AvailableReport.php new file mode 100644 index 000000000..e518a8e51 --- /dev/null +++ b/src/AvailableReport.php @@ -0,0 +1,88 @@ +exists()) { + throw (new ModelNotFoundException)->setModel(static::class); + } + + return $report; + } + + /** + * Create a new report object + * + * @param string $basename Optional basename of an existing report file. If not specified, a new one will be generated. + */ + public function __construct($basename = null) + { + if ($basename) { + $this->path = config('export.reports_storage').'/'.$basename; + } else { + do { + // use str_random to generate a cryptographically secure random string + // because it will be used to retrieve the file via a public url + $path = config('export.reports_storage').'/'.str_random(); + } while (File::exists($path)); + + $this->path = $path; + } + } + + /** + * Return the basename of the file of this report + * + * @return string + */ + public function basename() + { + return File::basename($this->path); + } + + /** + * Return the dirname of the file of this report + * + * @return string + */ + public function dirname() + { + return File::dirname($this->path); + } + + /** + * Delete the report file + */ + public function delete() + { + return File::delete($this->path); + } + + /** + * Check if the report exists + * + * @return bool + */ + public function exists() + { + return File::exists($this->path); + } +} diff --git a/src/Http/Controllers/Api/AvailableReportController.php b/src/Http/Controllers/Api/AvailableReportController.php new file mode 100644 index 000000000..9e307934f --- /dev/null +++ b/src/Http/Controllers/Api/AvailableReportController.php @@ -0,0 +1,31 @@ +download($report->path, $filename) + ->deleteFileAfterSend(true); + } +} diff --git a/src/Http/Controllers/Api/BasicAnnotationReportController.php b/src/Http/Controllers/Api/BasicAnnotationReportController.php new file mode 100644 index 000000000..cc2570749 --- /dev/null +++ b/src/Http/Controllers/Api/BasicAnnotationReportController.php @@ -0,0 +1,40 @@ +authorize('access', $project); + $this->validate($request, ['restrict' => 'boolean']); + $this->dispatch(new GenerateReportJob( + new BasicReport($project, (bool) $request->input('restrict', false)), + $auth->user() + )); + } +} diff --git a/src/Http/Controllers/Api/ExtendedAnnotationReportController.php b/src/Http/Controllers/Api/ExtendedAnnotationReportController.php new file mode 100644 index 000000000..28fea67b1 --- /dev/null +++ b/src/Http/Controllers/Api/ExtendedAnnotationReportController.php @@ -0,0 +1,40 @@ +authorize('access', $project); + $this->validate($request, ['restrict' => 'boolean']); + $this->dispatch(new GenerateReportJob( + new ExtendedReport($project, (bool) $request->input('restrict', false)), + $auth->user() + )); + } +} diff --git a/src/Http/Controllers/Api/FullAnnotationReportController.php b/src/Http/Controllers/Api/FullAnnotationReportController.php new file mode 100644 index 000000000..7a783858a --- /dev/null +++ b/src/Http/Controllers/Api/FullAnnotationReportController.php @@ -0,0 +1,40 @@ +authorize('access', $project); + $this->validate($request, ['restrict' => 'boolean']); + $this->dispatch(new GenerateReportJob( + new FullReport($project, (bool) $request->input('restrict', false)), + $auth->user() + )); + } +} diff --git a/src/Http/Controllers/Api/ImageLabelReportController.php b/src/Http/Controllers/Api/ImageLabelReportController.php new file mode 100644 index 000000000..39811c4b4 --- /dev/null +++ b/src/Http/Controllers/Api/ImageLabelReportController.php @@ -0,0 +1,35 @@ +authorize('access', $project); + $this->dispatch( + new GenerateReportJob(new StandardReport($project), $auth->user()) + ); + } +} diff --git a/src/Http/Controllers/Api/ReportsController.php b/src/Http/Controllers/Api/ReportsController.php deleted file mode 100644 index d96ae4199..000000000 --- a/src/Http/Controllers/Api/ReportsController.php +++ /dev/null @@ -1,147 +0,0 @@ -authorize('access', $project); - $this->validate($request, ['restrict' => 'boolean']); - $this->dispatch(new GenerateBasicReport( - $project, - $auth->user(), - (bool) $request->input('restrict', false) - )); - } - - /** - * Generate a extended report - * - * @api {post} projects/:id/reports/extended Generate a new extended report - * @apiGroup Projects - * @apiName GenerateExtendedProjectReport - * @apiParam (Optional arguments) {Boolean} restrict If `1`, restrict the report to the export area defined for the individual transects. - * @apiPermission projectMember - * - * @apiParam {Number} id The project ID. - * - * @param Request $request - * @param Guard $auth - * @param int $id project id - * @return \Illuminate\Http\Response - */ - public function extended(Request $request, Guard $auth, $id) - { - $project = Project::findOrFail($id); - $this->authorize('access', $project); - $this->validate($request, ['restrict' => 'boolean']); - $this->dispatch(new GenerateExtendedReport( - $project, - $auth->user(), - (bool) $request->input('restrict', false) - )); - } - - /** - * Generate a full report - * - * @api {post} projects/:id/reports/full Generate a new full report - * @apiGroup Projects - * @apiName GenerateFullProjectReport - * @apiParam (Optional arguments) {Boolean} restrict If `1`, restrict the report to the export area defined for the individual transects. - * @apiPermission projectMember - * - * @apiParam {Number} id The project ID. - * - * @param Request $request - * @param Guard $auth - * @param int $id project id - * @return \Illuminate\Http\Response - */ - public function full(Request $request, Guard $auth, $id) - { - $project = Project::findOrFail($id); - $this->authorize('access', $project); - $this->validate($request, ['restrict' => 'boolean']); - $this->dispatch(new GenerateFullReport( - $project, - $auth->user(), - (bool) $request->input('restrict', false) - )); - } - - /** - * Generate an image label report - * - * @api {post} projects/:id/reports/image-labels Generate a new image label report - * @apiGroup Projects - * @apiName GenerateImageLabelProjectReport - * @apiPermission projectMember - * - * @apiParam {Number} id The project ID. - * - * @param Guard $auth - * @param int $id project id - * @return \Illuminate\Http\Response - */ - public function storeImageLabelReport(Guard $auth, $id) - { - $project = Project::findOrFail($id); - $this->authorize('access', $project); - $this->dispatch(new GenerateStandardReport($project, $auth->user())); - } - - /** - * Retrieve report from filesystem - * - * @api {get} reports/:uid/:filename - * @apiGroup Files - * @apiName RetrieveProjectReport - * - * @apiParam {string} uid The report uid. - * @apiParam {string} filename Filename of the downloaded file. - * - * @param string $uid report uid - * @param string $filename Download filename - * @return \Illuminate\Http\Response - */ - public function show($uid, $filename) - { - $report = new Report($uid); - if ($report->exists()) { - return response() - ->download($report->path, $filename) - ->deleteFileAfterSend(true); - } else { - abort(404); - } - } -} diff --git a/src/Http/routes.php b/src/Http/routes.php index 75e91c2dc..063c6d7bb 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -7,19 +7,19 @@ ], function ($router) { $router->post('projects/{id}/reports/basic', [ - 'uses' => 'ReportsController@basic', + 'uses' => 'BasicAnnotationReportController@store', ]); $router->post('projects/{id}/reports/extended', [ - 'uses' => 'ReportsController@extended', + 'uses' => 'ExtendedAnnotationReportController@store', ]); $router->post('projects/{id}/reports/full', [ - 'uses' => 'ReportsController@full', + 'uses' => 'FullAnnotationReportController@store', ]); $router->post('projects/{id}/reports/image-labels', [ - 'uses' => 'ReportsController@storeImageLabelReport', + 'uses' => 'ImageLabelReportController@store', ]); $router->get('transects/{id}/export-area', [ @@ -37,6 +37,7 @@ // this route should be public (is protected by random uids) $router->get('api/v1/reports/{uid}/{filename}', [ - 'uses' => 'Api\ReportsController@show', + 'as' => 'download_report', + 'uses' => 'Api\StoredReportController@show', ]); diff --git a/src/Jobs/GenerateReportJob.php b/src/Jobs/GenerateReportJob.php index ae851dc2f..b2f31d732 100644 --- a/src/Jobs/GenerateReportJob.php +++ b/src/Jobs/GenerateReportJob.php @@ -2,28 +2,18 @@ namespace Dias\Modules\Export\Jobs; -use DB; -use Mail; -use Exception; use Dias\User; -use Dias\Project; use Dias\Jobs\Job; -use Dias\Modules\Export\Transect; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; +use Dias\Modules\Export\Support\Reports\Report; +use Dias\Modules\Export\Notifications\ReportReady; -abstract class GenerateReportJob extends Job implements ShouldQueue +class GenerateReportJob extends Job implements ShouldQueue { use InteractsWithQueue, SerializesModels; - /** - * The project for which the report should be generated. - * - * @var Project - */ - protected $project; - /** * The user to notify of the finished report. * @@ -34,93 +24,28 @@ abstract class GenerateReportJob extends Job implements ShouldQueue /** * The report that should be generated. * - * @var \Dias\Modules\Export\Support\Reports\Report + * @var Report */ protected $report; - /** - * Temporary files that are created when generating a report. - * - * @var array - */ - protected $tmpFiles; - /** * Create a new job instance. * - * @param Project $project The project for which the report should be generated. + * @param Report $report The report to generate * @param User $user The user to notify of the finished report - * - * @return void */ - public function __construct(Project $project, User $user) + public function __construct(Report $report, User $user) { + $this->report = $report; $this->user = $user; - $this->project = $project; - $this->tmpFiles = []; - } - - /** - * Send the email with the link to the report file - * - * @param string $type Report type - * @param string $filename Filename used for the download file - * @param string $uuid Refort file UUID for the download link - * @param string $filetype Type of the report file, e.g. `pdf` or `xls`. - * @return void - */ - protected function sendReportMail($type, $filename, $uuid, $filetype) - { - $params = [ - 'user' => $this->user, - 'project' => $this->project, - 'type' => $type, - 'uuid' => $uuid, - 'filename' => "biigle_{$this->project->id}_{$filename}_report.{$filetype}", - ]; - - // from annotation report, this will be handled more elegantly in the future - if (isset($this->restricted) && $this->restricted) { - $params['restricted'] = true; - } - - return Mail::send('export::emails.report', $params, function ($mail) use ($type) { - if ($this->user->firstname && $this->user->lastname) { - $name = "{$this->user->firstname} {$this->user->lastname}"; - } else { - $name = null; - } - - $mail->subject("BIIGLE {$type} report for project {$this->project->name}") - ->to($this->user->email, $name); - }); } /** * Execute the job - * - * @return void */ public function handle() { - try { - $this->generateReport(); - } catch (Exception $e) { - if (isset($this->report)) { - $this->report->delete(); - throw $e; - } - } finally { - array_walk($this->tmpFiles, function ($file) { - $file->delete(); - }); - } + $this->report->generate(); + $this->user->notify(new ReportReady($this->report)); } - - /** - * Generate the report - * - * @return void - */ - protected abstract function generateReport(); } diff --git a/src/Notifications/ReportReady.php b/src/Notifications/ReportReady.php new file mode 100644 index 000000000..1427082b2 --- /dev/null +++ b/src/Notifications/ReportReady.php @@ -0,0 +1,54 @@ +report = $report; + } + + /** + * Get the notification's delivery channels. + * + * @param mixed $notifiable + * @return array + */ + public function via($notifiable) + { + return ['mail']; + } + + /** + * Get the mail representation of the notification. + * + * @param mixed $notifiable + * @return \Illuminate\Notifications\Messages\MailMessage + */ + public function toMail($notifiable) + { + return (new MailMessage) + ->subject('Your BIIGLE DIAS report is ready') + ->line("Your {$this->report->getName()} is ready for download!") + ->line('The report will be removed once you have downloaded it.') + ->action('Download report', $this->report->getUrl()); + } +} diff --git a/src/Support/Exec.php b/src/Support/Exec.php new file mode 100644 index 000000000..0c1fb0fa0 --- /dev/null +++ b/src/Support/Exec.php @@ -0,0 +1,35 @@ +lines = []; + $this->code = 0; + exec($command, $this->lines, $this->code); + } +} diff --git a/src/Jobs/Annotations/GenerateAnnotationReportJob.php b/src/Support/Reports/Annotations/AnnotationReport.php similarity index 69% rename from src/Jobs/Annotations/GenerateAnnotationReportJob.php rename to src/Support/Reports/Annotations/AnnotationReport.php index e31bc8884..14116ed95 100644 --- a/src/Jobs/Annotations/GenerateAnnotationReportJob.php +++ b/src/Support/Reports/Annotations/AnnotationReport.php @@ -1,38 +1,61 @@ restricted = $restricted; } + /** + * Get the report name + * + * @return string + */ + public function getName() + { + if ($this->restricted) { + return "{$this->name} (restricted to export area)"; + } + + return $this->name; + } + + /** + * Get the filename + * + * @return string + */ + public function getFilename() + { + if ($this->restricted) { + return "{$this->filename}_restricted"; + } + + return $this->filename; + } + /** * Returns the annotation IDs to skip as outside of the transect export area * @@ -92,22 +115,4 @@ protected function getSkipIds($id) return $skip; } - - /** - * Send the email with the link to the report file - * - * @param string $type Report type - * @param string $filename Filename used for the download file - * @param string $uuid Refort file UUID for the download link - * @param string $filetype Type of the report file, e.g. `pdf` or `xls`. - * @return void - */ - protected function sendReportMail($type, $filename, $uuid, $filetype) - { - if ($this->restricted) { - $filename = "{$filename}_restricted"; - } - - parent::sendReportMail($type, $filename, $uuid, $filetype); - } } diff --git a/src/Support/Reports/Annotations/Basic.php b/src/Support/Reports/Annotations/Basic.php deleted file mode 100644 index 56c2f421b..000000000 --- a/src/Support/Reports/Annotations/Basic.php +++ /dev/null @@ -1,33 +0,0 @@ -path; - }, $csvs)); - - $dump = []; - exec("{$python} {$script} \"{$project->name}\" {$this->path} {$csvs}", $dump, $code); - - if ($code !== 0) { - throw new \Exception("Basic report generation failed with exit code {$code}:\n".implode("\n", $dump)); - } - } -} diff --git a/src/Jobs/Annotations/GenerateBasicReport.php b/src/Support/Reports/Annotations/BasicReport.php similarity index 53% rename from src/Jobs/Annotations/GenerateBasicReport.php rename to src/Support/Reports/Annotations/BasicReport.php index 7e0a097d5..abcf7892e 100644 --- a/src/Jobs/Annotations/GenerateBasicReport.php +++ b/src/Support/Reports/Annotations/BasicReport.php @@ -1,13 +1,29 @@ name = 'basic annotation report'; + $this->filename = 'basic_annotation_report'; + $this->extension = 'pdf'; + } + /** * Generate the report. * @@ -39,15 +55,7 @@ public function generateReport() $csv->close(); } - $this->report = app()->make(Basic::class); - $this->report->generate($this->project, $this->tmpFiles); - - $this->sendReportMail( - 'basic annotation', - 'basic_annotation', - $this->report->basename(), - 'pdf' - ); + $this->executeScript(); } /** @@ -70,4 +78,25 @@ protected function query($id) ->select(DB::raw('labels.name, labels.color, count(labels.id) as count')) ->groupBy('labels.id'); } + + /** + * Execute the external report parsing script + */ + protected function executeScript() + { + $python = config('export.python'); + $script = config('export.scripts.basic_report'); + + $csvs = implode(' ', array_map(function ($csv) { + return $csv->path; + }, $this->tmpFiles)); + + $exec = App::make(Exec::class, [ + 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->storedReport->path} {$csvs}", + ]); + + if ($exec->code !== 0) { + throw new \Exception("Basic annotation report generation failed with exit code {$exec->code}:\n".implode("\n", $exec->lines)); + } + } } diff --git a/src/Support/Reports/Annotations/Extended.php b/src/Support/Reports/Annotations/Extended.php deleted file mode 100644 index 98136c94f..000000000 --- a/src/Support/Reports/Annotations/Extended.php +++ /dev/null @@ -1,33 +0,0 @@ -path; - }, $csvs)); - - $dump = []; - exec("{$python} {$script} \"{$project->name}\" {$this->path} {$csvs}", $dump, $code); - - if ($code !== 0) { - throw new \Exception("Extended report generation failed with exit code {$code}:\n".implode("\n", $dump)); - } - } -} diff --git a/src/Jobs/Annotations/GenerateExtendedReport.php b/src/Support/Reports/Annotations/ExtendedReport.php similarity index 57% rename from src/Jobs/Annotations/GenerateExtendedReport.php rename to src/Support/Reports/Annotations/ExtendedReport.php index e0ea43bc8..cc10ba602 100644 --- a/src/Jobs/Annotations/GenerateExtendedReport.php +++ b/src/Support/Reports/Annotations/ExtendedReport.php @@ -1,13 +1,29 @@ name = 'extended annotation report'; + $this->filename = 'extended_annotation_report'; + $this->extension = 'xlsx'; + } + /** * Generate the report. * @@ -40,15 +56,7 @@ public function generateReport() $csv->close(); } - $this->report = app()->make(Extended::class); - $this->report->generate($this->project, $this->tmpFiles); - - $this->sendReportMail( - 'extended annotation', - 'extended_annotation', - $this->report->basename(), - 'xlsx' - ); + $this->executeScript(); } /** @@ -58,7 +66,7 @@ public function generateReport() * * @return \Illuminate\Database\Query\Builder */ - private function query($id) + protected function query($id) { return DB::table('images') ->join('annotations', 'annotations.image_id', '=', 'images.id') @@ -75,4 +83,25 @@ private function query($id) ->orderBy('images.id') ->orderBy('labels.id'); } + + /** + * Execute the external report parsing script + */ + protected function executeScript() + { + $python = config('export.python'); + $script = config('export.scripts.extended_report'); + + $csvs = implode(' ', array_map(function ($csv) { + return $csv->path; + }, $this->tmpFiles)); + + $exec = App::make(Exec::class, [ + 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->storedReport->path} {$csvs}", + ]); + + if ($exec->code !== 0) { + throw new \Exception("Extended annotation report generation failed with exit code {$exec->code}:\n".implode("\n", $exec->lines)); + } + } } diff --git a/src/Support/Reports/Annotations/Full.php b/src/Support/Reports/Annotations/Full.php deleted file mode 100644 index 423ca1285..000000000 --- a/src/Support/Reports/Annotations/Full.php +++ /dev/null @@ -1,33 +0,0 @@ -path; - }, $csvs)); - - $dump = []; - exec("{$python} {$script} \"{$project->name}\" {$this->path} {$csvs}", $dump, $code); - - if ($code !== 0) { - throw new \Exception("Full report generation failed with exit code {$code}:\n".implode("\n", $dump)); - } - } -} diff --git a/src/Jobs/Annotations/GenerateFullReport.php b/src/Support/Reports/Annotations/FullReport.php similarity index 62% rename from src/Jobs/Annotations/GenerateFullReport.php rename to src/Support/Reports/Annotations/FullReport.php index 1f62164c8..5cd39ed1c 100644 --- a/src/Jobs/Annotations/GenerateFullReport.php +++ b/src/Support/Reports/Annotations/FullReport.php @@ -1,13 +1,29 @@ name = 'full annotation report'; + $this->filename = 'full_annotation_report'; + $this->extension = 'xlsx'; + } + /** * Generate the report. * @@ -43,15 +59,7 @@ public function generateReport() $csv->close(); } - $this->report = app()->make(Full::class); - $this->report->generate($this->project, $this->tmpFiles); - - $this->sendReportMail( - 'full annotation', - 'full_annotation', - $this->report->basename(), - 'xlsx' - ); + $this->executeScript(); } /** @@ -61,7 +69,7 @@ public function generateReport() * * @return \Illuminate\Database\Query\Builder */ - private function query($id) + protected function query($id) { return DB::table('annotation_labels') ->join('labels', 'annotation_labels.label_id', '=', 'labels.id') @@ -86,4 +94,25 @@ private function query($id) ->orderBy('labels.id') ->orderBy('annotation_labels.user_id'); } + + /** + * Execute the external report parsing script + */ + protected function executeScript() + { + $python = config('export.python'); + $script = config('export.scripts.full_report'); + + $csvs = implode(' ', array_map(function ($csv) { + return $csv->path; + }, $this->tmpFiles)); + + $exec = App::make(Exec::class, [ + 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->storedReport->path} {$csvs}", + ]); + + if ($exec->code !== 0) { + throw new \Exception("Full annotation report generation failed with exit code {$exec->code}:\n".implode("\n", $exec->lines)); + } + } } diff --git a/src/Support/Reports/ImageLabels/Standard.php b/src/Support/Reports/ImageLabels/Standard.php deleted file mode 100644 index e698273aa..000000000 --- a/src/Support/Reports/ImageLabels/Standard.php +++ /dev/null @@ -1,33 +0,0 @@ -path; - }, $csvs)); - - $dump = []; - exec("{$python} {$script} \"{$project->name}\" {$this->path} {$csvs}", $dump, $code); - - if ($code !== 0) { - throw new \Exception("Standard image label report generation failed with exit code {$code}:\n".implode("\n", $dump)); - } - } -} diff --git a/src/Jobs/ImageLabels/GenerateStandardReport.php b/src/Support/Reports/ImageLabels/StandardReport.php similarity index 50% rename from src/Jobs/ImageLabels/GenerateStandardReport.php rename to src/Support/Reports/ImageLabels/StandardReport.php index a53793cd4..18016042b 100644 --- a/src/Jobs/ImageLabels/GenerateStandardReport.php +++ b/src/Support/Reports/ImageLabels/StandardReport.php @@ -1,15 +1,29 @@ name = 'image label report'; + $this->filename = 'image_label_report'; + $this->extension = 'xlsx'; + } + /** * Generate the report. * @@ -43,15 +57,7 @@ public function generateReport() $csv->close(); } - $this->report = app()->make(Report::class); - $this->report->generate($this->project, $this->tmpFiles); - - $this->sendReportMail( - 'image label', - 'image_label', - $this->report->basename(), - 'xlsx' - ); + $this->executeScript(); } /** @@ -60,7 +66,7 @@ public function generateReport() * @param int $id Transect ID * @return \Illuminate\Database\Query\Builder */ - private function query($id) + protected function query($id) { return DB::table('image_labels') ->join('images', 'image_labels.image_id', '=', 'images.id') @@ -69,4 +75,25 @@ private function query($id) ->where('images.transect_id', $id) ->orderBy('images.filename'); } + + /** + * Execute the external report parsing script + */ + protected function executeScript() + { + $python = config('export.python'); + $script = config('export.scripts.image_labels_standard_report'); + + $csvs = implode(' ', array_map(function ($csv) { + return $csv->path; + }, $this->tmpFiles)); + + $exec = App::make(Exec::class, [ + 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->storedReport->path} {$csvs}", + ]); + + if ($exec->code !== 0) { + throw new \Exception("Standard image label report generation failed with exit code {$exec->code}:\n".implode("\n", $exec->lines)); + } + } } diff --git a/src/Support/Reports/Report.php b/src/Support/Reports/Report.php index 8c26fa7a1..d89bf26e6 100644 --- a/src/Support/Reports/Report.php +++ b/src/Support/Reports/Report.php @@ -3,72 +3,120 @@ namespace Dias\Modules\Export\Support\Reports; use File; +use Exception; +use Dias\Project; +use Dias\Modules\Export\AvailableReport; class Report { /** - * The file path of this report + * The project for which the report should be generated. + * + * @var Project + */ + protected $project; + + /** + * Name of the report for use in text. * * @var string */ - public $path; + protected $name; /** - * Create a new report object + * Name of the report for use as (part of) a filename. * - * @param string $path Optional basename of an existing report file. If not specified, a new one will be generated + * @var string */ - public function __construct($basename = null) - { - if ($basename) { - $this->path = config('export.reports_storage').'/'.$basename; - } else { - do { - // use str_random to generate a cryptographically secure random string - // because it will be used to retrieve the file via a public url - $path = config('export.reports_storage').'/'.str_random(); - } while (File::exists($path)); + protected $filename; - $this->path = $path; - } + /** + * File extension of the report file. + * + * @var string + */ + protected $extension; + + /** + * Temporary files that are created when generating a report. + * + * @var array + */ + protected $tmpFiles; + + /** + * Instance of the stored report file. + * + * @var AvailableReport + */ + protected $storedReport; + + /** + * Create a report instance. + * + * @param Project $project The project for which the report should be generated. + */ + public function __construct(Project $project) + { + $this->project = $project; + $this->tmpFiles = []; + $this->name = ''; + $this->filename = ''; + $this->extension = ''; + $this->storedReport = new AvailableReport; } /** - * Return the basename of the file of this report + * Generate the report. * - * @return string + * @return void */ - public function basename() + public function generate() { - return File::basename($this->path); + try { + $this->generateReport(); + } catch (Exception $e) { + if (isset($this->storedReport)) { + $this->storedReport->delete(); + throw $e; + } + } finally { + array_walk($this->tmpFiles, function ($file) { + $file->delete(); + }); + } } /** - * Return the dirname of the file of this report + * Get the report name * * @return string */ - public function dirname() + public function getName() { - return File::dirname($this->path); + return $this->name; } /** - * Delete the report file + * Get the download URL for this report. + * + * @return string */ - public function delete() + public function getUrl() { - return File::delete($this->path); + return route('download_report', [ + $this->storedReport->basename(), + "biigle_{$this->project->id}_{$this->getFilename()}_report.{$this->extension}" + ]); } /** - * Check if the report exists + * Get the filename * - * @return bool + * @return string */ - public function exists() + public function getFilename() { - return File::exists($this->path); + return $this->filename; } - } diff --git a/src/Transect.php b/src/Transect.php index ff76f0fb6..fa0714931 100644 --- a/src/Transect.php +++ b/src/Transect.php @@ -2,8 +2,8 @@ namespace Dias\Modules\Export; -use Dias\Transect as BaseTransect; use Exception; +use Dias\Transect as BaseTransect; /** * Extends the base Dias transect diff --git a/src/resources/views/emails/report.blade.php b/src/resources/views/emails/report.blade.php deleted file mode 100644 index 29f11d75d..000000000 --- a/src/resources/views/emails/report.blade.php +++ /dev/null @@ -1,28 +0,0 @@ - - - - - BIGLE DIAS Report Notification - - -

- @if ($user->firstname && $user->lastname) - Dear {{$user->firstname}} {{$user->lastname}},

- @else - Dear user,

- @endif - your BIGLE DIAS {{$type}} report for project {{$project->name}} is ready for download. -

- @if(isset($restricted) && $restricted) -

- All annotations that were outside of the export area were discarded for this report. -

- @endif -

- The report will be removed once you have downloaded it. -

-

- Download report -

- - diff --git a/tests/ExportModuleAvailableReportTest.php b/tests/ExportModuleAvailableReportTest.php new file mode 100644 index 000000000..2176d9bea --- /dev/null +++ b/tests/ExportModuleAvailableReportTest.php @@ -0,0 +1,14 @@ +once()->andReturn(false); + $this->setExpectedException(ModelNotFoundException::class); + AvailableReport::findOrFail('abc'); + } +} diff --git a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiBasicAnnotationReportControllerTest.php b/tests/Http/Controllers/Api/ExportModuleHttpControllersApiBasicAnnotationReportControllerTest.php new file mode 100644 index 000000000..fe3d22836 --- /dev/null +++ b/tests/Http/Controllers/Api/ExportModuleHttpControllersApiBasicAnnotationReportControllerTest.php @@ -0,0 +1,20 @@ +project()->id; + + $this->post("api/v1/projects/{$id}/reports/basic") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateReportJob::class); + $this->beGuest(); + $this->post("api/v1/projects/{$id}/reports/basic") + ->assertResponseOk(); + } +} diff --git a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiExtendedAnnotationReportControllerTest.php b/tests/Http/Controllers/Api/ExportModuleHttpControllersApiExtendedAnnotationReportControllerTest.php new file mode 100644 index 000000000..582c5bcc9 --- /dev/null +++ b/tests/Http/Controllers/Api/ExportModuleHttpControllersApiExtendedAnnotationReportControllerTest.php @@ -0,0 +1,20 @@ +project()->id; + + $this->post("api/v1/projects/{$id}/reports/extended") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateReportJob::class); + $this->beGuest(); + $this->post("api/v1/projects/{$id}/reports/extended") + ->assertResponseOk(); + } +} diff --git a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiFullAnnotationReportControllerTest.php b/tests/Http/Controllers/Api/ExportModuleHttpControllersApiFullAnnotationReportControllerTest.php new file mode 100644 index 000000000..0c8dcf80d --- /dev/null +++ b/tests/Http/Controllers/Api/ExportModuleHttpControllersApiFullAnnotationReportControllerTest.php @@ -0,0 +1,20 @@ +project()->id; + + $this->post("api/v1/projects/{$id}/reports/full") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateReportJob::class); + $this->beGuest(); + $this->post("api/v1/projects/{$id}/reports/full") + ->assertResponseOk(); + } +} diff --git a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiImageLabelReportControllerTest.php b/tests/Http/Controllers/Api/ExportModuleHttpControllersApiImageLabelReportControllerTest.php new file mode 100644 index 000000000..9347580e0 --- /dev/null +++ b/tests/Http/Controllers/Api/ExportModuleHttpControllersApiImageLabelReportControllerTest.php @@ -0,0 +1,20 @@ +project()->id; + + $this->post("api/v1/projects/{$id}/reports/image-labels") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateReportJob::class); + $this->beGuest(); + $this->post("api/v1/projects/{$id}/reports/image-labels") + ->assertResponseOk(); + } +} diff --git a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiReportsControllerTest.php b/tests/Http/Controllers/Api/ExportModuleHttpControllersApiReportsControllerTest.php deleted file mode 100644 index 314390af7..000000000 --- a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiReportsControllerTest.php +++ /dev/null @@ -1,57 +0,0 @@ -project()->id; - - $this->post("api/v1/projects/{$id}/reports/basic") - ->assertResponseStatus(401); - - $this->expectsJobs(GenerateBasicReport::class); - $this->beGuest(); - $this->post("api/v1/projects/{$id}/reports/basic") - ->assertResponseOk(); - } - - public function testExtended() { - $id = $this->project()->id; - - $this->post("api/v1/projects/{$id}/reports/extended") - ->assertResponseStatus(401); - - $this->expectsJobs(GenerateExtendedReport::class); - $this->beGuest(); - $this->post("api/v1/projects/{$id}/reports/extended") - ->assertResponseOk(); - } - - public function testFull() { - $id = $this->project()->id; - - $this->post("api/v1/projects/{$id}/reports/full") - ->assertResponseStatus(401); - - $this->expectsJobs(GenerateFullReport::class); - $this->beGuest(); - $this->post("api/v1/projects/{$id}/reports/full") - ->assertResponseOk(); - } - - public function testStoreImageLabelReport() { - $id = $this->project()->id; - - $this->post("api/v1/projects/{$id}/reports/image-labels") - ->assertResponseStatus(401); - - $this->expectsJobs(GenerateStandardReport::class); - $this->beGuest(); - $this->post("api/v1/projects/{$id}/reports/image-labels") - ->assertResponseOk(); - } -} diff --git a/tests/Jobs/Annotations/ExportModuleJobsAnnotationsGenerateBasicReportTest.php b/tests/Jobs/Annotations/ExportModuleJobsAnnotationsGenerateBasicReportTest.php deleted file mode 100644 index 92fd5577c..000000000 --- a/tests/Jobs/Annotations/ExportModuleJobsAnnotationsGenerateBasicReportTest.php +++ /dev/null @@ -1,194 +0,0 @@ -transects()->attach($transect); - $user = UserTest::create(); - - $al = AnnotationLabelTest::create(); - $al->annotation->image->transect_id = $transect->id; - $al->annotation->image->save(); - AnnotationLabelTest::create([ - 'annotation_id' => $al->annotation_id, - 'label_id' => $al->label_id, - ]); - - $al2 = AnnotationLabelTest::create(['annotation_id' => $al->annotation_id]); - - // check if the temporary file exists - File::shouldReceive('exists') - ->once() - ->andReturn(false); - - $mock = Mockery::mock(); - - $mock->shouldReceive('put') - ->once() - ->with([$transect->name]); - - $mock->shouldReceive('put') - ->once() - ->with([$al->label->name, $al->label->color, 2]); - - $mock->shouldReceive('put') - ->once() - ->with([$al2->label->name, $al2->label->color, 1]); - - $mock->shouldReceive('close') - ->once(); - - App::singleton(CsvFile::class, function () use ($mock) { - return $mock; - }); - - $mock = Mockery::mock(); - - $mock->shouldReceive('generate') - ->once() - ->with(Mockery::type(Project::class), Mockery::type('array')); - - $mock->shouldReceive('basename') - ->once() - ->andReturn('abc123'); - - App::singleton(Basic::class, function () use ($mock) { - return $mock; - }); - - Mail::shouldReceive('send') - ->once() - ->withArgs([ - 'export::emails.report', - [ - 'user' => $user, - 'type' => 'basic annotation', - 'project' => $project, - 'uuid' => 'abc123', - 'filename' => "biigle_{$project->id}_basic_annotation_report.pdf", - ], - Mockery::type('callable') - ]); - - - with(new GenerateBasicReport($project, $user))->generateReport(); - } - - public function testGenerateReportRestrict() - { - $project = ProjectTest::create(); - $transect = Transect::convert(TransectTest::create()); - $project->transects()->attach($transect); - $user = UserTest::create(); - - $transect->exportArea = [100, 100, 200, 200]; - $transect->save(); - - $image = ImageTest::create([ - 'transect_id' => $transect->id, - 'filename' => '1.jpg', - ]); - - $annotations = [ - AnnotationTest::create([ - 'shape_id' => Shape::$pointId, - 'points' => [150, 150], - 'image_id' => $image->id, - ]), - AnnotationTest::create([ - 'shape_id' => Shape::$polygonId, - 'points' => [50, 50, 150, 150, 90, 90], - 'image_id' => $image->id, - ]), - AnnotationTest::create([ - 'shape_id' => Shape::$pointId, - 'points' => [50, 50], - 'image_id' => $image->id, - ]), - AnnotationTest::create([ - 'shape_id' => Shape::$polygonId, - 'points' => [50, 50, 10, 10, 25, 25], - 'image_id' => $image->id, - ]), - AnnotationTest::create([ - 'shape_id' => Shape::$circleId, - 'points' => [150, 150, 10], - 'image_id' => $image->id, - ]), - AnnotationTest::create([ - 'shape_id' => Shape::$circleId, - 'points' => [50, 50, 10], - 'image_id' => $image->id, - ]), - ]; - - $inside = [ - AnnotationLabelTest::create(['annotation_id' => $annotations[0]->id]), - AnnotationLabelTest::create(['annotation_id' => $annotations[1]->id]), - AnnotationLabelTest::create(['annotation_id' => $annotations[4]->id]), - ]; - - $outside = [ - AnnotationLabelTest::create(['annotation_id' => $annotations[2]->id]), - AnnotationLabelTest::create(['annotation_id' => $annotations[3]->id]), - AnnotationLabelTest::create(['annotation_id' => $annotations[5]->id]), - ]; - - $mock = Mockery::mock(); - $mock->shouldReceive('put') - ->once() - ->with([$transect->name]); - - foreach ($inside as $a) { - $mock->shouldReceive('put') - ->once() - ->with([$a->label->name, $a->label->color, 1]); - } - - foreach ($outside as $a) { - $mock->shouldReceive('put') - ->never() - ->with([$a->label->name, $a->label->color, 1]); - } - - $mock->shouldReceive('close')->once(); - - App::singleton(CsvFile::class, function () use ($mock) { - return $mock; - }); - - $mock = Mockery::mock(); - $mock->shouldReceive('generate', 'basename')->once(); - - App::singleton(Basic::class, function () use ($mock) { - return $mock; - }); - - Mail::shouldReceive('send') - ->once() - ->withArgs([ - 'export::emails.report', - [ - 'user' => $user, - 'type' => 'basic annotation', - 'restricted' => true, - 'project' => $project, - 'uuid' => null, - 'filename' => "biigle_{$project->id}_basic_annotation_restricted_report.pdf", - ], - Mockery::type('callable') - ]); - - with(new GenerateBasicReport($project, $user, true))->generateReport(); - } -} diff --git a/tests/Jobs/Annotations/ExportModuleJobsAnnotationsGenerateFullReportTest.php b/tests/Jobs/Annotations/ExportModuleJobsAnnotationsGenerateFullReportTest.php deleted file mode 100644 index 74429b1df..000000000 --- a/tests/Jobs/Annotations/ExportModuleJobsAnnotationsGenerateFullReportTest.php +++ /dev/null @@ -1,194 +0,0 @@ -transects()->attach($transect); - $user = UserTest::create(); - - $al = AnnotationLabelTest::create(); - $al->annotation->image->transect_id = $transect->id; - $al->annotation->image->attrs = ['image' => 'attrs']; - $al->annotation->image->save(); - - // check if the temporary file exists - File::shouldReceive('exists') - ->once() - ->andReturn(false); - - $mock = Mockery::mock(); - - $mock->shouldReceive('put') - ->once() - ->with([$transect->name]); - - $mock->shouldReceive('put') - ->once() - ->with([ - $al->annotation->image->filename, - $al->annotation_id, - $al->label->name, - $al->annotation->shape->name, - json_encode($al->annotation->points), - json_encode(['image' => 'attrs']), - ]); - - $mock->shouldReceive('close') - ->once(); - - App::singleton(CsvFile::class, function () use ($mock) { - return $mock; - }); - - $mock = Mockery::mock(); - - $mock->shouldReceive('generate') - ->once() - ->with(Mockery::type(Project::class), Mockery::type('array')); - - $mock->shouldReceive('basename') - ->once() - ->andReturn('abc123'); - - App::singleton(Full::class, function () use ($mock) { - return $mock; - }); - - Mail::shouldReceive('send') - ->once() - ->withArgs([ - 'export::emails.report', - [ - 'user' => $user, - 'type' => 'full annotation', - 'project' => $project, - 'uuid' => 'abc123', - 'filename' => "biigle_{$project->id}_full_annotation_report.xlsx", - ], - Mockery::type('callable') - ]); - - - with(new GenerateFullReport($project, $user))->generateReport(); - } - - public function testGenerateReportRestrict() - { - $project = ProjectTest::create(); - $transect = Transect::convert(TransectTest::create()); - $project->transects()->attach($transect); - $user = UserTest::create(); - - $transect->exportArea = [100, 100, 200, 200]; - $transect->save(); - - $image = ImageTest::create([ - 'transect_id' => $transect->id, - 'filename' => '1.jpg', - 'attrs' => ['image' => 'attrs'], - ]); - - $annotations = [ - AnnotationTest::create([ - 'shape_id' => Shape::$pointId, - 'points' => [150, 150], - 'image_id' => $image->id, - ]), - AnnotationTest::create([ - 'shape_id' => Shape::$polygonId, - 'points' => [50, 50, 150, 150, 90, 90], - 'image_id' => $image->id, - ]), - AnnotationTest::create([ - 'shape_id' => Shape::$pointId, - 'points' => [50, 50], - 'image_id' => $image->id, - ]), - AnnotationTest::create([ - 'shape_id' => Shape::$polygonId, - 'points' => [50, 50, 10, 10, 25, 25], - 'image_id' => $image->id, - ]), - AnnotationTest::create([ - 'shape_id' => Shape::$circleId, - 'points' => [150, 150, 10], - 'image_id' => $image->id, - ]), - AnnotationTest::create([ - 'shape_id' => Shape::$circleId, - 'points' => [50, 50, 10], - 'image_id' => $image->id, - ]), - ]; - - $inside = [ - AnnotationLabelTest::create(['annotation_id' => $annotations[0]->id]), - AnnotationLabelTest::create(['annotation_id' => $annotations[1]->id]), - AnnotationLabelTest::create(['annotation_id' => $annotations[4]->id]), - ]; - - $outside = [ - AnnotationLabelTest::create(['annotation_id' => $annotations[2]->id]), - AnnotationLabelTest::create(['annotation_id' => $annotations[3]->id]), - AnnotationLabelTest::create(['annotation_id' => $annotations[5]->id]), - ]; - - $mock = Mockery::mock(); - $mock->shouldReceive('put') - ->once() - ->with([$transect->name]); - - foreach ($inside as $a) { - $mock->shouldReceive('put') - ->once() - ->with([ - $image->filename, - $a->annotation_id, - $a->label->name, - $a->annotation->shape->name, - json_encode($a->annotation->points), - json_encode(['image' => 'attrs']), - ]); - } - - foreach ($outside as $a) { - $mock->shouldReceive('put') - ->never() - ->with([ - $image->filename, - $a->annotation_id, - $a->label->name, - $a->annotation->shape->name, - json_encode($a->annotation->points), - json_encode(['image' => 'attrs']), - ]); - } - - $mock->shouldReceive('close')->once(); - - App::singleton(CsvFile::class, function () use ($mock) { - return $mock; - }); - - $mock = Mockery::mock(); - $mock->shouldReceive('generate', 'basename')->once(); - - App::singleton(Full::class, function () use ($mock) { - return $mock; - }); - - Mail::shouldReceive('send')->once(); - - with(new GenerateFullReport($project, $user, true))->generateReport(); - } -} diff --git a/tests/Jobs/ExportModuleJobsGenerateReportTest.php b/tests/Jobs/ExportModuleJobsGenerateReportTest.php index ebf299990..3b9e5c583 100644 --- a/tests/Jobs/ExportModuleJobsGenerateReportTest.php +++ b/tests/Jobs/ExportModuleJobsGenerateReportTest.php @@ -1,51 +1,18 @@ setExpectedException(Exception::class); - with(new ReportJobThrowExceptionStub($project, $user))->handle(); - } - - public function testHandleRegular() - { - $project = ProjectTest::make(); - $user = UserTest::make(); - with(new ReportJobThrowNoExceptionStub($project, $user))->handle(); - } -} - -class ReportJobThrowExceptionStub extends GenerateReportJob -{ - public function generateReport() - { - $this->report = Mockery::mock(); - $this->report->shouldReceive('delete')->once(); - - $this->tmpFiles[] = Mockery::mock(); - $this->tmpFiles[0]->shouldReceive('delete')->once(); - - throw new Exception(); - } -} - -class ReportJobThrowNoExceptionStub extends GenerateReportJob -{ - public function generateReport() - { - $this->report = Mockery::mock(); - $this->report->shouldReceive('delete')->never(); - - $this->tmpFiles[] = Mockery::mock(); - $this->tmpFiles[0]->shouldReceive('delete')->once(); + $report = Mockery::mock(Report::class); + $report->shouldReceive('generate')->once(); + $user = Mockery::mock(User::class); + $user->shouldReceive('notify')->once()->with(Mockery::type(ReportReady::class)); + with(new GenerateReportJob($report, $user))->handle(); } } diff --git a/tests/Jobs/Annotations/ExportModuleJobsAnnotationsGenerateExtendedReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsAnnotationReportTest.php similarity index 50% rename from tests/Jobs/Annotations/ExportModuleJobsAnnotationsGenerateExtendedReportTest.php rename to tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsAnnotationReportTest.php index 9270b1539..33c58006c 100644 --- a/tests/Jobs/Annotations/ExportModuleJobsAnnotationsGenerateExtendedReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsAnnotationReportTest.php @@ -1,88 +1,13 @@ transects()->attach($transect); - $user = UserTest::create(); - - $al = AnnotationLabelTest::create(); - $al->annotation->image->transect_id = $transect->id; - $al->annotation->image->save(); - AnnotationLabelTest::create([ - 'annotation_id' => $al->annotation_id, - 'label_id' => $al->label_id, - ]); - - $al2 = AnnotationLabelTest::create(['annotation_id' => $al->annotation_id]); - - // check if the temporary file exists - File::shouldReceive('exists') - ->once() - ->andReturn(false); - - $mock = Mockery::mock(); - - $mock->shouldReceive('put') - ->once() - ->with([$transect->name]); - - $mock->shouldReceive('put') - ->once() - ->with([$al->annotation->image->filename, $al->label->name, 2]); - - $mock->shouldReceive('put') - ->once() - ->with([$al->annotation->image->filename, $al2->label->name, 1]); - - $mock->shouldReceive('close') - ->once(); - - App::singleton(CsvFile::class, function () use ($mock) { - return $mock; - }); - - $mock = Mockery::mock(); - - $mock->shouldReceive('generate') - ->once() - ->with(Mockery::type(Project::class), Mockery::type('array')); - - $mock->shouldReceive('basename') - ->once() - ->andReturn('abc123'); - - App::singleton(Extended::class, function () use ($mock) { - return $mock; - }); - - Mail::shouldReceive('send') - ->once() - ->withArgs([ - 'export::emails.report', - [ - 'user' => $user, - 'type' => 'extended annotation', - 'project' => $project, - 'uuid' => 'abc123', - 'filename' => "biigle_{$project->id}_extended_annotation_report.xlsx", - ], - Mockery::type('callable') - ]); - - - with(new GenerateExtendedReport($project, $user))->generateReport(); - } +class ExportModuleSupportReportsAnnotationsAnnotationReportTest extends TestCase +{ public function testGenerateReportRestrict() { @@ -145,6 +70,7 @@ public function testGenerateReportRestrict() ]; $mock = Mockery::mock(); + $mock->path = 'abc'; $mock->shouldReceive('put') ->once() ->with([$transect->name]); @@ -152,13 +78,13 @@ public function testGenerateReportRestrict() foreach ($inside as $a) { $mock->shouldReceive('put') ->once() - ->with([$image->filename, $a->label->name, 1]); + ->with([$a->label->name, $a->label->color, 1]); } foreach ($outside as $a) { $mock->shouldReceive('put') ->never() - ->with([$image->filename, $a->label->name, 1]); + ->with([$a->label->name, $a->label->color, 1]); } $mock->shouldReceive('close')->once(); @@ -168,14 +94,11 @@ public function testGenerateReportRestrict() }); $mock = Mockery::mock(); - $mock->shouldReceive('generate', 'basename')->once(); - - App::singleton(Extended::class, function () use ($mock) { + $mock->code = 0; + App::singleton(Exec::class, function () use ($mock) { return $mock; }); - Mail::shouldReceive('send')->once(); - - with(new GenerateExtendedReport($project, $user, true))->generateReport(); + with(new BasicReport($project, true))->generateReport(); } } diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php new file mode 100644 index 000000000..197481ed3 --- /dev/null +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php @@ -0,0 +1,63 @@ +transects()->attach($transect); + $user = UserTest::create(); + + $al = AnnotationLabelTest::create(); + $al->annotation->image->transect_id = $transect->id; + $al->annotation->image->save(); + AnnotationLabelTest::create([ + 'annotation_id' => $al->annotation_id, + 'label_id' => $al->label_id, + ]); + + $al2 = AnnotationLabelTest::create(['annotation_id' => $al->annotation_id]); + + // once for the StoredReport and one for the CsvFile + File::shouldReceive('exists') + ->twice() + ->andReturn(false); + + $mock = Mockery::mock(); + $mock->path = 'abc'; + + $mock->shouldReceive('put') + ->once() + ->with([$transect->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$al->label->name, $al->label->color, 2]); + + $mock->shouldReceive('put') + ->once() + ->with([$al2->label->name, $al2->label->color, 1]); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + $mock->code = 0; + App::singleton(Exec::class, function () use ($mock) { + return $mock; + }); + + with(new BasicReport($project, false))->generateReport(); + } +} diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php new file mode 100644 index 000000000..32816437e --- /dev/null +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php @@ -0,0 +1,63 @@ +transects()->attach($transect); + $user = UserTest::create(); + + $al = AnnotationLabelTest::create(); + $al->annotation->image->transect_id = $transect->id; + $al->annotation->image->save(); + AnnotationLabelTest::create([ + 'annotation_id' => $al->annotation_id, + 'label_id' => $al->label_id, + ]); + + $al2 = AnnotationLabelTest::create(['annotation_id' => $al->annotation_id]); + + // once for the StoredReport and one for the CsvFile + File::shouldReceive('exists') + ->twice() + ->andReturn(false); + + $mock = Mockery::mock(); + $mock->path = 'abc'; + + $mock->shouldReceive('put') + ->once() + ->with([$transect->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$al->annotation->image->filename, $al->label->name, 2]); + + $mock->shouldReceive('put') + ->once() + ->with([$al->annotation->image->filename, $al2->label->name, 1]); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + $mock->code = 0; + App::singleton(Exec::class, function () use ($mock) { + return $mock; + }); + + with(new ExtendedReport($project, false))->generateReport(); + } +} diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php new file mode 100644 index 000000000..2e9912039 --- /dev/null +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php @@ -0,0 +1,61 @@ +transects()->attach($transect); + $user = UserTest::create(); + + $al = AnnotationLabelTest::create(); + $al->annotation->image->transect_id = $transect->id; + $al->annotation->image->attrs = ['image' => 'attrs']; + $al->annotation->image->save(); + + // once for the StoredReport and one for the CsvFile + File::shouldReceive('exists') + ->twice() + ->andReturn(false); + + $mock = Mockery::mock(); + $mock->path = 'abc'; + + $mock->shouldReceive('put') + ->once() + ->with([$transect->name]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $al->annotation->image->filename, + $al->annotation_id, + $al->label->name, + $al->annotation->shape->name, + json_encode($al->annotation->points), + json_encode(['image' => 'attrs']), + ]); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + $mock->code = 0; + App::singleton(Exec::class, function () use ($mock) { + return $mock; + }); + + with(new FullReport($project, false))->generateReport(); + } +} diff --git a/tests/Support/Reports/ExportModuleSupportReportsReportTest.php b/tests/Support/Reports/ExportModuleSupportReportsReportTest.php new file mode 100644 index 000000000..9f93ff0f0 --- /dev/null +++ b/tests/Support/Reports/ExportModuleSupportReportsReportTest.php @@ -0,0 +1,59 @@ +setExpectedException(Exception::class); + with(new ReportThrowExceptionStub($project))->generate(); + } + + public function testHandleRegular() + { + $project = ProjectTest::make(); + with(new ReportThrowNoExceptionStub($project))->generate(); + } + + public function testGetUrl() + { + $project = ProjectTest::make(); + $url = with(new ReportThrowNoExceptionStub($project))->getUrl(); + $this->assertTrue(ends_with($url, 'ab_cd_report.txt')); + } +} + +class ReportThrowExceptionStub extends Report +{ + public function generateReport() + { + $this->storedReport = Mockery::mock(); + $this->storedReport->shouldReceive('delete')->once(); + + $this->tmpFiles[] = Mockery::mock(); + $this->tmpFiles[0]->shouldReceive('delete')->once(); + + throw new Exception; + } +} + +class ReportThrowNoExceptionStub extends Report +{ + public function __construct($project) + { + parent::__construct($project); + $this->filename = 'ab_cd'; + $this->extension = 'txt'; + } + + public function generateReport() + { + $this->storedReport = Mockery::mock(); + $this->storedReport->shouldReceive('delete')->never(); + + $this->tmpFiles[] = Mockery::mock(); + $this->tmpFiles[0]->shouldReceive('delete')->once(); + } +} diff --git a/tests/Jobs/ImageLabels/ExportModuleJobsImageLabelsGenerateStandardReportTest.php b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsStandardReportTest.php similarity index 57% rename from tests/Jobs/ImageLabels/ExportModuleJobsImageLabelsGenerateStandardReportTest.php rename to tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsStandardReportTest.php index 0500cbf85..20c3c1a3e 100644 --- a/tests/Jobs/ImageLabels/ExportModuleJobsImageLabelsGenerateStandardReportTest.php +++ b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsStandardReportTest.php @@ -1,11 +1,10 @@ id ]); - // check if the temporary file exists + // once for the StoredReport and one for the CsvFile File::shouldReceive('exists') - ->once() + ->twice() ->andReturn(false); $mock = Mockery::mock(); + $mock->path = 'abc'; $mock->shouldReceive('put') ->once() @@ -59,34 +59,11 @@ public function testGenerateReport() }); $mock = Mockery::mock(); - - $mock->shouldReceive('generate') - ->once() - ->with(Mockery::type(Project::class), Mockery::type('array')); - - $mock->shouldReceive('basename') - ->once() - ->andReturn('abc123'); - - App::singleton(Standard::class, function () use ($mock) { + $mock->code = 0; + App::singleton(Exec::class, function () use ($mock) { return $mock; }); - Mail::shouldReceive('send') - ->once() - ->withArgs([ - 'export::emails.report', - [ - 'user' => $user, - 'type' => 'image label', - 'project' => $project, - 'uuid' => 'abc123', - 'filename' => "biigle_{$project->id}_image_label_report.xlsx", - ], - Mockery::type('callable') - ]); - - - with(new GenerateStandardReport($project, $user))->generateReport(); + with(new StandardReport($project))->generateReport(); } } From 601c7bc4c0fbd447318d20a1c322271e65880c8f Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 23 Aug 2016 15:40:34 +0200 Subject: [PATCH 036/407] Fix controller name --- src/Http/routes.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/routes.php b/src/Http/routes.php index 063c6d7bb..c897b5cab 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -38,6 +38,6 @@ // this route should be public (is protected by random uids) $router->get('api/v1/reports/{uid}/{filename}', [ 'as' => 'download_report', - 'uses' => 'Api\StoredReportController@show', + 'uses' => 'Api\AvailableReportController@show', ]); From 73227dc4ae8a5a4d47899684f981eae5a32167ca Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 25 Aug 2016 14:26:04 +0200 Subject: [PATCH 037/407] Update package requirements --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 9dd219bbd..63abedc97 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "dias/export", "require": { - "dias/projects": "^0.4.1" + "dias/projects": "~1.0" }, "require-dev": { }, From f979f9a9cd06142125a8b818b0aab5eb624eaf4f Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 26 Aug 2016 12:26:33 +0200 Subject: [PATCH 038/407] Add project name to report notification --- src/Notifications/ReportReady.php | 2 +- src/Support/Reports/Report.php | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Notifications/ReportReady.php b/src/Notifications/ReportReady.php index 1427082b2..3e410522b 100644 --- a/src/Notifications/ReportReady.php +++ b/src/Notifications/ReportReady.php @@ -47,7 +47,7 @@ public function toMail($notifiable) { return (new MailMessage) ->subject('Your BIIGLE DIAS report is ready') - ->line("Your {$this->report->getName()} is ready for download!") + ->line("Your {$this->report->getName()} for project {$this->report->getProjectName()} is ready for download!") ->line('The report will be removed once you have downloaded it.') ->action('Download report', $this->report->getUrl()); } diff --git a/src/Support/Reports/Report.php b/src/Support/Reports/Report.php index d89bf26e6..9fead8ed7 100644 --- a/src/Support/Reports/Report.php +++ b/src/Support/Reports/Report.php @@ -97,6 +97,16 @@ public function getName() return $this->name; } + /** + * Get the name of the project belonging to this report + * + * @return string + */ + public function getProjectName() + { + return $this->project->name; + } + /** * Get the download URL for this report. * From b01d766ee2209ff936255207e8dd1291ecb5aa9c Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 29 Aug 2016 10:03:49 +0200 Subject: [PATCH 039/407] Use sys_get_tmp_dir for temporary directory --- README.md | 2 +- src/config/export.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index fd1a94bd0..c70fa558e 100644 --- a/README.md +++ b/README.md @@ -15,4 +15,4 @@ Add the following to the repositories array of your `composer.json`: 3. Run `php artisan export:publish` to refresh the public assets of this package. Do this for every update of the package. 4. Run `pip install -r vendor/dias/export/requirements.txt` to install python requirements. 5. Create a `storage/reports` directory that is read/writable for the web application. The location can be configured via the `export.exports_storage` key. -6. Make sure the `export.tmp_storage` directory is read/writable for the web application (default is `/tmp`). +6. Make sure the `export.tmp_storage` directory is read/writable for the web application (default is `sys_get_temp_dir()`). diff --git a/src/config/export.php b/src/config/export.php index d1b6b2bc1..80f3708a8 100644 --- a/src/config/export.php +++ b/src/config/export.php @@ -5,7 +5,7 @@ /* | Path to the Python executable. */ - 'python' => '/usr/bin/python', + 'python' => '/usr/bin/env python', /* | Paths to the python scripts. @@ -25,5 +25,5 @@ /* | Directory to store temporary files to */ - 'tmp_storage' => '/tmp', + 'tmp_storage' => sys_get_temp_dir(), ]; From 23997cfb352e705cc2d4a273a4ebc04844ec3186 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 29 Aug 2016 10:04:31 +0200 Subject: [PATCH 040/407] Improve creating of temporary CSV file --- src/Support/CsvFile.php | 40 +++++-------------- ...pportReportsAnnotationsBasicReportTest.php | 4 +- ...rtReportsAnnotationsExtendedReportTest.php | 4 +- ...upportReportsAnnotationsFullReportTest.php | 4 +- ...rtReportsImageLabelsStandardReportTest.php | 4 +- 5 files changed, 19 insertions(+), 37 deletions(-) diff --git a/src/Support/CsvFile.php b/src/Support/CsvFile.php index 4f6b941cb..9db0fad8e 100644 --- a/src/Support/CsvFile.php +++ b/src/Support/CsvFile.php @@ -2,6 +2,7 @@ namespace Dias\Modules\Export\Support; +use App; use File; class CsvFile @@ -44,14 +45,19 @@ class CsvFile /** * Create a new CSV file * - * @param string $path File path + * @param string $path File path. If not set, a temporary file will be created. * @param string $delimiter Optional field delimiter * @param string $enclosure Optional string enclosure character * @param string $escape_char Oprional escape character */ - public function __construct($path, $delimiter = ',', $enclosure = '"', $escape_char = '\\') + public function __construct($path = null, $delimiter = ',', $enclosure = '"', $escape_char = '\\') { - $this->path = $path; + if (is_null($path)) { + $this->path = tempnam(config('export.tmp_storage').'/', 'dias-export-csv-'); + } else { + $this->path = $path; + } + $this->delimiter = $delimiter; $this->enclosure = $enclosure; $this->escape_char = $escape_char; @@ -64,17 +70,13 @@ public function __destruct() } /** - * Creates a new CsvFile in the temporary storage + * Creates a new temporary CsvFile * * @return CsvFile */ public static function makeTmp() { - do { - $path = uniqid(config('export.tmp_storage').'/'); - } while (File::exists($path)); - - return app()->make(self::class, [$path]); + return App::make(static::class); } /** @@ -96,26 +98,6 @@ public function delete() File::delete($this->path); } - /** - * Return the basename of this file - * - * @return string - */ - public function basename() - { - return File::basename($this->path); - } - - /** - * Return the dirname of this file - * - * @return string - */ - public function dirname() - { - return File::dirname($this->path); - } - /** * Close the CSV file */ diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php index 197481ed3..154a6e51e 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php @@ -25,9 +25,9 @@ public function testGenerateReport() $al2 = AnnotationLabelTest::create(['annotation_id' => $al->annotation_id]); - // once for the StoredReport and one for the CsvFile + // for the AvailableReport File::shouldReceive('exists') - ->twice() + ->once() ->andReturn(false); $mock = Mockery::mock(); diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php index 32816437e..a87ffafd1 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php @@ -25,9 +25,9 @@ public function testGenerateReport() $al2 = AnnotationLabelTest::create(['annotation_id' => $al->annotation_id]); - // once for the StoredReport and one for the CsvFile + // for the AvailableReport File::shouldReceive('exists') - ->twice() + ->once() ->andReturn(false); $mock = Mockery::mock(); diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php index 2e9912039..2e95da36e 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php @@ -20,9 +20,9 @@ public function testGenerateReport() $al->annotation->image->attrs = ['image' => 'attrs']; $al->annotation->image->save(); - // once for the StoredReport and one for the CsvFile + // for the AvailableReport File::shouldReceive('exists') - ->twice() + ->once() ->andReturn(false); $mock = Mockery::mock(); diff --git a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsStandardReportTest.php b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsStandardReportTest.php index 20c3c1a3e..d0636b034 100644 --- a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsStandardReportTest.php +++ b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsStandardReportTest.php @@ -31,9 +31,9 @@ public function testGenerateReport() ])->id ]); - // once for the StoredReport and one for the CsvFile + // for the AvailableReport File::shouldReceive('exists') - ->twice() + ->once() ->andReturn(false); $mock = Mockery::mock(); From b1b0f959221175e152c02413e4ef5cdb8b0c89fc Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 29 Aug 2016 10:27:39 +0200 Subject: [PATCH 041/407] Rename storedReport to availableReport for consistency --- .../Reports/Annotations/BasicReport.php | 2 +- .../Reports/Annotations/ExtendedReport.php | 2 +- .../Reports/Annotations/FullReport.php | 2 +- .../Reports/ImageLabels/StandardReport.php | 2 +- src/Support/Reports/Report.php | 22 ++++++++++++++----- .../ExportModuleSupportReportsReportTest.php | 8 +++---- 6 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/Support/Reports/Annotations/BasicReport.php b/src/Support/Reports/Annotations/BasicReport.php index abcf7892e..9e6276b4f 100644 --- a/src/Support/Reports/Annotations/BasicReport.php +++ b/src/Support/Reports/Annotations/BasicReport.php @@ -92,7 +92,7 @@ protected function executeScript() }, $this->tmpFiles)); $exec = App::make(Exec::class, [ - 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->storedReport->path} {$csvs}", + 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->availableReport->path} {$csvs}", ]); if ($exec->code !== 0) { diff --git a/src/Support/Reports/Annotations/ExtendedReport.php b/src/Support/Reports/Annotations/ExtendedReport.php index cc10ba602..25ecc0185 100644 --- a/src/Support/Reports/Annotations/ExtendedReport.php +++ b/src/Support/Reports/Annotations/ExtendedReport.php @@ -97,7 +97,7 @@ protected function executeScript() }, $this->tmpFiles)); $exec = App::make(Exec::class, [ - 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->storedReport->path} {$csvs}", + 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->availableReport->path} {$csvs}", ]); if ($exec->code !== 0) { diff --git a/src/Support/Reports/Annotations/FullReport.php b/src/Support/Reports/Annotations/FullReport.php index 5cd39ed1c..a3459540a 100644 --- a/src/Support/Reports/Annotations/FullReport.php +++ b/src/Support/Reports/Annotations/FullReport.php @@ -108,7 +108,7 @@ protected function executeScript() }, $this->tmpFiles)); $exec = App::make(Exec::class, [ - 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->storedReport->path} {$csvs}", + 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->availableReport->path} {$csvs}", ]); if ($exec->code !== 0) { diff --git a/src/Support/Reports/ImageLabels/StandardReport.php b/src/Support/Reports/ImageLabels/StandardReport.php index 18016042b..ca1d74334 100644 --- a/src/Support/Reports/ImageLabels/StandardReport.php +++ b/src/Support/Reports/ImageLabels/StandardReport.php @@ -89,7 +89,7 @@ protected function executeScript() }, $this->tmpFiles)); $exec = App::make(Exec::class, [ - 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->storedReport->path} {$csvs}", + 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->availableReport->path} {$csvs}", ]); if ($exec->code !== 0) { diff --git a/src/Support/Reports/Report.php b/src/Support/Reports/Report.php index 9fead8ed7..71fa2a457 100644 --- a/src/Support/Reports/Report.php +++ b/src/Support/Reports/Report.php @@ -49,7 +49,7 @@ class Report * * @var AvailableReport */ - protected $storedReport; + protected $availableReport; /** * Create a report instance. @@ -63,7 +63,7 @@ public function __construct(Project $project) $this->name = ''; $this->filename = ''; $this->extension = ''; - $this->storedReport = new AvailableReport; + $this->availableReport = new AvailableReport; } /** @@ -76,8 +76,8 @@ public function generate() try { $this->generateReport(); } catch (Exception $e) { - if (isset($this->storedReport)) { - $this->storedReport->delete(); + if (isset($this->availableReport)) { + $this->availableReport->delete(); throw $e; } } finally { @@ -115,8 +115,8 @@ public function getProjectName() public function getUrl() { return route('download_report', [ - $this->storedReport->basename(), - "biigle_{$this->project->id}_{$this->getFilename()}_report.{$this->extension}" + $this->availableReport->basename(), + $this->getDownloadFilename(), ]); } @@ -129,4 +129,14 @@ public function getFilename() { return $this->filename; } + + /** + * Get the filename used for downloading the report + * + * @return string + */ + public function getDownloadFilename() + { + return "biigle_{$this->project->id}_{$this->getFilename()}_report.{$this->extension}"; + } } diff --git a/tests/Support/Reports/ExportModuleSupportReportsReportTest.php b/tests/Support/Reports/ExportModuleSupportReportsReportTest.php index 9f93ff0f0..8697a2a80 100644 --- a/tests/Support/Reports/ExportModuleSupportReportsReportTest.php +++ b/tests/Support/Reports/ExportModuleSupportReportsReportTest.php @@ -29,8 +29,8 @@ class ReportThrowExceptionStub extends Report { public function generateReport() { - $this->storedReport = Mockery::mock(); - $this->storedReport->shouldReceive('delete')->once(); + $this->availableReport = Mockery::mock(); + $this->availableReport->shouldReceive('delete')->once(); $this->tmpFiles[] = Mockery::mock(); $this->tmpFiles[0]->shouldReceive('delete')->once(); @@ -50,8 +50,8 @@ public function __construct($project) public function generateReport() { - $this->storedReport = Mockery::mock(); - $this->storedReport->shouldReceive('delete')->never(); + $this->availableReport = Mockery::mock(); + $this->availableReport->shouldReceive('delete')->never(); $this->tmpFiles[] = Mockery::mock(); $this->tmpFiles[0]->shouldReceive('delete')->once(); From b38b05035f3b616757a65cbb57ddaf232e1dda4f Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 29 Aug 2016 11:53:05 +0200 Subject: [PATCH 042/407] Implement machine readable annotation report (as CSV) References #7 --- composer.json | 1 + .../BasicReportController.php} | 4 +- .../Api/Annotations/CsvReportController.php | 40 ++++++ .../ExtendedReportController.php} | 4 +- .../FullReportController.php} | 4 +- .../StandardReportController.php} | 4 +- src/Http/routes.php | 20 +-- src/Support/Reports/Annotations/CsvReport.php | 121 ++++++++++++++++++ src/Support/Reports/Report.php | 2 +- src/public/assets/scripts/annotations.js | 2 +- src/public/assets/scripts/projects.js | 2 +- .../projects/controllers/ExportController.js | 42 ++++-- .../assets/js/projects/factories/Report.js | 9 +- src/resources/views/projectsShow.blade.php | 26 ++-- ...iAnnotationsBasicReportControllerTest.php} | 6 +- ...ApiAnnotationsCsvReportControllerTest.php} | 6 +- ...notationsExtendedReportControllerTest.php} | 6 +- ...piAnnotationsFullReportControllerTest.php} | 6 +- ...mageLabelsStandardReportControllerTest.php | 20 +++ ...SupportReportsAnnotationsCsvReportTest.php | 71 ++++++++++ 20 files changed, 336 insertions(+), 60 deletions(-) rename src/Http/Controllers/Api/{BasicAnnotationReportController.php => Annotations/BasicReportController.php} (91%) create mode 100644 src/Http/Controllers/Api/Annotations/CsvReportController.php rename src/Http/Controllers/Api/{ExtendedAnnotationReportController.php => Annotations/ExtendedReportController.php} (91%) rename src/Http/Controllers/Api/{FullAnnotationReportController.php => Annotations/FullReportController.php} (91%) rename src/Http/Controllers/Api/{ImageLabelReportController.php => ImageLabels/StandardReportController.php} (88%) create mode 100644 src/Support/Reports/Annotations/CsvReport.php rename tests/Http/Controllers/Api/{ExportModuleHttpControllersApiExtendedAnnotationReportControllerTest.php => Annotations/ExportModuleHttpControllersApiAnnotationsBasicReportControllerTest.php} (55%) rename tests/Http/Controllers/Api/{ExportModuleHttpControllersApiFullAnnotationReportControllerTest.php => Annotations/ExportModuleHttpControllersApiAnnotationsCsvReportControllerTest.php} (61%) rename tests/Http/Controllers/Api/{ExportModuleHttpControllersApiImageLabelReportControllerTest.php => Annotations/ExportModuleHttpControllersApiAnnotationsExtendedReportControllerTest.php} (54%) rename tests/Http/Controllers/Api/{ExportModuleHttpControllersApiBasicAnnotationReportControllerTest.php => Annotations/ExportModuleHttpControllersApiAnnotationsFullReportControllerTest.php} (61%) create mode 100644 tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsStandardReportControllerTest.php create mode 100644 tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php diff --git a/composer.json b/composer.json index 63abedc97..b0ef91955 100644 --- a/composer.json +++ b/composer.json @@ -1,6 +1,7 @@ { "name": "dias/export", "require": { + "ext-zip": "*", "dias/projects": "~1.0" }, "require-dev": { diff --git a/src/Http/Controllers/Api/BasicAnnotationReportController.php b/src/Http/Controllers/Api/Annotations/BasicReportController.php similarity index 91% rename from src/Http/Controllers/Api/BasicAnnotationReportController.php rename to src/Http/Controllers/Api/Annotations/BasicReportController.php index cc2570749..1b834b00a 100644 --- a/src/Http/Controllers/Api/BasicAnnotationReportController.php +++ b/src/Http/Controllers/Api/Annotations/BasicReportController.php @@ -1,6 +1,6 @@ authorize('access', $project); + $this->validate($request, ['restrict' => 'boolean']); + $this->dispatch(new GenerateReportJob( + new CsvReport($project, (bool) $request->input('restrict', false)), + $auth->user() + )); + } +} diff --git a/src/Http/Controllers/Api/ExtendedAnnotationReportController.php b/src/Http/Controllers/Api/Annotations/ExtendedReportController.php similarity index 91% rename from src/Http/Controllers/Api/ExtendedAnnotationReportController.php rename to src/Http/Controllers/Api/Annotations/ExtendedReportController.php index 28fea67b1..bf3074207 100644 --- a/src/Http/Controllers/Api/ExtendedAnnotationReportController.php +++ b/src/Http/Controllers/Api/Annotations/ExtendedReportController.php @@ -1,6 +1,6 @@ 'auth.api', ], function ($router) { - $router->post('projects/{id}/reports/basic', [ - 'uses' => 'BasicAnnotationReportController@store', + $router->post('projects/{id}/reports/annotations/basic', [ + 'uses' => 'Annotations\BasicReportController@store', ]); - $router->post('projects/{id}/reports/extended', [ - 'uses' => 'ExtendedAnnotationReportController@store', + $router->post('projects/{id}/reports/annotations/extended', [ + 'uses' => 'Annotations\ExtendedReportController@store', ]); - $router->post('projects/{id}/reports/full', [ - 'uses' => 'FullAnnotationReportController@store', + $router->post('projects/{id}/reports/annotations/full', [ + 'uses' => 'Annotations\FullReportController@store', ]); - $router->post('projects/{id}/reports/image-labels', [ - 'uses' => 'ImageLabelReportController@store', + $router->post('projects/{id}/reports/annotations/csv', [ + 'uses' => 'Annotations\CsvReportController@store', + ]); + + $router->post('projects/{id}/reports/image-labels/standard', [ + 'uses' => 'ImageLabels\StandardReportController@store', ]); $router->get('transects/{id}/export-area', [ diff --git a/src/Support/Reports/Annotations/CsvReport.php b/src/Support/Reports/Annotations/CsvReport.php new file mode 100644 index 000000000..a16bf37ef --- /dev/null +++ b/src/Support/Reports/Annotations/CsvReport.php @@ -0,0 +1,121 @@ +name = 'CSV annotation report'; + $this->filename = 'csv_annotation_report'; + $this->extension = 'zip'; + } + + /** + * Generate the report. + * + * @return void + */ + public function generateReport() + { + $transects = $this->project->transects() + ->pluck('name', 'id'); + + foreach ($transects as $id => $name) { + $csv = CsvFile::makeTmp(); + $this->tmpFiles[$id] = $csv; + + $query = $this->query($id); + + $query->chunkById(500, function ($rows) use ($csv) { + foreach ($rows as $row) { + $csv->put([ + $row->annotation_label_id, + $row->label_id, + $row->label_name, + $row->user_id, + $row->firstname, + $row->lastname, + $row->image_id, + $row->filename, + $row->shape_id, + $row->shape_name, + $row->points, + $row->attrs, + ]); + } + }, 'annotation_labels.id', 'annotation_label_id'); + + $csv->close(); + } + + $zip = App::make(ZipArchive::class); + $open = $zip->open($this->availableReport->path, ZipArchive::CREATE); + + if ($open !== true) { + throw new Exception("Could not open ZIP file '{$this->availableReport->path}'."); + } + + try { + foreach ($transects as $id => $name) { + $zip->addFile( + $this->tmpFiles[$id]->path, + $id.'_'.Str::slug($name).'.csv' + ); + } + } finally { + $zip->close(); + } + } + + /** + * Assemble a new DB query for a transect. + * + * @param int $id Transect ID + * + * @return \Illuminate\Database\Query\Builder + */ + protected function query($id) + { + return DB::table('annotation_labels') + ->join('labels', 'annotation_labels.label_id', '=', 'labels.id') + ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') + ->join('images', 'annotations.image_id', '=', 'images.id') + ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') + ->join('users', 'annotation_labels.user_id', '=', 'users.id') + ->select([ + 'annotation_labels.id as annotation_label_id', + 'labels.id as label_id', + 'labels.name as label_name', + 'users.id as user_id', + 'users.firstname', + 'users.lastname', + 'images.id as image_id', + 'images.filename', + 'shapes.id as shape_id', + 'shapes.name as shape_name', + 'annotations.points', + 'images.attrs', + ]) + ->where('images.transect_id', $id) + ->when($this->restricted, function ($query) use ($id) { + return $query->whereNotIn('annotations.id', $this->getSkipIds($id)); + }) + ->orderBy('annotation_labels.id'); + } +} diff --git a/src/Support/Reports/Report.php b/src/Support/Reports/Report.php index 71fa2a457..a44d6d209 100644 --- a/src/Support/Reports/Report.php +++ b/src/Support/Reports/Report.php @@ -137,6 +137,6 @@ public function getFilename() */ public function getDownloadFilename() { - return "biigle_{$this->project->id}_{$this->getFilename()}_report.{$this->extension}"; + return "biigle_{$this->project->id}_{$this->getFilename()}.{$this->extension}"; } } diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index 6ad7f800c..1b9e1643b 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1 @@ -angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature})["catch"](function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n["delete"]({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]),angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e["delete"]=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]); \ No newline at end of file +angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e["delete"]=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature})["catch"](function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n["delete"]({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]),angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]); \ No newline at end of file diff --git a/src/public/assets/scripts/projects.js b/src/public/assets/scripts/projects.js index 8d6462925..262ac228c 100644 --- a/src/public/assets/scripts/projects.js +++ b/src/public/assets/scripts/projects.js @@ -1 +1 @@ -angular.module("dias.projects").factory("Report",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/projects/:project_id/reports/:type",{},{getBasic:{method:"POST",params:{type:"basic"}},getExtended:{method:"POST",params:{type:"extended"}},getFull:{method:"POST",params:{type:"full"}},getImageLabel:{method:"POST",params:{type:"image-labels"}}})}]),angular.module("dias.projects").controller("ExportController",["$scope","Report","msg","PROJECT",function(e,t,n,a){"use strict";var r=!1,o={"basic annotation":t.getBasic,"extended annotation":t.getExtended,"full annotation":t.getFull,"image label":t.getImageLabel},s=["basic annotation","extended annotation","full annotation"],i=function(){r=!0},c=function(e){r=!1,n.responseError(e)};e.selected={type:"basic annotation",restrict:!1},e.canBeRestricted=function(){return s.indexOf(e.selected.type)!==-1},e.requestReport=function(){if(e.selected.type){var t={};e.canBeRestricted()&&(t.restrict=e.selected.restrict?"1":"0"),o[e.selected.type]({project_id:a.id},t,i,c)}},e.isRequested=function(){return r}}]); \ No newline at end of file +angular.module("dias.projects").controller("ExportController",["$scope","Report","msg","PROJECT",function(e,t,n,o){"use strict";var a=!1,r=["basic annotation","extended annotation","full annotation","csv annotation","image label"],s=[t.getBasic,t.getExtended,t.getFull,t.getCsv,t.getImageLabel],i=[0,1,2,3],c=function(){a=!0},d=function(e){a=!1,n.responseError(e)};e.selected={index:0,option:"0",restrict:!1},e.canBeRestricted=function(){return i.indexOf(e.selected.index)!==-1},e.requestReport=function(){if(void 0!==e.selected.index){var t={};e.canBeRestricted()&&(t.restrict=e.selected.restrict?"1":"0"),s[e.selected.index]({project_id:o.id},t,c,d)}},e.isRequested=function(){return a},e.getSelectedName=function(){return r[e.selected.index]},e.$watch("selected.option",function(t){e.selected.index=parseInt(t)})}]),angular.module("dias.projects").factory("Report",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/projects/:project_id/reports/:type",{},{getBasic:{method:"POST",params:{type:"annotations/basic"}},getExtended:{method:"POST",params:{type:"annotations/extended"}},getFull:{method:"POST",params:{type:"annotations/full"}},getCsv:{method:"POST",params:{type:"annotations/csv"}},getImageLabel:{method:"POST",params:{type:"image-labels/standard"}}})}]); \ No newline at end of file diff --git a/src/resources/assets/js/projects/controllers/ExportController.js b/src/resources/assets/js/projects/controllers/ExportController.js index 7f81abbbe..bc64e3916 100644 --- a/src/resources/assets/js/projects/controllers/ExportController.js +++ b/src/resources/assets/js/projects/controllers/ExportController.js @@ -10,20 +10,25 @@ angular.module('dias.projects').controller('ExportController', function ($scope, var requested = false; - var types = { - 'basic annotation': Report.getBasic, - 'extended annotation': Report.getExtended, - 'full annotation': Report.getFull, - 'image label': Report.getImageLabel - }; - - // all reports that can have the "restrict to export area" option - var restrictable = [ + var names = [ 'basic annotation', 'extended annotation', - 'full annotation' + 'full annotation', + 'csv annotation', + 'image label' + ]; + + var resources = [ + Report.getBasic, + Report.getExtended, + Report.getFull, + Report.getCsv, + Report.getImageLabel ]; + // all reports that can have the "restrict to export area" option + var restrictable = [0, 1, 2, 3]; + var handleSuccess = function () { requested = true; }; @@ -34,16 +39,17 @@ angular.module('dias.projects').controller('ExportController', function ($scope, }; $scope.selected = { - type: 'basic annotation', + index: 0, + option: '0', restrict: false }; $scope.canBeRestricted = function () { - return restrictable.indexOf($scope.selected.type) !== -1; + return restrictable.indexOf($scope.selected.index) !== -1; }; $scope.requestReport = function () { - if (!$scope.selected.type) return; + if ($scope.selected.index === undefined) return; var data = {}; @@ -51,11 +57,19 @@ angular.module('dias.projects').controller('ExportController', function ($scope, data.restrict = $scope.selected.restrict ? '1' : '0'; } - types[$scope.selected.type]({project_id: PROJECT.id}, data, handleSuccess, handleError); + resources[$scope.selected.index]({project_id: PROJECT.id}, data, handleSuccess, handleError); }; $scope.isRequested = function () { return requested; }; + + $scope.getSelectedName = function () { + return names[$scope.selected.index]; + }; + + $scope.$watch('selected.option', function (option) { + $scope.selected.index = parseInt(option); + }); } ); diff --git a/src/resources/assets/js/projects/factories/Report.js b/src/resources/assets/js/projects/factories/Report.js index 44a2d5d08..1008a77f4 100644 --- a/src/resources/assets/js/projects/factories/Report.js +++ b/src/resources/assets/js/projects/factories/Report.js @@ -23,9 +23,10 @@ angular.module('dias.projects').factory('Report', function ($resource, URL) { "use strict"; return $resource(URL + '/api/v1/projects/:project_id/reports/:type', {}, { - getBasic: {method: 'POST', params: {type: 'basic'}}, - getExtended: {method: 'POST', params: {type: 'extended'}}, - getFull: {method: 'POST', params: {type: 'full'}}, - getImageLabel: {method: 'POST', params: {type: 'image-labels'}} + getBasic: {method: 'POST', params: {type: 'annotations/basic'}}, + getExtended: {method: 'POST', params: {type: 'annotations/extended'}}, + getFull: {method: 'POST', params: {type: 'annotations/full'}}, + getCsv: {method: 'POST', params: {type: 'annotations/csv'}}, + getImageLabel: {method: 'POST', params: {type: 'image-labels/standard'}} }); }); diff --git a/src/resources/views/projectsShow.blade.php b/src/resources/views/projectsShow.blade.php index 531bdd210..51ce2b276 100644 --- a/src/resources/views/projectsShow.blade.php +++ b/src/resources/views/projectsShow.blade.php @@ -4,15 +4,16 @@
- The report will be prepared for you. You will get notified by email when it is ready. + The report will be prepared for you. You will get notified by email when it is ready.
- + + + + +
@@ -23,17 +24,20 @@
-
-
+
+
The basic annotation report contains graphical plots of abundances of the different annotation labels for each transect of this project (as PDF).
-
+
The extended annotation report lists the abundances of annotation labels for each image in all transects of this project (as XLSX).
-
+
The full annotation report lists the labels, shape and coordinates of all annotations in all transects of this project (as XLSX).
-
+
+ The CSV annotation report is intended for subsequent processing and lists the annotation labels of all transects of this project at the highest possible resolution (as CSV files in a ZIP archive). +
+
The image label report lists the image labels of all images of all transects of this project (as XLSX).
diff --git a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiExtendedAnnotationReportControllerTest.php b/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsBasicReportControllerTest.php similarity index 55% rename from tests/Http/Controllers/Api/ExportModuleHttpControllersApiExtendedAnnotationReportControllerTest.php rename to tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsBasicReportControllerTest.php index 582c5bcc9..dc90e849a 100644 --- a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiExtendedAnnotationReportControllerTest.php +++ b/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsBasicReportControllerTest.php @@ -2,19 +2,19 @@ use Dias\Modules\Export\Jobs\GenerateReportJob; -class ExportModuleHttpControllersApiExtendedAnnotationReportControllerTest extends ApiTestCase +class ExportModuleHttpControllersApiAnnotationsBasicReportControllerTest extends ApiTestCase { public function testStore() { $id = $this->project()->id; - $this->post("api/v1/projects/{$id}/reports/extended") + $this->post("api/v1/projects/{$id}/reports/annotations/basic") ->assertResponseStatus(401); $this->expectsJobs(GenerateReportJob::class); $this->beGuest(); - $this->post("api/v1/projects/{$id}/reports/extended") + $this->post("api/v1/projects/{$id}/reports/annotations/basic") ->assertResponseOk(); } } diff --git a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiFullAnnotationReportControllerTest.php b/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsCsvReportControllerTest.php similarity index 61% rename from tests/Http/Controllers/Api/ExportModuleHttpControllersApiFullAnnotationReportControllerTest.php rename to tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsCsvReportControllerTest.php index 0c8dcf80d..1c033b3b8 100644 --- a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiFullAnnotationReportControllerTest.php +++ b/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsCsvReportControllerTest.php @@ -2,19 +2,19 @@ use Dias\Modules\Export\Jobs\GenerateReportJob; -class ExportModuleHttpControllersApiFullAnnotationReportControllerTest extends ApiTestCase +class ExportModuleHttpControllersApiAnnotationsCsvReportControllerTest extends ApiTestCase { public function testStore() { $id = $this->project()->id; - $this->post("api/v1/projects/{$id}/reports/full") + $this->post("api/v1/projects/{$id}/reports/annotations/csv") ->assertResponseStatus(401); $this->expectsJobs(GenerateReportJob::class); $this->beGuest(); - $this->post("api/v1/projects/{$id}/reports/full") + $this->post("api/v1/projects/{$id}/reports/annotations/csv") ->assertResponseOk(); } } diff --git a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiImageLabelReportControllerTest.php b/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsExtendedReportControllerTest.php similarity index 54% rename from tests/Http/Controllers/Api/ExportModuleHttpControllersApiImageLabelReportControllerTest.php rename to tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsExtendedReportControllerTest.php index 9347580e0..af91de52a 100644 --- a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiImageLabelReportControllerTest.php +++ b/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsExtendedReportControllerTest.php @@ -2,19 +2,19 @@ use Dias\Modules\Export\Jobs\GenerateReportJob; -class ExportModuleHttpControllersApiImageLabelReportControllerTest extends ApiTestCase +class ExportModuleHttpControllersApiAnnotationsExtendedReportControllerTest extends ApiTestCase { public function testStore() { $id = $this->project()->id; - $this->post("api/v1/projects/{$id}/reports/image-labels") + $this->post("api/v1/projects/{$id}/reports/annotations/extended") ->assertResponseStatus(401); $this->expectsJobs(GenerateReportJob::class); $this->beGuest(); - $this->post("api/v1/projects/{$id}/reports/image-labels") + $this->post("api/v1/projects/{$id}/reports/annotations/extended") ->assertResponseOk(); } } diff --git a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiBasicAnnotationReportControllerTest.php b/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsFullReportControllerTest.php similarity index 61% rename from tests/Http/Controllers/Api/ExportModuleHttpControllersApiBasicAnnotationReportControllerTest.php rename to tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsFullReportControllerTest.php index fe3d22836..0b93a298d 100644 --- a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiBasicAnnotationReportControllerTest.php +++ b/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsFullReportControllerTest.php @@ -2,19 +2,19 @@ use Dias\Modules\Export\Jobs\GenerateReportJob; -class ExportModuleHttpControllersApiBasicAnnotationReportControllerTest extends ApiTestCase +class ExportModuleHttpControllersApiAnnotationsFullReportControllerTest extends ApiTestCase { public function testStore() { $id = $this->project()->id; - $this->post("api/v1/projects/{$id}/reports/basic") + $this->post("api/v1/projects/{$id}/reports/annotations/full") ->assertResponseStatus(401); $this->expectsJobs(GenerateReportJob::class); $this->beGuest(); - $this->post("api/v1/projects/{$id}/reports/basic") + $this->post("api/v1/projects/{$id}/reports/annotations/full") ->assertResponseOk(); } } diff --git a/tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsStandardReportControllerTest.php b/tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsStandardReportControllerTest.php new file mode 100644 index 000000000..4c4c0a409 --- /dev/null +++ b/tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsStandardReportControllerTest.php @@ -0,0 +1,20 @@ +project()->id; + + $this->post("api/v1/projects/{$id}/reports/image-labels/standard") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateReportJob::class); + $this->beGuest(); + $this->post("api/v1/projects/{$id}/reports/image-labels/standard") + ->assertResponseOk(); + } +} diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php new file mode 100644 index 000000000..f54619ab2 --- /dev/null +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php @@ -0,0 +1,71 @@ + 'My Cool Transect', + ]); + $project->transects()->attach($transect); + + $al = AnnotationLabelTest::create(); + $al->annotation->image->transect_id = $transect->id; + $al->annotation->image->attrs = ['image' => 'attrs']; + $al->annotation->image->save(); + + // for the AvailableReport + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + $mock->path = 'abc'; + + $mock->shouldReceive('put') + ->once() + ->with([ + $al->id, + $al->label_id, + $al->label->name, + $al->user_id, + $al->user->firstname, + $al->user->lastname, + $al->annotation->image_id, + $al->annotation->image->filename, + $al->annotation->shape->id, + $al->annotation->shape->name, + json_encode($al->annotation->points), + json_encode(['image' => 'attrs']), + ]); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$transect->id}_my-cool-transect.csv"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + with(new CsvReport($project, false))->generateReport(); + } +} From a70b4d6894c5aafa44825a2275230b926d6af42a Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 29 Aug 2016 14:08:44 +0200 Subject: [PATCH 043/407] Add manual page that describes the schema of the available reports --- gulpfile.js | 1 + src/ExportServiceProvider.php | 1 + src/Http/Controllers/TutorialController.php | 23 ++++ src/Http/routes.php | 4 + src/public/assets/images/demo_basic_plot.png | Bin 0 -> 26587 bytes src/public/assets/scripts/annotations.js | 2 +- .../manual/tutorials/reports-schema.blade.php | 118 ++++++++++++++++++ src/resources/views/manualTutorial.blade.php | 7 ++ src/resources/views/projectsShow.blade.php | 3 +- 9 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 src/Http/Controllers/TutorialController.php create mode 100644 src/public/assets/images/demo_basic_plot.png create mode 100644 src/resources/views/manual/tutorials/reports-schema.blade.php create mode 100644 src/resources/views/manualTutorial.blade.php diff --git a/gulpfile.js b/gulpfile.js index d4f786bd0..78d9a3eb0 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -11,6 +11,7 @@ elixir(function (mix) { // mix.sass('main.scss', 'public/assets/styles/main.css'); mix.angular('resources/assets/js/projects/', 'public/assets/scripts', 'projects.js'); mix.angular('resources/assets/js/annotations/', 'public/assets/scripts', 'annotations.js'); + mix.task('publish', 'public/assets/**/*'); }); diff --git a/src/ExportServiceProvider.php b/src/ExportServiceProvider.php index eeda64493..a7305a07c 100644 --- a/src/ExportServiceProvider.php +++ b/src/ExportServiceProvider.php @@ -39,6 +39,7 @@ public function boot(Modules $modules,Router $router) $modules->addMixin('export', 'projectsShowScripts'); $modules->addMixin('export', 'annotationsSettings'); $modules->addMixin('export', 'annotationsScripts'); + $modules->addMixin('export', 'manualTutorial'); } /** diff --git a/src/Http/Controllers/TutorialController.php b/src/Http/Controllers/TutorialController.php new file mode 100644 index 000000000..c00e8351a --- /dev/null +++ b/src/Http/Controllers/TutorialController.php @@ -0,0 +1,23 @@ +exists('export::manual.tutorials.'.$name)) { + return view('export::manual.tutorials.'.$name); + } else { + abort(404); + } + } +} diff --git a/src/Http/routes.php b/src/Http/routes.php index 2dabf8e46..0d8290b60 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -45,3 +45,7 @@ 'uses' => 'Api\AvailableReportController@show', ]); +$router->get('manual/tutorials/export/{name}', [ + 'as' => 'manual-tutorials-export', + 'uses' => 'TutorialController@show', +]); diff --git a/src/public/assets/images/demo_basic_plot.png b/src/public/assets/images/demo_basic_plot.png new file mode 100644 index 0000000000000000000000000000000000000000..d002ae91750c275fae977c9752a09065e3ceac1a GIT binary patch literal 26587 zcmdSBbzGG1yDmC57L19KVu2!HfOI&hh)S1|BGMpAH+;X2qM#rGB1(vqv>=^|0tO`= z0wPFvOYZB%-#TlpefIjC^V@r^efF6@40vbe$@{+Iex3*NvQk?&F>E4{NL!^ZoK+-| z)((+KtMh19<0m4y-`Vij8Y_ylG7Sw)ONZPK{CBVQxhvL676#UKx|aGR!o+XoM}Iz3ZW2^SybJ6`ti-Tf_gkG;C?o{?UYvi+~M zXQNL3dS$&Mowvr{>I-{hWKG`<>7o;N_3BefUze>tbMAmlG3$PZRcR8;m*1^Dw^o18 zdtL6byh8D|3W2g)d++U?P8gf`{lW0TTGf+2Y(38})#X$hi3Ogt$iLO|8YZ#(`S4 zP3+>oKQB5r__!@}K4RpL&Xf}#N=tSbGEJ{M!o#DJ?>O}(fKx3|T}4%OHzn(*C+GUD z3~9+HI5|0WTz~&E40D-o!XHz0YMD1%b8H6cpK@u~4%C}hy*xv&ZQmi-6YS^fd;8tM z8#Vqm`_6k?8K;mu=P4=_Bqs+50VQ z{(Fz(WUs%HQ;-+(tmU*uGg+={u$3fj6@BW%+UGUOb z_*o#9>oC!sqE|XRaHm1rX=usqv1Hz}4SC0m>BMG#Ob@jTSQ?net0oFH4qTm4-XLtb zl~XN=iPs22bEmr^#Oc1|D)NyTy;Wj4U%q@P7!OD;d%@2`tx7j-C|vl(GoP(6{ca82 z&fU8+EZSX@rFzPOl&)UQ4jXao@|AkZqoY0Y+GTE1urJaNgX9|+n2E7h({ZtBO4Sbt z2)Go;y;x=_Hc_;hr>ncW-l9u2QGIH#$tu}H$Zj~VVNoN)OmL#?)aFf_C^U&0nPLM8 zZ@opQ8+UW5n>D`a_!X$*+7}f_I~(O;eic-Me?$ zsJ27RXm8T=#;aGa+H90BRGwlHG{-N|(=BXfO{u@g9;^2$Iv#r`rF{GLSk~=M7Kbih zG9^sRg~e$wMbAgnHra4`pkXAvL7Vf)k!*~2a^CotW_E1F_ND1eHtG&Jkufx@2b&r+tz>9AnoW}vXQG7tl}Wca$|ly1Dx_KUR8+bxP4sPl5f-*QStBgG&~aNVm>+&2WYgdKEn>!z?oGz` z@83C-vR>If*vjU-fZnw)FSbuk-=Pz`68MebBifT<-B(R6`rQ-eHq&a?z>&g6^^+Ac z{&;`e{G9zA&C8_O`&Qz+e;hExc<7ZpbQsR=q0rn}zm-@gCV?pohh?5m_J}Y4#=7U? z;P_NonS6VazwoyVO}O1iTiEY1!)d;vZBk6P@28kDp16J%gZSm^*MV7s?(q18gy0i; z=V?0bAMnmvoNkFPELOMka6R!NsxDql{CAfh2D@UoH80-;!Csb*v_wBy&4=GlnoKG8UFs;FKnSp zds%Fq`&oojR<0NP7A&HUll^t^k~AMY=ybAfb@)oLIJ}e7y7hh?vyip@NdAoLd`tV% zWQ=&CYcEFYnYf!PO~;c<+_5vY@28X$6ntHMCVL}%#6;R>yZqz|mgWZ7s1udqZsN)A z!#Xv2&o<8C?bC@CE~eNreA9GH0=F>VVfe)O>76@w20Ql0suTu`VUzXM#Je^{Ncr%$ zJHK^3pcceuTECV5`{>gANP}2yuHDG5uYq>`wXqfAdr6Oqt%^ykY|9Hh;vTfj&$&~= z76%Q9|20HmeWa$Qa_5Z}k&7(c=36{HJ^MYn%U@(-2|j%IFxhn~{*kYP`0is@9@CyO zseLWEHzpzBn9JAU5x3=e?ah}14qbX0$zLHl^L?@;ccftcyH%wqwy?_AE+%<&N7`Zh zGduB}NzbL2ZECL?hS*>wMCbn8%#(MkJIGLM^xYa2c0)tMnW2_UlQS>9nT4klqe~vD zZs4S-56#eunjwK^b-9j`QA3K}#iw+7XeFkz?HJNE_JtHu|kHI$PJ! z>hLQ-EpAvtHdr7fAtAv#j2R2(Xuw5r4<^d&MA)+CVw&!Udw0qA=vYH9MyV!T@fC}i zRy@JC&{DXlF;}*jocoqXUthm)zICM9YUfPvx6b^Tw)oP0eKvOL=_V>J>sygUT>F*6 z=2}Nw)f5yI<_{pp*v_S?X*>KXrq^NOGf|$B^728%(y++4Nv6-xF|vP z<9}{GYhpeHG|u9w6$GpWcZ^-F7$MFC+QRx%*8CV zFVDO6`ILo<=B|>$5|&+Ntjl+r!Q3|N8O7!+?0#-~+M-Rfly$57`Cr-B-F>KbZ4QQw zZ*(yiH)%SMmClQ{4T%h;)vVvL=Z)i3zo1ojuvLX%Ur2J{lA~jFL`kT>5s`&5CHO7c z7D^Z`1{+fjP>*BhU^<0)c#_)=1g^Z)7E@on`bnf!=#!q@G&fjYmxs6}56Qgj)r z$sNw&47iwXTx0M(>-N^YnNI;iW;=Zv8U66#?7DWW%$@=kkr?+sDTC(=u zy?Y1h6PyZWoL|3usSqB?8%WCK z78hT}=AW&>zWuA^XKHZl4pKf-0ww|u690%Jo*%` zfPnnjpI*yLBg?K|xiV`bzQ{i3?VE33cCBlUiB;~ODO`4;(Ji8GoG)Co?^RDTI)VR8 zPGg31u_Wx;U1kveiB7tX-eJA`;&dX5-cp~OTR+n1l&IvrE!p_+nyt1y6(Mrsi<3l9 zuy7gBP+|9f`t%-IF_y@p`ao@%qG%oj4(8;X{y2q*^C7m)#^=tRLnlVMKKsoGJ(3St zpZ(0dC8M<=t%Of|w`g$xGZWx5i^4@)8r|8^ju2tHBo|9r*$TieJLFR$j~9FHlJuZW z)N`MEq?tZh>$cS67J92_qhavv^UQ^`?jPiQ*3Dk%t&49cMVE~UQ(alsnBFXGr8d|3A=ZT-8_b*2 zeiOUWChg_RYk;Wf8w3|8YijJoYE1kaj~YfbfD&8M=;n z=`bP3RfS8kBb|QSA$O2@)5{=%neSEvGDR9A7bRx4%?(+&2?tzc9^BXWG(dZvcd^$1 zNN0NLdz zh{JNB!PeaF2Cp0g77;}>VWE%8W*m_7@+-+fY zjE%}HY%7ADyj8&R>r*Z{vEN;jwsqfS*{H~zk^FI?XA;9L+6(%2`@1IDEI+R;7FmdM ztzMk`5NGp1J;Tgl&-se-^8B7qr%jtSAuL3nst`D^xa^P6Rtkjp6{s9I39D0OW)F!s zG@B#25SI+HG6RRp@9|-MUXC$#t7|E2}iQEzh`# zzxFZI*Ov(vI6=Jy+JInZc;kkq^H}kt?P)hEjHvjO~lH%#0?)X zG*}v_d(nR>Pt~QhpxMA{H&?Z22KUVH^X6iavbfN(Hjtfy3h7EgCW^r8Be8V1yLQM5 z=zj4(f>gtG?3nZ9Hz@+jPMR+haSYKu!D$PLL9V7h1?gG2?tli!n76=w(Riu305%fC z$7d(>XrsPFhuxDA_ge_6bnbqp=WYD(v5oSS!0oAaF?G-@U5mIlV=a6rXWyeZ{R@&b zD#=Ew$>nwVzq?=btUbkS|@G9%Zgq!q?up$AzdQ9~v2WKkMkD z`2kq(1VAbX3_Y4Ev;5TxL1}2<28lK%x=znjqrln0)^^&})o0a978B*BJC5&WYn9}f z1ubv17r4w%4>=X@QsY%GSp#&anP#Nmn5$Fhx>aBtNbC8{I8mqR!PZ>6x}~@yZo7H3 zHTA|C(}3F!=BF%6hsN=Scsa}xTn(v!j_sIMjx{!6x?CeZ_XC|c6Xny_ukns$!qh5^ zZQKq9+b$QusamD^nGse>W14ZzD!KJPjvIN3+9FUD&ebK~%o{6tTPZgGegi8AlUoyr zOr+#0UVfn9AfUmVFKtM88&vdJ-4@2cj__;l#Vcl=4okm#W+vQ+i7luSuX>k^z-%L5 zxy6HwAW}GF+J$Fb76)|XEE?>q_=Sb%`{R>o*{~xq%oa&w?~96x;(BBUmZ+n;xzA+e zb8^&_l`n^iWKWmZjkwO_3fm2DVbcURt{aI`OWdO=FJI+;zye?-*^Pf2g@cpx(u}U# zzEwv1pa0Ae-b~NEki0yXJUI=-MZhI97WeLckkCQarBM%Xl&67#?dSy?mB=_ZBS##; zv{~(c{1vCety3V9KlbAeovNEd7n+!a2KgURI(_rI08&o4qz4PS4b(uxmN!+e!Ks=s zi{OFSD(68ydGe$|MX$!$*@dk?^{uryQH{zmr$CIv9IU?OA$93|@2tLvYi90C8@Wu$*$g#LQFqAN zqn{(lnxKf&;08D5nnpljT|khMXFk!1PFDH2PDWhf$)DV;Gh2lCULB_rKe>djn#yfo zyy>Xk>BXJXdt7rjiS}5X^3eBetB#_(#Nzy(J%NSb=e>p;6<4|sGIR5Zd1;^2&abvy^F;pU^M%tIJxs9eFnnp=I zJ8iDMc>Z;wYwXgPkDGG&>JVRFgleBqQ76@Mw(p>@^g7Nd(=o#U$IbDq1WcAcUjVce zckj#R&%YZ>#ZF^y_ghGX-7eW%TwFYrD?s8+_%NqAhFl)zJpNh#>r)_rA$Rsn3 z@`a(y_5%EHGR~32dkP(QyGTR(Y z>yCEKj}xDS6-c0zo4G?7cgi~8`+s^7d|+t zXlmvGJ0ivu0EDqo^YZc_U7TpW(f{i8>t1jcs1f{7-4Gl{lw<{ey?iPdmGk7ulU!|a22zKp>s%>1BeD$WEHY8H6hDZG?;#gqXRG-HlX&U4)YAl}8}(*v z>?Y;YZnio?(3)DZ&$S(*o$Weh zg|J~oaNN4~xtWn=EM{jQor#`Go)t+$Ze#?o)I78Gv{iSR+ug5a3!vQM_;-Z2P#lXO z^jjm>{u;d*A6Sd;(bcJ=@>*GYH^0-Z&l1h(kB!XdUJPu@1}HsWP9ib+pTZR5t1bww zBMmBbPB+H2ubUVjH(`~TX~aSc^!JYpd?J1p3twdN49530A%oLNqq1&<$ysh0-kA#rpO!UD4I;z>=^VOesCgOcip#9^bHK4|#;uPfQW%>{&oS zUDTz($UC>LA<7YA3J^h<^<&3o@N>+a$>8NEMR4r7*qBgtMa3r}At4vu^fSzeYd~7M zXc5V2y0tF^eCOsni(?!dMw}`URqDzgQ zyEwV?C#wynOCMHOSFd;2l@`uBy!H+l&Ls=8?^!9+-?lQIrjo}eCKxf0o0*4P~SVKn;Lc zaqE*fybBWRuBpKk$X%c3#rtf9K+NJqiQHTlgkhWmc0hW%y}UR>peZ6PAi-mnMuCZ@ zp{{xh4;wuTLr>g&?wxl_5}+Oj2m$hoMBqX|dxlY4_&ovQUgFI>Uv{d}8mnKokdvLA z{Q&Xm1f?`<^uwFVMzg<8o)pF}tSxoB_t`@qwyf|$>2hQ@wOGia!4fIHh zn1)tk=pSCYJtCs;)x4LW?t%rgQPJy3(NBj{T?ciCQXa*`m7ezf3YV(Nj5odLm-iub z_CI!Y{K_KN@V@yy(UWOXca%DsUFk9m{quqlEe1FN>vn4N1DyvM8mV7Jsz-Od9z6s* z?bEieI+5}BV`0xKNYlnVCCRD%vH<@M{=7lgjDJlF6c*6hhsrzC0m+~7>fiw6Y-;qk3(gKhc3eaDr*$DvkwKs+G%>-Jo`jDkZy{_u_)N^jktRGf_2mDsf!n8ckw`CB z@nOOi|5H4-8;6-+{)M2+l|Kgg3oJym={Wj71_)Xs%^u=!?V11I57Xa&{|$MQOi9+x zKY8kf#-$A~15BD%#~CS& z`A&A#SEnEQUW|HDQANUZSy@_AXbv4Z1lMb2g&B!GSML~i{on3>N*h$KVrT@mSy{?z zS~e;-Z{DoFjaj;$4wV8LkSO&HGD+my!SL*cKKwE!_c_8q&L3X9$S4zyTa;pOQoy|w&( zWTsCM{2npG7lhW5&Pw~NGqN3byyxv`=GPGIQoWJ1Pqo_t(eOXllqcpvbmy*Jq6?!R z2niBg%SYhneUJk!aDMpD7li0BhBD`Ba#-ifEnFu!q3Xd2tOFy5+75GXnHl)`?{%A> zR3Ph0D1Cz<_sRDFobWzGCsEim2$h64RS)Qe_rCxemzKgFe<^LGE;?afC~fj1=^xbZEJp)LXR*Qiqta@!b!HOV2dIvjXt_0Yjn>Ev~+b zhmE#Bzv;up%^fOm`}+CwCEzuo*4Ra)=bq8&!?FR8;Kn*j>38lV-Ul&Cn%FlanPOyA zC9jR z4MQEG;bW*6swyiJ(jTE95M#^Z(sya<6M>y3R4aQtThdMWZ~b_8<`2oKj+6$1ofoqD z?>P>{IA)4HG;Vlg*H*RDkM^rO_{&a!qYd*EpP8$=6hW?w$4 z6V&F7a!SE+bKxZ_=;57!VmEzcq7?Z~Pdlcq`qkBSqjnsykaw0IbIU6ZUUPZqVt}8Y zpLLRGt<_?qkO?NiG2+deH&Q+3?D2R#a3ZrJUmD&kQd?jy5V; zPsb8`)1)ro=~L9AaQTWj)qy@?{`(#^)4wt?guB8x%Gi==p_5A#^2pNzE+LsDr@T!| z|xYJ|i zKGgWJ%Rv(7I(jr`F!gKPbh1X~Fv<_MvIPT-BfJQ7g`vsrKAw&h6SW{)aMAmnqQNHt z*e79NzfCTf>z}lZkqvQ$hN)xy?Hr-Hfu^{@1RjPE_U+X~l6M+&m&@hl*yDd`;TG3;7w)3Lz;0)+?G0Ry0r@ zb!oA{aT$p%vH%@q%E1SVL8n*&^T=e8ozA_tzWXFrC+if(1=tgdkA=ad;5zr8h+#(?KmAi6zdOU#3>zD< zkVY3(2#`o*{_qSq%_28GJtkA&s{g^z`A{g{rlwM8kg}x>3EXl8kr(qRNrNCoC@a;s z#cIDh4!-+q&D*zc{bcb7IUn#9!R#*4K+u&9BmaEe+8^BUVJm+c0kw|9HUbAa#EfmW zPZeB?$kviHP@tp@nf~Hl& z_>Z=>&(&u_3a8K@;r3%B|A90?oGhF>8QG`=dR#%$^Kjew2#miIAMa51w`l6wV>~<-*z;^uB=Z_ManU{jR+F2ewvh1%s2_tz?rTHLMnT$2Z!j)*{>!@Z z9~VfjOqVR|Zj`~0ivUdv+)U`*7cN0G`~w z=ob_kK&3uP%UO^g;p-po6BJj87zQ3;VW-;H3M-)map?V@JsO$a3P5=u#*PEjVdGp>n_v?7i2AS4|${1nx(5O$FH?==oRb)$D&r9DVLB>xLA>HkDI>dLlO zy>jJQNC-0paUCLxx)5TTC_$li?fRF9K?od#+SW#t$f3L~)NBu?#oiodSfroqMWJGC zjP*Pr#jJ#uTO4?%0Qx_fVr*3qX>(EVOQeF2wzb?($1S%%;99eR3Ze=PsF|o&31vNZ&E0Pf0T$ zo;DDL44604yF$FV=ljTA-FC2w4ddex9T`?nXc3QCPgWu~l1|(f-`$w33}vWZ!$KxZ zOtg=Ksj(tN*v}iFrg!qnwZhZ+J1Hm&`T&V0%o-7c=8Vre+G}=z2TXOM&g1dYQsJ~q z<8QB><0QSzuF?BT=+gjmNt?elP5%!bevg+3(dEGop~T+&ry}6z%R&+|7VuP7oDNMw zBxaMmM}S>vb|lo78;#XPZ6RqBK)Q~H^XSnPUKwYqUbzc?x-GIdVcx@eeNutPC6sE@ zhD(WR&Gz3Fb`%<-$mtJj@O-WcYUnPBvaB)K+6P1a&M^U|fGTq8W6pnFx$30k=jKT})oJxzR4QS{d!_g4Ml<+-pewD+*> zB;HOunlE}_$WH8={=kl5PCwc+{?F^3i!ml|+&rdS2SH)@SA^k!u&^+AZ32Z1SeD)4 zVl#SPUS7*^?m#uf_wwJ=MEwOqJYFz7v%`GABD>%#i4A9Uo`1LpzL}vl6g~J>)v#Lz z7?CF2eO}Lf_t8qd@fnVMzw1)b-Oa!_8VU;Epg}|TAu!F@&tg=5RHB-2nUFHE)aE`D zE(UxH@!21D$VD(CqvgU_C;~mfR_FN0!xtcnq<7zJ+qK*%MG6yxehgl3nJ zZ0s3nzr!lZ%1}QH5RqUc(XtU%|Gye3d@xM=d)lFnswh3>0tNUz{)>q9BLCn3EW)T7 zB+ThLPmF!_Vz3AR7E&)t+$w@jv1?tIq(OxoQ5q(8`{zes8gRR=o*uQ3W#G%Y1KTmW ztlOp>#4`|GRSr$NqY{x!$$~imt?r7;GAt<}h;|pFx+}wUdpeMU{;{K=;?rqb&ZV! z-`4X&B-zbn(srW&#^V%Lsrwr2`b^A}wjL@(^!MvdN8NTZ1JS5qgaU#3)7Q7H@jo^y zdUY>nFC*m&3LYS$NIn8%9QCaR1Ayh2P*Ooi{AT7JNw?d5hH7J#91mz+HN7wbv)Srj zX;KS->tqQ^a!grU-{?xxu!)NoDxAUyRRx0znZr(YhJbrh!oy z_YF0@HH52P*EfVp-Nm_v!UEI^45R1?uH+I{Kl<2%lnqc=hnW?|#*(jYu>Ci9QP~t{ zLP)j54w6H87@2~Phx}NTH8310^XzyyKrbkdHYhN-FNFqn1``$>hz!b#>)*7a96?H- zP%%xC_Y)^DTGNfby#hpIqr%~02k-%j;?uSjeF^Iv3mR^r0q6vp-q(<<10A}5rf!}% zDsYvMxPMgr>h6{eI(di+P0$gIJP26t(dlXy0R2WK@gqTZr+#$&KO`&MLGTlUWbF` z2g}MD{)BrkdI}7}Pc-j2u&4e1J6-;HOOEhLk?CS1_L#oG>C7-_HP3yjnc1kY543=U zrKNO7R>}u&|BK{qbW_Fx&|PB4hGdh=DVMe;5FpsAOE9? zKP0L%XXm!i8afk+?}CGLmYroa8$mq4e93;YrT4 zBCPxRZle&a8aw-s#GN?9@6jhop3|JTm+thDtsq6*>zxd>i&z>60zR)DKfz#z?~ zn{;f{@h6cH|6{TGS=7-F8}6d53QzxZXCBB_;9pqAnD8sDJx)qAZ2ozyEQN>AmHz@g z{*Q-)G*$?b#zsX7gt&Z=*(2WxrQ=TkXh=*Keht4dN3ilAyo>>Z)8v9<1uMU*IyUIc z|J_oRhAr}_pZAIt_TgOSJyk(zj~^1lVGLr8Ppx4nUn>MazNtwMgJHzu^UxF7iEx7k zJ-NbzT}(mNG_*Iq$q{(rr7MnAV2}K7I$uRFjw;Vgk1yDa0gc1Ax6U;Osq{3_D(yG8txG*EbOOu(^P zfkc};^rC1=)Q>iW9%fLR`c6yl%aEq49xD5LkS#Utj?BmjZL}F>jh8gmuV#DMWaMT& ztACVOjdXr3heEm~@vhY*-oG<~bUj%Z?=b4r>xKWGSbqc)@gMt@|7V;+Td{7My=FWT z>e;BHW0iMRr4EK5OYT$um0J|&AxRUSAkfF*WMnHkJwkVHcMu!3%7VIL1-j`M>;B3k zQ(k`$A@)Hoi_>QdN`)`D5`wDE3)(*$dfe51Y$>wlpVL?V&lsA2hvKVuIt?OSqM*R7 z**FIIuj2uGC}A#-F1O^)WIZ3xr~6Up!qqw`qZVzs_rdz)8z=V`e^gdNs4>{1>v@Y@ zB0}qHnW#{Hu%q}OUBv-qgZrTue?1Z6D+zggQu*NdK=TGw)6g++UbUo@VL86cafUD+FDTNb3<+ciV0I!!vXU*tG z*#W0eKVofVbxBUHXUrbbGyY95J{M6T`al6Ni~R5aP?Rje56AK>`sHxhOD=v_2xPX=9% zO-V^n;Mkd}2uMi0UNh8vNjZG@aC&;WCzoY*UQ$xU$B)#+Cx3n`5oK-a&Betf>M~~y z9w{SJ&M5~RPp6${j}o%7G|hZR74ASf#?uM8CWunRE1=$&simoP{ z^R!P*cszEF)?wP6cwGC!r+i9=SJf@%&nc*;w6U`z4sQY#v5L$N_|(A5VZZ$B7P35Q zlprY4(b3U*`1$)o=ZxH`kD2KG`4e^ePd|SA2u1>IRr>K`R&K5jvv9^58~QDi?da#rl#>RF@~0wsiC1P zY>`=6_Bc%ebdFO{?S6jC%WFP&+)`9jT)lcV4jM=*>zcBXWP9s?yea zp@%AYnZh@zsU}Xf&CSormQXXe69J!y7q9e&1_zUv{(h4=f@rs}L@~no`yRCXr9^1I z#ZcMunflKfpEqwbPSDTwmOb|wR&cgLjcby@UWcYgV{v7#hh$0@58qJFle%pb<7T?z z$Hw2!MWo;5iM$$pTU>dfa9QbtYZCqT{T6juto?#5yB79NRao2DY-IcP?VC9r zvxxoUrA!g$**8PqW@p_-L#z0FHk zJYV^1=Z*K~)_nVh5j9@!SNikZs47BBBX>u8&goKyJ$tHnOiWEt&k%3zzr;2A+c`&S zrq$;9aikpLRacunAaa7SC+}od&7C;yd?ar&AoSd6~hZTM8(+?)joMsQ&U%0F*a)3Il>*q>!m1~u$>~dykJFvb1T)~ z-@miPhgE#3>+=rEC-A@AoPRW=Vt1aD)n{i)}g5L$;Bu$`qgf5 zTnPCY?%JzY`!h_5CF$PKf6dLT^gG_zmhUt-H-{00>fbs&Qn#ftOq`x(?WA@t;$6m@ zH`kutS)cCr+-V@V$jtUN zbslv0o8P+}Fj}{%_9G6vIf#V9fW*MVifZKEAan-fD6#LBt*z_Qf?!MfyF$bbM@L8R zJtzJq@8A9a3#u`RCg(d`J^?20*w`b1U-?d)K*fnc?tYmJWC<1@_U#X5oePqZZaO=Q zwCwsTbz#BT&21TLVvb8}pUI|~N4H>2Li!m-?KB!-)=+)uv0mM0D0&;&pgWuldN`#1 z(rVwAIDZ^F(pFRBhp@%Z&%b{^<=E~6Urh3lIFWQeemv{>3XYGIH&bjxgw@ZF8#4x~ zFGI%dnfQ%AV>sf_CzO`$r!Jtr@kTE9tRLRO9Vo2-#UE{PmZ)VIW=sz{Ey8=&TZJ9o z>RZFg?lF7R;$$5(-g5TpF2YUh?d^3&HQ?n-#>RbcSjhT(jS$FCSSBJW8npYt*^>rk zd%nlot;^QDX>OkH{M&MF2s#alcZssx`g&E{&37`kZ{Oa_;YD{}{ew$Hef1NMd!JJJ zBeS!E<|-w&MP1r{YH5RV*yY1G7;bE4c0--4uX09Pn}zKl>dI2aFea=2A}OdI5OrN> zeE05MbF&Z!$Ay&qf&v!1ey#AFoaf{xPoJJo-eJArmT@qZ?BP980+@!PlAF3-Ikmw7bGM|R_uYn!DT%YKuLWYURNy!hlCJS2CAyj zjacDX&|@Gerl{<)J~Aikf=Y&q`8%ejrZ#TeXr>Ysi!uIM^u(iHUp`dAa9NzJPXOeTBE* zqf+sGWXet{$Aj$b(6~bL8PcKrSD-X7C=83JMA=vx8fk-Jd>t zW@Ka};52O(y^fX4H{SiHvFhVQV{MEpdu_QohKDP@?@iFitY~bUh2;l>Pth~A%3NJT z!-I|$ZP*oIh8hNFZg(l+$;lSbH?AC;o}B#1oKZ5{;lT=n`izCJp{}m)lP8qSPT72~ z8-|7m*2E#8jt?Hz#BoMcvX^&`F)=ek9_A#|U`WsU*sQHTclIpJ-6D)V*1Td0Ge)y2 zwDi}@_pk`)_w2c%rY2=vPRw^*lxRdt`dPru+qVH8#FrP|0`Iu!`(8LGBqTK1@bIwK z)!K6^Ds?FKIlKQG56D7ZRGoj==8DOiAgu zB~W(%w&Oyij}Igu5$nc*Y39VFBtl{%&J+Xi9Aanhtd7|)8zxrXGtrmpO)N(jd(EWs z{rmUZi?l(5es*=Bd6XDX6#zmG@5PsC#@4wRd&Qh*QG@a<6B3(7>J4dodjYRQ#&6Zm zU#${(^ym?M?C|jL%a>eS^1Zw^2YxNDtc=mXCLfg^Jl1HZJTyB$pPQ3YoveTIsIz!S;@ORN`I*jpx}i)@GEkgs!78v5e(w?A3y$>ynWA}*L(ESZ&>H5qGXZ! z7?n~FT%8u@Y{KO)(5?P!`1bs?dDJBbef?kaBZckpYCOfON?z*Xpa#DIb#p{c4lJoQ zbbGIcit$mivUu;+Yt|$tBzSsx(Xomx;BeFCyG1bVTo%SkHM!{<&Z`{oz3?oBlAWE6 zGHFE-PqgeDcOc3^2q)EyzGyY}DqG-Jl>NTsJ)m>xe5Pp}@(veHU_dJ7@W zDI+IW`RNnE0Bp4#bCisYV}F{8ist|LaV<)&3Zmeaty{P0^GUk87U0l#^={Rfk#=@! zf_A=oUl+7_ui~FK6J#fJ^|bj=tY>0ocDa(p&d#pTW&ZRz1rQuLoK8#9GE>{IoSdFs z2RFC1RqL=H>S%fg21c6RdI+N3&Czjjp5#=!5$%l4x~nV`HaY0~*WLRz#BfAN=y~X# zl8#&O$BA+3mY0_PjJkn7r*%3yI>pRwFKdcFe#9~kb6W~BM$BNNraejpihktnEsJ7U zT+L8Bq)#!tC@tMF@!Oof%i7lVG%qhse?(vJL?H*3Vf&*x<8_0=aoql=84}~-gl_$C z|4Cnu>g{aJVVtSIdX%jFsEw}v^Ji%t9XITti&A4*n(-G7Zs!inh0UGeQJ<`n+~jlo zv0hW;sHv`S*LnU z0I8^Cq}!dF+}gh z=Xkt*I{|+M5q9nBGcDRp@b38d`IVOUs+Dc|v0>{dPCNmDsi~4MdW2GT=yS15b^4jzpA&x!t9Ax$2d{{NYCOE7#7xk`b&~VruT;qyba^7ba1=O zbKVEVLLIH?TC)ca9Xhv<455>=BESXr``o%U3bpyX4-50IUFXClz9m3QON$;N zcCxUrFf5Zd2|nc`es}!%o3ykAc(FcAf3T zWTJIB6%!vHpXR!6hdy{gQ=I(f&%egO4%TkiP*dm@#o>e_NAO4^VUa)*`RJ0N?$lbu zp8PPi>Oor`C(m6MDHTPh(+tIj6!_Aajf>7+%{hb-a$8=)8}!pJ_a3!qtR4i)M~p-p zVS2P>T7;ecxS{LHX=3B{^BEK2)b;G?|S)i-{#Gmg=oG#=*5yTQ`_X0n3m>W z+Bt+ex|EdL$X@H$uLr17RX@=SdY>G8XKly@V^^AU3IMdV4GnHsD#+>p(gEFH{w}dc zWACSG#fTEi#7;S&w!U7m(MY*GJwKXYYLz`LEiF768J9VB5|h`uDctMYrBjDKr5uZh zNJvlTW7aoLOiY9?2DdNu?OU`=FImVa8MXfK7%gz{`SK-L!bs)j=H@B0=60SB9}Eu5RRsG+tMzbt`^Y^<%1adAaNMD(e=|4>v^R$ktxYl(AA3?lZ&9rgLD8F!0G z%gT07{7y^Yu=}9AJ@GAYy z6u+IUUw5gc^++G57j%N^fV&S;w?Bw%`C5Cv?8+i)+a5oDj7^FgmnI6A1`1J2R~sQk zXAomA^aZz#gtnT5*W^2N_@U}?;hXTWQ>Vanp;ieA3%6%mc^H=_>qL~H#cM~`|we0U@Lta+5ckmk{VlHy_L3TMG*X6QHFMaI{2ZD|ZpBk-vU@|B4oKQAw!=OTs~<4KRhn6Rf>C+bSk0X&6Z6S@Q9Ryx+{s3tKr7 z)+CbzRqr0R((lvXBT<~Lb&9OEdsjH`&;sHppygg+TQdWL!!1!~dH|@mdlgg3h=Ij6 zwQokH4MDbk-V#7zqv+!4BS#*PEeRmGcJNEQNpHYv9E5zARwbtnfMIH4;xAirKH}*8 zB`2AnllsV+7oCc5pvkkcr}82nQ_PM?k!ZqE?8Vx@TYab0a6i`WMt-mqL)s2zgr#^JvG>Qj;(Zc zUPOk%ZVbU+9PwkQB>3&T1Z|-=lZ}lH+uW1!T9NRp2HAn8w=q8_8?Y#?1ekm;oL$Zs zYm|+u`tSfb%D-MPqC+~~G2DV3;3A;=EUqykQ_!Qvqg!&+g$rBXMD4Xa_O1n#l$M63 z5$PINEA>4EdgCfgeNA)rYI*nYuo!Ul+!UC~!$*&h3v-OV?LXTjd)B9#|J137h-0my zxhQzXJt+6?t%r(8p}Ds$mPY6!81hqcwe9Dd46hO#!y^(9M}O*^;^PY-zsmZ~V6?|M zH+=`bTB9*lf3wGj6MTHXEVH4s0k>ES*Kbk2`ph=zJR8>&400Zaop%a zewAA?o%q6I?TbSo0AL`aQ&al6+`UI30ngf+vUgo^pLQJmu_~-m?(*eGj<~cmYuxcW>?Y;NVu!B;Ic;ZT%Z!QsDpO!3Z*D{`w1{ zBSnioul~h`J$Eh|SI(vN-mkd^r@a|60YJ=7#<8JkgHI`>A&U4W7XYjNfq`8uK^z*2 zibbmCB!(m6;_dD2VNC}P?%)46`MR<3k?jw9H6~CyU*&P};>Go}OsHw3&d$yKe40OS zTmeKjU6Y&t*s+I0ogw??wnD^} zJkrJ!`Ou}PRO-zmTP3^>9zJZD{T(+K@bdAs7P!19?ZnLp_g}q+GzcgT0gra?N$S z2@I{@vuAsD?C?YJKWkZrkmnn{RT6fu3L8+`nu_BRsO>qzf~$shhE;~~neM(6Wz3fl z5^am~q{7yr@!q(sWW@=1R{HZwm?{B-4MMGO8URvIZ^NV--UZ8bGYecC9W+(sajH@a&UGXPv5BCEs0^S(t>sy2fNoa-aa^4_(G&C=Lejc6}dcz#KO8L^QTW`X{JCF#F zdOu!2;qf6z;Py|vZ5Qj^>l32xH{Y3wOSt{S21bcioIQ>dtYV8CI++NAN0vLV=EJ>R zQuewo>Rh)+f1F|Q>48fDkezjaf2-tjGo9e>A9AkCi*_tN^vHt>{%7|;c=RYeE$!e6 z;6RWs6CfXBq^XMX&tQG|CmMzBz=%;F0~x(hK0uNvMIVUpu;Ac+qCTc>I{@85D$qv$ zO%KD#z_bk|yVh{vmOhg+XWm0 zRacT*T;1m?513HyBLvBF1f!(*G#l(ewH5epXkcJF(Jd2w0@MDX!>lz2CKxBzJax)A z{fw2>sj0A4CC~&t^HZ;M#V#V8X}|yc`Ez}JMtJ!9@^YDj+hHA^@BrSaxUNfT{$bNX zciaPYT-t)WQRBDnTdqpb^XJu>NQG& zVg7M)tzVUVhiUWZCVT^x%*eUY9ZW7Xqw@r!iZRzj7!QgZ+w1&qfsytLWk5z zykVN$nVFebaGxqF&ik(;J@O9>?CI-^jfn~L^P9k(H*d6Pt^Kg{fEj!6jR>HT8lmED z!yO&B$9|qW{Drb%A3%jVtWq4H$E^y0FHK47BsfJNnAX*$$Hg7xf) zNNue$i%;pzyCl*Gje=^6vYHy`@H~##+uGT+r<>B(aQj{mn;$%Nw#n|jel8YCRC2O7 z);kb*b+saVfvQbdX&5b>z{IjZW_roEW(_eA<`xz{m@bBQO-+JOKtNsK=&eYyOud$1 z1#r=@RQme*wm+a6L(-nZ6_`3O(Xi;T2U4$u&r#fty)%WjxisUpJOcr$k$bI#UTd~h zX-Ubw4;{z3pyV)#yE?e-bne(!fz|jSF_GyY+V2bGBPr7+5tsj zi2-_m_+9oN!r>bbJsxOA(DERy0?DMR3y>sw2HFb?-@ZN7q9PG^|Ni}Fe*zE+Q*gA6 zZMPRQGxN~U5R7UZ<0=I$K}BA`(rK#QU+w!yBx^xJTKN?f6ElPBHURx_Cy^jGcSU_Y zQT0oGjD59(veQW)xE$3jaOrSMRbv7wUVoV5>dR|LvnXYonwbf_a1hnf8fix0Q*(0z z$!k`x=I{g!Bq`%)0?}gal?oOH`@6dno{5cLT9wyTu znbWe01qTK7b#;9-sl(7%U_)0`Rl)v(61ancw2Q5V!dyXkLvw2#kDBT0AEFHAeprBe z+Itv06O<+G?OWo?6|{F3U7}8*n23lo?&tOP_Ad2dWd%i0S7*?$fmLSx4p|6J5=t>4 z#VTuSi@7e?8yfat0VDI{VQjs!iVE)`2EGl`t*c1xH=l%s5!(^ub$)g>&wh+DR)s)a zQ(b-R*f9`XK>e^MPl{B1(QszHYuDa&j^VD5Gagsy>FEjk80Wx=9sWk^<@qyiD1Ni{ zd-`9*Fu*q=8h*$A-_+T(xggz3cGh#Zfg*oRx zbhei$tG>CPOhdzl2@}5cLqb;8+s8*vPwxQRL2$(S`e~G0!pDIBX1AT0nJe&Xd|VvP z+evve0%ABgIpt<&mxqeJ80zQUG>4nWiDQP4gm^s3+hiG zB~B9;ylCYxyprV`5#=$%F0*N)eDAu|66b8 z8Wi<;h4HP!C?Ft8K;@<+1Vsddc&Qt2ToeR{5b&~yBJ4(F#le6JqGE@b1wxFMOo&rV z&?R&=kxRjXt`LnP7oi0~Kvx)PLL@~5A`wlb#rF5E(oSdEnSSd3BkbjWdEaxM^E}Tv z%hO?5q)<;oN`cHcyzTzzv%^O$r;_uWjF?Tx%A@7+Yd{}HS(I)&!Xg#Og<#~{J`F7| z(xprDmLIs?-A#-vpPnS{y9v}nLc$fIClpqjJ3%B$@*0gVV4Z;z^eMG?@eIUx%P(WlhKrondXg z0g)glrzXX{bF#P*QXh1s*jO?D`L{L-g~B%w?xIHtpoG#7I>G}#=ZQ4u;&Mi-&9Ll2 zx&7gX3-Vgi+DW>WJd&kEV+F>IBJblldk#PK;GPP31)JsfJw1@q);HTbI;^w(=YNU; zp=BzegFECB`i00tuct_;7|A0`uiJoX_c<`#g?&0h6U;Y)4#fSaf!qBy#sn5 z<3w2FcfXr(uo?3=yzELvo!R2acxh6DGd_Pm1SAc+QD_`KoasiqmC`4|NRSyo>X zVnqIV>8+6sI_4CHC#xVM|Rj(Iaa+HkpxiU5j8X<{(40tNc(J4@B6yNst z_RN8lZQHhc$BsMg?KR&IGrGDtMcHX=xQE1Cu>m0Mn7E1-t13W@!Q8>EJbU)+`gzHT ziI-@>BxADDnKV4z*7oG7QzZoj*AsfV!-GQpefW^LwbeHe7`c&xHMYst&8-mXXyDJ^ zh+$)p!qCfAzZsKueY(?Opo)d$P=>RZI`SAplmK2RLPO+TbYQrlz5-yP=vQEB4@uqJ z%uMf2XSGJbxSA2-kSLECbw**xy}~2=cw~e^`E~We#ft%?KTmis8ms%RP3MxuBmTB{ zbwB{qr(X5;PNHu}eH^$)^T{B6&-6hnnte#?5_2M=CHZgW%)9JHvdEr2d)TlrKNxU7 z8oX6*D^~f}4$_*sy1I!_k?uUjixm|lkRL&$NQMKwy_l&?oLpU9IrBY>~ZVPoxMp((@Zne$I)o<`H&|B7KFXR{?O3aD6d*qoGB9F?))#ls79cj zZAlI>bCBjFm|0j5hfo#%0@~1qfk4Da$p>po`9d@jQ*-m}6*~z^Pe&1kndIvJNrSNy zC;&a=@slUoDS6BGCE;ctQQc*HR@1d>?=|^W*xjZzKmB5~Qki?=1a(_ae}B+!GdnWe ztXZ=h9WhF^;dX&Vu9P) z+KxVZR$E`+762Y2UQeAllNGc^ElbH4Uh3}62?-^@Dk>91E(UUE0mMCJrRgi$_4+s} zuD(7xqM8y!(BHk<<&)gcK4TouJCI*03iRQpPnlehMx3NKMDIT3l^36Rvam3I^X5)s zyFxB!N?om5=KDeD+*eF9*cdTo%eXZbbN_RIIh^4W3H)P&t8zNp+JXZEb^9K>v@xX( z3B7v$uUH=%8}cM;%)|-q^~1sO0CQDp*z&WbjX~NllmTg@i?g#jGqbLyhQ8Gg2m85# zPB#`F2m^5y=;h&YG)i(Pzp&74TDJb2d6bD^3x;?#W@cmn4m=kwR1uwb-Qhc1qNqAp z;}KOU#aeAI?2fV1(9n>;bjP~C!LsmtjJZkC6>CB>lj&6Yb}Nl{`}Xe-(%yRX=n-lM zz!|H}@BghX%8x_>{TXftJJehF{sD$SR+UP%EV0Mv@@e}ojSUxM1cKy3VZHF4h%-Sb zp#r-in~z-b{Pf?S%{p@#=<4nL6H5g51=<_UI@vh0%0l7{k(moG581jkFVGoA;;qoo zP@)1@gc`JKwaUN5`RY@AMe(_siMfnRemDJ0*P!PP5mlgXY7(tTzWK-Rb!rqM+HkB=H1sANIPh1lYhYlPOQU>oQRVe3 zZ;F3OG-bLi39+$fE?s)YtVxe8x>ZXi8X1ZCct}Xw(uP-uhg(%y8;S<;@^lya>2EeQ zRg{(zk-|SZPq=BmapMF=u8&cF=t+6Uk4GzLo4H%A zv~qd}WTCdKjf!wQb}{DqMAQKU44e4Oz3RkT!+SL);s*|(MZ6SsBm5!(V`kaC;DVvn zf=LHeBsS2;DJFM=Vkiohm;4$?2CBMu{yPUl7!cndrc#a28cgonR3!5;9v&I_oGu#j zyAzD9X)DMnBg}E63XxqiUcdwpfpEshtfS9gE!E2LWPS1Q1{DJKqU4*EFLV7*Q&7 zR5^$+z!AFXzl22Fi6U@uw9jzZPC6o>Ic&Fr`}Ol9{;oMGsvD z(agVqH-&C8pE6}f)!e>$<9pWxUQ6O_j-JboH*94p(aU26F&LB!8PWtvbc2 zrQ+o-ldQ^%&YNR+fh2U!%g>Q$LjLt{3U9-|)1?C58jj>cBDspA-{|G}OWI9dZXwB+ hRxhvm|Nnu{R;D$jt(VvSp;4UN+SMWcCBD&z{sDp~Z@mBj literal 0 HcmV?d00001 diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index 1b9e1643b..71fd4740f 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1 @@ -angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e["delete"]=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature})["catch"](function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n["delete"]({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]),angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]); \ No newline at end of file +angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e["delete"]=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]),angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature})["catch"](function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n["delete"]({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]); \ No newline at end of file diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php new file mode 100644 index 000000000..81e9f7f8e --- /dev/null +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -0,0 +1,118 @@ +@extends('manual.base') + +@section('manual-title') Schema of exported reports @stop + +@section('manual-content') +
+

+ A description of the file formats of the different available reports. +

+ +

Annotation reports

+

Basic

+

+ The basic annotation report contains graphical plots of abundances of the different annotation labels (annotations can have multiple different labels by different users). The report is generated as a single PDF file, containing one page and plot for each transect of the project. +

+

+ Example plot: +

+ + + +
+

+

+ The bars of the plot are color-coded based on the colors of the labels they represent. If any label occurs more than a hundred times, a logarithmic scale is applied for the transect. +

+ +

Extended

+ +

+ The extended annotation report is an XLSX spreadsheet with one sheet for every transect of the project. Transects without annotations are ommitted. The report contains a list of the abundances of each label per image. +

+

+ Each sheet contains the name of the transect as the first line. The columns are as follows: +

+
    +
  1. Image filename
  2. +
  3. Label name
  4. +
  5. Label abundance
  6. +
+ +

Full

+ +

+ The full annotation report is an XLSX spreadsheet similar to the extended report. It contains a list of all annotations and their labels for each transect. +

+

+ Each sheet contains the name of the transect as the first line. The columns are as follows: +

+
    +
  1. Image filename
  2. +
  3. Annotation ID
  4. +
  5. Annotation shape name
  6. +
  7. X-Coordinate(s) of the annotation (may span multiple lines)
  8. +
  9. Y-Coordinate(s) of the annotation (may span multiple lines)
  10. +
  11. Labels of the annotation in a comma separated list
  12. +
  13. The area of the image in m² if available
  14. +
+

+ For the different annotation shapes, the coordinates are interpreted as follows: +

+
    +
  • + Point: The x and y coordinates are the location of the point on the image. +
  • +
  • + Rectangle: Each line contains the x and y coordinates of one of the four vertices describing the rectangle. +
  • +
  • + Circle: The first line contains the x and y coordinates of the center of the circle. The x value of the second line is the radius of the circle. +
  • +
  • + Line string: Each line contains the x and y coordinates of one of the vertices describing the line string. +
  • +
  • + Polygon: Each line contains the x and y coordinates of one of the vertices describing the polygon. +
  • +
+ +

CSV

+

+ The CSV report is intended for subsequent processing. If you want the data in a machine readable format, choose this report. The report is a ZIP archive, containing a CSV file for each transect of the project. Each CSV file name consists of the transect ID and the transect name (cleaned up so it can be a file name) separated by an underscore. +

+

+ The CSV files contain one row for each annotation label. Since an annotation can have multiple labels, there may be multiple rows for a single annotation. The columns are as follows: +

+
    +
  1. Annotation label ID (not the annotation ID)
  2. +
  3. Label ID
  4. +
  5. Label name
  6. +
  7. ID of the user who created/attached the annotation label
  8. +
  9. User firstname
  10. +
  11. User lastname
  12. +
  13. Image ID
  14. +
  15. Image filename
  16. +
  17. Annotation shape ID
  18. +
  19. Annotation shape name
  20. +
  21. Annotation points
  22. +
  23. Additional attributes of the image
  24. +
+

+ The annotation points are encoded as a JSON array of alternating x and y values (e.g. [x1,y1,x2,y2,...]). For circles, the third value of the points array is the radius of the circle. +

+

+ The additional attributes of the image are encoded as a JSON object. The content may vary depending on the DIAS modules that are installed and the operations performed on the image (e.g. a laserpoint detection to calculate the area of an image). +

+ +

Image label report

+

+ The image label report is an XLSX spreadsheet similar to the extended annotation report. It contains a list of all labels attached to each image of a transect. The columns are as follows: +

+
    +
  1. Image ID
  2. +
  3. Image filename
  4. +
  5. Comma separated list of label names
  6. +
+
+@endsection diff --git a/src/resources/views/manualTutorial.blade.php b/src/resources/views/manualTutorial.blade.php new file mode 100644 index 000000000..31f6f2438 --- /dev/null +++ b/src/resources/views/manualTutorial.blade.php @@ -0,0 +1,7 @@ +

+ Schema of exported reports +

+ +

+ A description of the file formats of the different available reports. +

diff --git a/src/resources/views/projectsShow.blade.php b/src/resources/views/projectsShow.blade.php index 51ce2b276..c03aa51fd 100644 --- a/src/resources/views/projectsShow.blade.php +++ b/src/resources/views/projectsShow.blade.php @@ -1,5 +1,6 @@
-
+
+ Reports
From cec875235900821b582d6c115b540a229db3d271 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 29 Aug 2016 15:13:17 +0200 Subject: [PATCH 044/407] Refactor and implement image label CSV report References #7 --- ...ntroller.php => BasicReportController.php} | 8 +- .../Api/ImageLabels/CsvReportController.php | 33 +++++++ src/Http/routes.php | 8 +- .../Reports/Annotations/BasicReport.php | 28 +----- src/Support/Reports/Annotations/CsvReport.php | 25 +---- .../Reports/Annotations/ExtendedReport.php | 28 +----- .../Reports/Annotations/FullReport.php | 28 +----- src/Support/Reports/ExecutesPythonScript.php | 34 +++++++ .../{StandardReport.php => BasicReport.php} | 34 ++----- src/Support/Reports/ImageLabels/CsvReport.php | 91 +++++++++++++++++++ src/Support/Reports/MakesZipArchives.php | 40 ++++++++ src/public/assets/scripts/projects.js | 2 +- .../projects/controllers/ExportController.js | 8 +- .../assets/js/projects/factories/Report.js | 3 +- .../manual/tutorials/reports-schema.blade.php | 29 +++++- src/resources/views/projectsShow.blade.php | 10 +- ...iImageLabelsBasicReportControllerTest.php} | 6 +- ...sApiImageLabelsCsvReportControllerTest.php | 20 ++++ .../ExportModuleSupportReportsReportTest.php | 2 +- ...portReportsImageLabelsBasicReportTest.php} | 6 +- ...SupportReportsImageLabelsCsvReportTest.php | 66 ++++++++++++++ 21 files changed, 362 insertions(+), 147 deletions(-) rename src/Http/Controllers/Api/ImageLabels/{StandardReportController.php => BasicReportController.php} (77%) create mode 100644 src/Http/Controllers/Api/ImageLabels/CsvReportController.php create mode 100644 src/Support/Reports/ExecutesPythonScript.php rename src/Support/Reports/ImageLabels/{StandardReport.php => BasicReport.php} (66%) create mode 100644 src/Support/Reports/ImageLabels/CsvReport.php create mode 100644 src/Support/Reports/MakesZipArchives.php rename tests/Http/Controllers/Api/ImageLabels/{ExportModuleHttpControllersApiImageLabelsStandardReportControllerTest.php => ExportModuleHttpControllersApiImageLabelsBasicReportControllerTest.php} (78%) create mode 100644 tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsCsvReportControllerTest.php rename tests/Support/Reports/ImageLabels/{ExportModuleSupportReportsImageLabelsStandardReportTest.php => ExportModuleSupportReportsImageLabelsBasicReportTest.php} (89%) create mode 100644 tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php diff --git a/src/Http/Controllers/Api/ImageLabels/StandardReportController.php b/src/Http/Controllers/Api/ImageLabels/BasicReportController.php similarity index 77% rename from src/Http/Controllers/Api/ImageLabels/StandardReportController.php rename to src/Http/Controllers/Api/ImageLabels/BasicReportController.php index e3432bb84..128d04968 100644 --- a/src/Http/Controllers/Api/ImageLabels/StandardReportController.php +++ b/src/Http/Controllers/Api/ImageLabels/BasicReportController.php @@ -6,9 +6,9 @@ use Illuminate\Contracts\Auth\Guard; use Dias\Http\Controllers\Api\Controller; use Dias\Modules\Export\Jobs\GenerateReportJob; -use Dias\Modules\Export\Support\Reports\ImageLabels\StandardReport; +use Dias\Modules\Export\Support\Reports\ImageLabels\BasicReport; -class StandardReportController extends Controller +class BasicReportController extends Controller { /** * Generate an image label report @@ -28,8 +28,6 @@ public function store(Guard $auth, $id) { $project = Project::findOrFail($id); $this->authorize('access', $project); - $this->dispatch( - new GenerateReportJob(new StandardReport($project), $auth->user()) - ); + $this->dispatch(new GenerateReportJob(new BasicReport($project), $auth->user())); } } diff --git a/src/Http/Controllers/Api/ImageLabels/CsvReportController.php b/src/Http/Controllers/Api/ImageLabels/CsvReportController.php new file mode 100644 index 000000000..dacc1ece1 --- /dev/null +++ b/src/Http/Controllers/Api/ImageLabels/CsvReportController.php @@ -0,0 +1,33 @@ +authorize('access', $project); + $this->dispatch(new GenerateReportJob(new CsvReport($project), $auth->user())); + } +} diff --git a/src/Http/routes.php b/src/Http/routes.php index 0d8290b60..e7d2a243b 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -22,8 +22,12 @@ 'uses' => 'Annotations\CsvReportController@store', ]); - $router->post('projects/{id}/reports/image-labels/standard', [ - 'uses' => 'ImageLabels\StandardReportController@store', + $router->post('projects/{id}/reports/image-labels/basic', [ + 'uses' => 'ImageLabels\BasicReportController@store', + ]); + + $router->post('projects/{id}/reports/image-labels/csv', [ + 'uses' => 'ImageLabels\CsvReportController@store', ]); $router->get('transects/{id}/export-area', [ diff --git a/src/Support/Reports/Annotations/BasicReport.php b/src/Support/Reports/Annotations/BasicReport.php index 9e6276b4f..e523b5a47 100644 --- a/src/Support/Reports/Annotations/BasicReport.php +++ b/src/Support/Reports/Annotations/BasicReport.php @@ -3,13 +3,14 @@ namespace Dias\Modules\Export\Support\Reports\Annotations; use DB; -use App; use Dias\Project; -use Dias\Modules\Export\Support\Exec; use Dias\Modules\Export\Support\CsvFile; +use Dias\Modules\Export\Support\Reports\ExecutesPythonScript; class BasicReport extends AnnotationReport { + use ExecutesPythonScript; + /** * Create an image label report instance. * @@ -55,7 +56,7 @@ public function generateReport() $csv->close(); } - $this->executeScript(); + $this->executeScript('basic_report'); } /** @@ -78,25 +79,4 @@ protected function query($id) ->select(DB::raw('labels.name, labels.color, count(labels.id) as count')) ->groupBy('labels.id'); } - - /** - * Execute the external report parsing script - */ - protected function executeScript() - { - $python = config('export.python'); - $script = config('export.scripts.basic_report'); - - $csvs = implode(' ', array_map(function ($csv) { - return $csv->path; - }, $this->tmpFiles)); - - $exec = App::make(Exec::class, [ - 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->availableReport->path} {$csvs}", - ]); - - if ($exec->code !== 0) { - throw new \Exception("Basic annotation report generation failed with exit code {$exec->code}:\n".implode("\n", $exec->lines)); - } - } } diff --git a/src/Support/Reports/Annotations/CsvReport.php b/src/Support/Reports/Annotations/CsvReport.php index a16bf37ef..fc27bc7a1 100644 --- a/src/Support/Reports/Annotations/CsvReport.php +++ b/src/Support/Reports/Annotations/CsvReport.php @@ -3,15 +3,14 @@ namespace Dias\Modules\Export\Support\Reports\Annotations; use DB; -use App; -use Exception; -use ZipArchive; use Dias\Project; -use Illuminate\Support\Str; use Dias\Modules\Export\Support\CsvFile; +use Dias\Modules\Export\Support\Reports\MakesZipArchives; class CsvReport extends AnnotationReport { + use MakesZipArchives; + /** * Create an image label report instance. * @@ -64,23 +63,7 @@ public function generateReport() $csv->close(); } - $zip = App::make(ZipArchive::class); - $open = $zip->open($this->availableReport->path, ZipArchive::CREATE); - - if ($open !== true) { - throw new Exception("Could not open ZIP file '{$this->availableReport->path}'."); - } - - try { - foreach ($transects as $id => $name) { - $zip->addFile( - $this->tmpFiles[$id]->path, - $id.'_'.Str::slug($name).'.csv' - ); - } - } finally { - $zip->close(); - } + $this->makeZip($transects); } /** diff --git a/src/Support/Reports/Annotations/ExtendedReport.php b/src/Support/Reports/Annotations/ExtendedReport.php index 25ecc0185..ff83da364 100644 --- a/src/Support/Reports/Annotations/ExtendedReport.php +++ b/src/Support/Reports/Annotations/ExtendedReport.php @@ -3,13 +3,14 @@ namespace Dias\Modules\Export\Support\Reports\Annotations; use DB; -use App; use Dias\Project; -use Dias\Modules\Export\Support\Exec; use Dias\Modules\Export\Support\CsvFile; +use Dias\Modules\Export\Support\Reports\ExecutesPythonScript; class ExtendedReport extends AnnotationReport { + use ExecutesPythonScript; + /** * Create an image label report instance. * @@ -56,7 +57,7 @@ public function generateReport() $csv->close(); } - $this->executeScript(); + $this->executeScript('extended_report'); } /** @@ -83,25 +84,4 @@ protected function query($id) ->orderBy('images.id') ->orderBy('labels.id'); } - - /** - * Execute the external report parsing script - */ - protected function executeScript() - { - $python = config('export.python'); - $script = config('export.scripts.extended_report'); - - $csvs = implode(' ', array_map(function ($csv) { - return $csv->path; - }, $this->tmpFiles)); - - $exec = App::make(Exec::class, [ - 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->availableReport->path} {$csvs}", - ]); - - if ($exec->code !== 0) { - throw new \Exception("Extended annotation report generation failed with exit code {$exec->code}:\n".implode("\n", $exec->lines)); - } - } } diff --git a/src/Support/Reports/Annotations/FullReport.php b/src/Support/Reports/Annotations/FullReport.php index a3459540a..d8611d216 100644 --- a/src/Support/Reports/Annotations/FullReport.php +++ b/src/Support/Reports/Annotations/FullReport.php @@ -3,13 +3,14 @@ namespace Dias\Modules\Export\Support\Reports\Annotations; use DB; -use App; use Dias\Project; -use Dias\Modules\Export\Support\Exec; use Dias\Modules\Export\Support\CsvFile; +use Dias\Modules\Export\Support\Reports\ExecutesPythonScript; class FullReport extends AnnotationReport { + use ExecutesPythonScript; + /** * Create an image label report instance. * @@ -59,7 +60,7 @@ public function generateReport() $csv->close(); } - $this->executeScript(); + $this->executeScript('full_report'); } /** @@ -94,25 +95,4 @@ protected function query($id) ->orderBy('labels.id') ->orderBy('annotation_labels.user_id'); } - - /** - * Execute the external report parsing script - */ - protected function executeScript() - { - $python = config('export.python'); - $script = config('export.scripts.full_report'); - - $csvs = implode(' ', array_map(function ($csv) { - return $csv->path; - }, $this->tmpFiles)); - - $exec = App::make(Exec::class, [ - 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->availableReport->path} {$csvs}", - ]); - - if ($exec->code !== 0) { - throw new \Exception("Full annotation report generation failed with exit code {$exec->code}:\n".implode("\n", $exec->lines)); - } - } } diff --git a/src/Support/Reports/ExecutesPythonScript.php b/src/Support/Reports/ExecutesPythonScript.php new file mode 100644 index 000000000..10c9d6077 --- /dev/null +++ b/src/Support/Reports/ExecutesPythonScript.php @@ -0,0 +1,34 @@ +path; + }, $this->tmpFiles)); + + $exec = App::make(Exec::class, [ + 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->availableReport->path} {$csvs}", + ]); + + if ($exec->code !== 0) { + throw new Exception("The report script '{$name}' failed with exit code {$exec->code}:\n".implode("\n", $exec->lines)); + } + } +} diff --git a/src/Support/Reports/ImageLabels/StandardReport.php b/src/Support/Reports/ImageLabels/BasicReport.php similarity index 66% rename from src/Support/Reports/ImageLabels/StandardReport.php rename to src/Support/Reports/ImageLabels/BasicReport.php index ca1d74334..33c6d65b1 100644 --- a/src/Support/Reports/ImageLabels/StandardReport.php +++ b/src/Support/Reports/ImageLabels/BasicReport.php @@ -3,14 +3,15 @@ namespace Dias\Modules\Export\Support\Reports\ImageLabels; use DB; -use App; use Dias\Project; -use Dias\Modules\Export\Support\Exec; use Dias\Modules\Export\Support\CsvFile; use Dias\Modules\Export\Support\Reports\Report; +use Dias\Modules\Export\Support\Reports\ExecutesPythonScript; -class StandardReport extends Report +class BasicReport extends Report { + use ExecutesPythonScript; + /** * Create an image label report instance. * @@ -19,8 +20,8 @@ class StandardReport extends Report public function __construct(Project $project) { parent::__construct($project); - $this->name = 'image label report'; - $this->filename = 'image_label_report'; + $this->name = 'standard image label report'; + $this->filename = 'standard_image_label_report'; $this->extension = 'xlsx'; } @@ -57,7 +58,7 @@ public function generateReport() $csv->close(); } - $this->executeScript(); + $this->executeScript('image_labels_standard_report'); } /** @@ -75,25 +76,4 @@ protected function query($id) ->where('images.transect_id', $id) ->orderBy('images.filename'); } - - /** - * Execute the external report parsing script - */ - protected function executeScript() - { - $python = config('export.python'); - $script = config('export.scripts.image_labels_standard_report'); - - $csvs = implode(' ', array_map(function ($csv) { - return $csv->path; - }, $this->tmpFiles)); - - $exec = App::make(Exec::class, [ - 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->availableReport->path} {$csvs}", - ]); - - if ($exec->code !== 0) { - throw new \Exception("Standard image label report generation failed with exit code {$exec->code}:\n".implode("\n", $exec->lines)); - } - } } diff --git a/src/Support/Reports/ImageLabels/CsvReport.php b/src/Support/Reports/ImageLabels/CsvReport.php new file mode 100644 index 000000000..8a6ec095f --- /dev/null +++ b/src/Support/Reports/ImageLabels/CsvReport.php @@ -0,0 +1,91 @@ +name = 'CSV image label report'; + $this->filename = 'csv_image_label_report'; + $this->extension = 'zip'; + } + + /** + * Generate the report. + * + * @return void + */ + public function generateReport() + { + $transects = $this->project->transects() + ->pluck('name', 'id'); + + foreach ($transects as $id => $name) { + $csv = CsvFile::makeTmp(); + $this->tmpFiles[$id] = $csv; + + $query = $this->query($id); + + $query->chunkById(500, function ($rows) use ($csv) { + foreach ($rows as $row) { + $csv->put([ + $row->image_label_id, + $row->image_id, + $row->filename, + $row->user_id, + $row->firstname, + $row->lastname, + $row->label_id, + $row->label_name, + ]); + } + }, 'image_labels.id', 'image_label_id'); + + $csv->close(); + } + + $this->makeZip($transects); + } + + /** + * Assemble a new DB query for a transect. + * + * @param int $id Transect ID + * @return \Illuminate\Database\Query\Builder + */ + protected function query($id) + { + return DB::table('image_labels') + ->join('images', 'image_labels.image_id', '=', 'images.id') + ->join('labels', 'image_labels.label_id', '=', 'labels.id') + ->join('users', 'image_labels.user_id', '=', 'users.id') + ->select([ + 'image_labels.id as image_label_id', + 'image_labels.image_id', + 'images.filename', + 'image_labels.user_id', + 'users.firstname', + 'users.lastname', + 'image_labels.label_id', + 'labels.name as label_name', + ]) + ->where('images.transect_id', $id) + ->orderBy('images.filename') + ->orderBy('image_labels.label_id'); + } +} diff --git a/src/Support/Reports/MakesZipArchives.php b/src/Support/Reports/MakesZipArchives.php new file mode 100644 index 000000000..9d38e0759 --- /dev/null +++ b/src/Support/Reports/MakesZipArchives.php @@ -0,0 +1,40 @@ +availableReport->path` and put the CSV files of `$this->tmpFiles`, indexed by the transect IDs, into it. + * + * @param array $transects Array of transects, with transect IDs as keys and transect names as values. + * @throws Exception If the ZIP file could not be created. + */ + protected function makeZip($transects) + { + $zip = App::make(ZipArchive::class); + $open = $zip->open($this->availableReport->path, ZipArchive::CREATE); + + if ($open !== true) { + throw new Exception("Could not open ZIP file '{$this->availableReport->path}'."); + } + + try { + foreach ($transects as $id => $name) { + $zip->addFile( + $this->tmpFiles[$id]->path, + $id.'_'.Str::slug($name).'.csv' + ); + } + } finally { + $zip->close(); + } + } +} diff --git a/src/public/assets/scripts/projects.js b/src/public/assets/scripts/projects.js index 262ac228c..2c4ee0935 100644 --- a/src/public/assets/scripts/projects.js +++ b/src/public/assets/scripts/projects.js @@ -1 +1 @@ -angular.module("dias.projects").controller("ExportController",["$scope","Report","msg","PROJECT",function(e,t,n,o){"use strict";var a=!1,r=["basic annotation","extended annotation","full annotation","csv annotation","image label"],s=[t.getBasic,t.getExtended,t.getFull,t.getCsv,t.getImageLabel],i=[0,1,2,3],c=function(){a=!0},d=function(e){a=!1,n.responseError(e)};e.selected={index:0,option:"0",restrict:!1},e.canBeRestricted=function(){return i.indexOf(e.selected.index)!==-1},e.requestReport=function(){if(void 0!==e.selected.index){var t={};e.canBeRestricted()&&(t.restrict=e.selected.restrict?"1":"0"),s[e.selected.index]({project_id:o.id},t,c,d)}},e.isRequested=function(){return a},e.getSelectedName=function(){return r[e.selected.index]},e.$watch("selected.option",function(t){e.selected.index=parseInt(t)})}]),angular.module("dias.projects").factory("Report",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/projects/:project_id/reports/:type",{},{getBasic:{method:"POST",params:{type:"annotations/basic"}},getExtended:{method:"POST",params:{type:"annotations/extended"}},getFull:{method:"POST",params:{type:"annotations/full"}},getCsv:{method:"POST",params:{type:"annotations/csv"}},getImageLabel:{method:"POST",params:{type:"image-labels/standard"}}})}]); \ No newline at end of file +angular.module("dias.projects").controller("ExportController",["$scope","Report","msg","PROJECT",function(e,t,n,a){"use strict";var o=!1,s=["basic annotation","extended annotation","full annotation","annotation CSV","basic image label","image label CSV"],i=[t.getBasic,t.getExtended,t.getFull,t.getCsv,t.getImageLabel,t.getImageLabelCsv],r=[0,1,2,3],c=function(){o=!0},d=function(e){o=!1,n.responseError(e)};e.selected={index:0,option:"0",restrict:!1},e.canBeRestricted=function(){return r.indexOf(e.selected.index)!==-1},e.requestReport=function(){if(void 0!==e.selected.index){var t={};e.canBeRestricted()&&(t.restrict=e.selected.restrict?"1":"0"),i[e.selected.index]({project_id:a.id},t,c,d)}},e.isRequested=function(){return o},e.getSelectedName=function(){return s[e.selected.index]},e.$watch("selected.option",function(t){e.selected.index=parseInt(t)})}]),angular.module("dias.projects").factory("Report",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/projects/:project_id/reports/:type",{},{getBasic:{method:"POST",params:{type:"annotations/basic"}},getExtended:{method:"POST",params:{type:"annotations/extended"}},getFull:{method:"POST",params:{type:"annotations/full"}},getCsv:{method:"POST",params:{type:"annotations/csv"}},getImageLabel:{method:"POST",params:{type:"image-labels/basic"}},getImageLabelCsv:{method:"POST",params:{type:"image-labels/csv"}}})}]); \ No newline at end of file diff --git a/src/resources/assets/js/projects/controllers/ExportController.js b/src/resources/assets/js/projects/controllers/ExportController.js index bc64e3916..0920a4ba3 100644 --- a/src/resources/assets/js/projects/controllers/ExportController.js +++ b/src/resources/assets/js/projects/controllers/ExportController.js @@ -14,8 +14,9 @@ angular.module('dias.projects').controller('ExportController', function ($scope, 'basic annotation', 'extended annotation', 'full annotation', - 'csv annotation', - 'image label' + 'annotation CSV', + 'basic image label', + 'image label CSV' ]; var resources = [ @@ -23,7 +24,8 @@ angular.module('dias.projects').controller('ExportController', function ($scope, Report.getExtended, Report.getFull, Report.getCsv, - Report.getImageLabel + Report.getImageLabel, + Report.getImageLabelCsv ]; // all reports that can have the "restrict to export area" option diff --git a/src/resources/assets/js/projects/factories/Report.js b/src/resources/assets/js/projects/factories/Report.js index 1008a77f4..23f598f3e 100644 --- a/src/resources/assets/js/projects/factories/Report.js +++ b/src/resources/assets/js/projects/factories/Report.js @@ -27,6 +27,7 @@ angular.module('dias.projects').factory('Report', function ($resource, URL) { getExtended: {method: 'POST', params: {type: 'annotations/extended'}}, getFull: {method: 'POST', params: {type: 'annotations/full'}}, getCsv: {method: 'POST', params: {type: 'annotations/csv'}}, - getImageLabel: {method: 'POST', params: {type: 'image-labels/standard'}} + getImageLabel: {method: 'POST', params: {type: 'image-labels/basic'}}, + getImageLabelCsv: {method: 'POST', params: {type: 'image-labels/csv'}} }); }); diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index 81e9f7f8e..591e1e331 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -25,7 +25,7 @@ The bars of the plot are color-coded based on the colors of the labels they represent. If any label occurs more than a hundred times, a logarithmic scale is applied for the transect.

-

Extended

+

Extended

The extended annotation report is an XLSX spreadsheet with one sheet for every transect of the project. Transects without annotations are ommitted. The report contains a list of the abundances of each label per image. @@ -42,7 +42,7 @@

Full

- The full annotation report is an XLSX spreadsheet similar to the extended report. It contains a list of all annotations and their labels for each transect. + The full annotation report is an XLSX spreadsheet similar to the extended report. It contains a list of all annotations and their labels for each transect.

Each sheet contains the name of the transect as the first line. The columns are as follows: @@ -77,12 +77,12 @@ -

CSV

+

CSV

The CSV report is intended for subsequent processing. If you want the data in a machine readable format, choose this report. The report is a ZIP archive, containing a CSV file for each transect of the project. Each CSV file name consists of the transect ID and the transect name (cleaned up so it can be a file name) separated by an underscore.

- The CSV files contain one row for each annotation label. Since an annotation can have multiple labels, there may be multiple rows for a single annotation. The columns are as follows: + The CSV files contains one row for each annotation label. Since an annotation can have multiple labels, there may be multiple rows for a single annotation. The columns are as follows:

  1. Annotation label ID (not the annotation ID)
  2. @@ -106,13 +106,32 @@

    Image label report

    +

    Basic

    - The image label report is an XLSX spreadsheet similar to the extended annotation report. It contains a list of all labels attached to each image of a transect. The columns are as follows: + The basic image label report is an XLSX spreadsheet similar to the extended annotation report. It contains a list of all labels attached to each image of a transect. The columns are as follows:

    1. Image ID
    2. Image filename
    3. Comma separated list of label names
    + +

    CSV

    +

    + The CSV report is similar to the annotation CSV report. If you want the data in a machine readable format, choose this report. +

    +

    + The CSV files contains one row for each image label. Since an image can have multiple different labels, there may be multiple rows for a single image. The columns are as follows: +

    +
      +
    1. Image label ID
    2. +
    3. Image ID
    4. +
    5. Image filename
    6. +
    7. ID of the user who attached the image label
    8. +
    9. User firstname
    10. +
    11. User lastname
    12. +
    13. Label ID
    14. +
    15. Label name
    16. +
@endsection diff --git a/src/resources/views/projectsShow.blade.php b/src/resources/views/projectsShow.blade.php index c03aa51fd..f4f8afa36 100644 --- a/src/resources/views/projectsShow.blade.php +++ b/src/resources/views/projectsShow.blade.php @@ -14,10 +14,11 @@ - + +
-
+
@@ -39,7 +40,10 @@ The CSV annotation report is intended for subsequent processing and lists the annotation labels of all transects of this project at the highest possible resolution (as CSV files in a ZIP archive).
- The image label report lists the image labels of all images of all transects of this project (as XLSX). + The basic image label report lists the image labels of all images of all transects of this project (as XLSX). +
+
+ The CSV image label report is intended for subsequent processing and lists the image labels of all transects of this project at the highest possible resolution (as CSV files in a ZIP archive).
diff --git a/tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsStandardReportControllerTest.php b/tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsBasicReportControllerTest.php similarity index 78% rename from tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsStandardReportControllerTest.php rename to tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsBasicReportControllerTest.php index 4c4c0a409..e2dcf7259 100644 --- a/tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsStandardReportControllerTest.php +++ b/tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsBasicReportControllerTest.php @@ -2,19 +2,19 @@ use Dias\Modules\Export\Jobs\GenerateReportJob; -class ExportModuleHttpControllersApiImageLabelsStandardReportControllerTest extends ApiTestCase +class ExportModuleHttpControllersApiImageLabelsBasicReportControllerTest extends ApiTestCase { public function testStore() { $id = $this->project()->id; - $this->post("api/v1/projects/{$id}/reports/image-labels/standard") + $this->post("api/v1/projects/{$id}/reports/image-labels/basic") ->assertResponseStatus(401); $this->expectsJobs(GenerateReportJob::class); $this->beGuest(); - $this->post("api/v1/projects/{$id}/reports/image-labels/standard") + $this->post("api/v1/projects/{$id}/reports/image-labels/basic") ->assertResponseOk(); } } diff --git a/tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsCsvReportControllerTest.php b/tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsCsvReportControllerTest.php new file mode 100644 index 000000000..c48bb554b --- /dev/null +++ b/tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsCsvReportControllerTest.php @@ -0,0 +1,20 @@ +project()->id; + + $this->post("api/v1/projects/{$id}/reports/image-labels/csv") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateReportJob::class); + $this->beGuest(); + $this->post("api/v1/projects/{$id}/reports/image-labels/csv") + ->assertResponseOk(); + } +} diff --git a/tests/Support/Reports/ExportModuleSupportReportsReportTest.php b/tests/Support/Reports/ExportModuleSupportReportsReportTest.php index 8697a2a80..6faa5a473 100644 --- a/tests/Support/Reports/ExportModuleSupportReportsReportTest.php +++ b/tests/Support/Reports/ExportModuleSupportReportsReportTest.php @@ -44,7 +44,7 @@ class ReportThrowNoExceptionStub extends Report public function __construct($project) { parent::__construct($project); - $this->filename = 'ab_cd'; + $this->filename = 'ab_cd_report'; $this->extension = 'txt'; } diff --git a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsStandardReportTest.php b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsBasicReportTest.php similarity index 89% rename from tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsStandardReportTest.php rename to tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsBasicReportTest.php index d0636b034..95850153f 100644 --- a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsStandardReportTest.php +++ b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsBasicReportTest.php @@ -2,9 +2,9 @@ use Dias\Modules\Export\Support\Exec; use Dias\Modules\Export\Support\CsvFile; -use Dias\Modules\Export\Support\Reports\ImageLabels\StandardReport; +use Dias\Modules\Export\Support\Reports\ImageLabels\BasicReport; -class ExportModuleSupportReportsImageLabelsStandardReportTest extends TestCase { +class ExportModuleSupportReportsImageLabelsBasicReportTest extends TestCase { public function testGenerateReport() { @@ -64,6 +64,6 @@ public function testGenerateReport() return $mock; }); - with(new StandardReport($project))->generateReport(); + with(new BasicReport($project))->generateReport(); } } diff --git a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php new file mode 100644 index 000000000..1f0c482bb --- /dev/null +++ b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php @@ -0,0 +1,66 @@ +transects()->attach($transect); + $user = UserTest::create(); + + $il = ImageLabelTest::create([ + 'image_id' => ImageTest::create([ + 'transect_id' => $transect->id, + 'filename' => 'foo.jpg', + ])->id + ]); + + // for the AvailableReport + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + $mock->path = 'abc'; + + $mock->shouldReceive('put') + ->once() + ->with([ + $il->id, + $il->image_id, + $il->image->filename, + $il->user_id, + $il->user->firstname, + $il->user->lastname, + $il->label_id, + $il->label->name, + ]); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile')->once(); + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + with(new CsvReport($project))->generateReport(); + } +} From 60dc7599a94bcec3b54b0a0f26c991e96c2f321a Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 29 Aug 2016 16:03:20 +0200 Subject: [PATCH 045/407] Fix typo --- src/resources/views/manual/tutorials/reports-schema.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index 591e1e331..05a8e44e6 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -105,7 +105,7 @@ The additional attributes of the image are encoded as a JSON object. The content may vary depending on the DIAS modules that are installed and the operations performed on the image (e.g. a laserpoint detection to calculate the area of an image).

-

Image label report

+

Image label reports

Basic

The basic image label report is an XLSX spreadsheet similar to the extended annotation report. It contains a list of all labels attached to each image of a transect. The columns are as follows: From 4ac47ca92988e6b56f8aeb06cf87ce9fed13d0d3 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 1 Sep 2016 11:56:24 +0200 Subject: [PATCH 046/407] Disable chunking as it seems to produce erroneous results References #14 --- src/Support/Reports/Annotations/BasicReport.php | 3 ++- src/Support/Reports/Annotations/CsvReport.php | 6 ++++-- src/Support/Reports/Annotations/ExtendedReport.php | 10 +++++----- src/Support/Reports/Annotations/FullReport.php | 11 +++++------ src/Support/Reports/ImageLabels/CsvReport.php | 9 +++++---- 5 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/Support/Reports/Annotations/BasicReport.php b/src/Support/Reports/Annotations/BasicReport.php index e523b5a47..df4b062b0 100644 --- a/src/Support/Reports/Annotations/BasicReport.php +++ b/src/Support/Reports/Annotations/BasicReport.php @@ -77,6 +77,7 @@ protected function query($id) return $query->whereNotIn('annotations.id', $this->getSkipIds($id)); }) ->select(DB::raw('labels.name, labels.color, count(labels.id) as count')) - ->groupBy('labels.id'); + ->groupBy('labels.id') + ->orderBy('labels.id'); } } diff --git a/src/Support/Reports/Annotations/CsvReport.php b/src/Support/Reports/Annotations/CsvReport.php index fc27bc7a1..90f59837b 100644 --- a/src/Support/Reports/Annotations/CsvReport.php +++ b/src/Support/Reports/Annotations/CsvReport.php @@ -40,8 +40,10 @@ public function generateReport() $this->tmpFiles[$id] = $csv; $query = $this->query($id); + $rows = $query->get(); - $query->chunkById(500, function ($rows) use ($csv) { + // CHUNKING IS BROKEN SOMEHOW! + // $query->chunkById(500, function ($rows) use ($csv) { foreach ($rows as $row) { $csv->put([ $row->annotation_label_id, @@ -58,7 +60,7 @@ public function generateReport() $row->attrs, ]); } - }, 'annotation_labels.id', 'annotation_label_id'); + // }, 'annotation_labels.id', 'annotation_label_id'); $csv->close(); } diff --git a/src/Support/Reports/Annotations/ExtendedReport.php b/src/Support/Reports/Annotations/ExtendedReport.php index ff83da364..0bb540e70 100644 --- a/src/Support/Reports/Annotations/ExtendedReport.php +++ b/src/Support/Reports/Annotations/ExtendedReport.php @@ -43,8 +43,10 @@ public function generateReport() $csv->put([$name]); $query = $this->query($id); + $rows = $query->get(); - $query->chunkById(500, function ($rows) use ($csv) { + // CHUNKING IS BROKEN SOMEHOW! + // $query->chunkById(500, function ($rows) use ($csv) { foreach ($rows as $row) { $csv->put([ $row->filename, @@ -52,7 +54,7 @@ public function generateReport() $row->count, ]); } - }, 'images.id', 'images_id'); + // }, 'images.id', 'images_id'); $csv->close(); } @@ -80,8 +82,6 @@ protected function query($id) ->when($this->restricted, function ($query) use ($id) { return $query->whereNotIn('annotations.id', $this->getSkipIds($id)); }) - // order by is essential for chunking! - ->orderBy('images.id') - ->orderBy('labels.id'); + ->orderBy('images.filename'); } } diff --git a/src/Support/Reports/Annotations/FullReport.php b/src/Support/Reports/Annotations/FullReport.php index d8611d216..7940bd823 100644 --- a/src/Support/Reports/Annotations/FullReport.php +++ b/src/Support/Reports/Annotations/FullReport.php @@ -43,8 +43,10 @@ public function generateReport() $csv->put([$name]); $query = $this->query($id); + $rows = $query->get(); - $query->chunkById(500, function ($rows) use ($csv) { + // CHUNKING IS BROKEN SOMEHOW! + // $query->chunkById(500, function ($rows) use ($csv) { foreach ($rows as $row) { $csv->put([ $row->filename, @@ -55,7 +57,7 @@ public function generateReport() $row->attrs ]); } - }, 'annotation_labels.id', 'annotation_labels_id'); + // }, 'annotation_labels.id', 'annotation_labels_id'); $csv->close(); } @@ -90,9 +92,6 @@ protected function query($id) ->when($this->restricted, function ($query) use ($id) { return $query->whereNotIn('annotations.id', $this->getSkipIds($id)); }) - // order by is essential for chunking! - ->orderBy('annotations.id') - ->orderBy('labels.id') - ->orderBy('annotation_labels.user_id'); + ->orderBy('annotations.id'); } } diff --git a/src/Support/Reports/ImageLabels/CsvReport.php b/src/Support/Reports/ImageLabels/CsvReport.php index 8a6ec095f..3840f7eb9 100644 --- a/src/Support/Reports/ImageLabels/CsvReport.php +++ b/src/Support/Reports/ImageLabels/CsvReport.php @@ -40,8 +40,10 @@ public function generateReport() $this->tmpFiles[$id] = $csv; $query = $this->query($id); + $rows = $query->get(); - $query->chunkById(500, function ($rows) use ($csv) { + // CHUNKING IS BROKEN SOMEHOW! + // $query->chunkById(500, function ($rows) use ($csv) { foreach ($rows as $row) { $csv->put([ $row->image_label_id, @@ -54,7 +56,7 @@ public function generateReport() $row->label_name, ]); } - }, 'image_labels.id', 'image_label_id'); + // }, 'image_labels.id', 'image_label_id'); $csv->close(); } @@ -85,7 +87,6 @@ protected function query($id) 'labels.name as label_name', ]) ->where('images.transect_id', $id) - ->orderBy('images.filename') - ->orderBy('image_labels.label_id'); + ->orderBy('images.filename'); } } From e31a0adc2ee13ed014c3925aacdb557019cadd04 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 1 Sep 2016 14:12:03 +0200 Subject: [PATCH 047/407] Entirely remove chunking for extended annotation report --- .../Reports/Annotations/ExtendedReport.php | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/Support/Reports/Annotations/ExtendedReport.php b/src/Support/Reports/Annotations/ExtendedReport.php index 0bb540e70..c1aaac556 100644 --- a/src/Support/Reports/Annotations/ExtendedReport.php +++ b/src/Support/Reports/Annotations/ExtendedReport.php @@ -45,16 +45,14 @@ public function generateReport() $query = $this->query($id); $rows = $query->get(); - // CHUNKING IS BROKEN SOMEHOW! - // $query->chunkById(500, function ($rows) use ($csv) { - foreach ($rows as $row) { - $csv->put([ - $row->filename, - $row->name, - $row->count, - ]); - } - // }, 'images.id', 'images_id'); + // DO NOT USE CHUNK BECAUSE IT DESTROYS groupBy! + foreach ($rows as $row) { + $csv->put([ + $row->filename, + $row->name, + $row->count, + ]); + } $csv->close(); } From a27d6b0b6d96e6746e4482059feed2defa2a879f Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 1 Sep 2016 14:30:52 +0200 Subject: [PATCH 048/407] Fix request report Angular resource URL --- src/public/assets/scripts/projects.js | 2 +- .../assets/js/projects/factories/Report.js | 32 +++++++++++++++---- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/public/assets/scripts/projects.js b/src/public/assets/scripts/projects.js index 2c4ee0935..b67721485 100644 --- a/src/public/assets/scripts/projects.js +++ b/src/public/assets/scripts/projects.js @@ -1 +1 @@ -angular.module("dias.projects").controller("ExportController",["$scope","Report","msg","PROJECT",function(e,t,n,a){"use strict";var o=!1,s=["basic annotation","extended annotation","full annotation","annotation CSV","basic image label","image label CSV"],i=[t.getBasic,t.getExtended,t.getFull,t.getCsv,t.getImageLabel,t.getImageLabelCsv],r=[0,1,2,3],c=function(){o=!0},d=function(e){o=!1,n.responseError(e)};e.selected={index:0,option:"0",restrict:!1},e.canBeRestricted=function(){return r.indexOf(e.selected.index)!==-1},e.requestReport=function(){if(void 0!==e.selected.index){var t={};e.canBeRestricted()&&(t.restrict=e.selected.restrict?"1":"0"),i[e.selected.index]({project_id:a.id},t,c,d)}},e.isRequested=function(){return o},e.getSelectedName=function(){return s[e.selected.index]},e.$watch("selected.option",function(t){e.selected.index=parseInt(t)})}]),angular.module("dias.projects").factory("Report",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/projects/:project_id/reports/:type",{},{getBasic:{method:"POST",params:{type:"annotations/basic"}},getExtended:{method:"POST",params:{type:"annotations/extended"}},getFull:{method:"POST",params:{type:"annotations/full"}},getCsv:{method:"POST",params:{type:"annotations/csv"}},getImageLabel:{method:"POST",params:{type:"image-labels/basic"}},getImageLabelCsv:{method:"POST",params:{type:"image-labels/csv"}}})}]); \ No newline at end of file +angular.module("dias.projects").controller("ExportController",["$scope","Report","msg","PROJECT",function(e,t,a,n){"use strict";var i=!1,r=["basic annotation","extended annotation","full annotation","annotation CSV","basic image label","image label CSV"],o=[t.getBasic,t.getExtended,t.getFull,t.getCsv,t.getImageLabel,t.getImageLabelCsv],s=[0,1,2,3],c=function(){i=!0},d=function(e){i=!1,a.responseError(e)};e.selected={index:0,option:"0",restrict:!1},e.canBeRestricted=function(){return s.indexOf(e.selected.index)!==-1},e.requestReport=function(){if(void 0!==e.selected.index){var t={};e.canBeRestricted()&&(t.restrict=e.selected.restrict?"1":"0"),o[e.selected.index]({project_id:n.id},t,c,d)}},e.isRequested=function(){return i},e.getSelectedName=function(){return r[e.selected.index]},e.$watch("selected.option",function(t){e.selected.index=parseInt(t)})}]),angular.module("dias.projects").factory("Report",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/projects/:project_id/reports/:type/:variant",{},{getBasic:{method:"POST",params:{type:"annotations",variant:"basic"}},getExtended:{method:"POST",params:{type:"annotations",variant:"extended"}},getFull:{method:"POST",params:{type:"annotations",variant:"full"}},getCsv:{method:"POST",params:{type:"annotations",variant:"csv"}},getImageLabel:{method:"POST",params:{type:"image-labels",variant:"basic"}},getImageLabelCsv:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]); \ No newline at end of file diff --git a/src/resources/assets/js/projects/factories/Report.js b/src/resources/assets/js/projects/factories/Report.js index 23f598f3e..bbb5e7bee 100644 --- a/src/resources/assets/js/projects/factories/Report.js +++ b/src/resources/assets/js/projects/factories/Report.js @@ -22,12 +22,30 @@ Report.getImageLabel({project_id: 1}, {}); angular.module('dias.projects').factory('Report', function ($resource, URL) { "use strict"; - return $resource(URL + '/api/v1/projects/:project_id/reports/:type', {}, { - getBasic: {method: 'POST', params: {type: 'annotations/basic'}}, - getExtended: {method: 'POST', params: {type: 'annotations/extended'}}, - getFull: {method: 'POST', params: {type: 'annotations/full'}}, - getCsv: {method: 'POST', params: {type: 'annotations/csv'}}, - getImageLabel: {method: 'POST', params: {type: 'image-labels/basic'}}, - getImageLabelCsv: {method: 'POST', params: {type: 'image-labels/csv'}} + return $resource(URL + '/api/v1/projects/:project_id/reports/:type/:variant', {}, { + getBasic: { + method: 'POST', + params: {type: 'annotations', variant: 'basic'} + }, + getExtended: { + method: 'POST', + params: {type: 'annotations', variant: 'extended'} + }, + getFull: { + method: 'POST', + params: {type: 'annotations', variant: 'full'} + }, + getCsv: { + method: 'POST', + params: {type: 'annotations', variant: 'csv'} + }, + getImageLabel: { + method: 'POST', + params: {type: 'image-labels', variant: 'basic'} + }, + getImageLabelCsv: { + method: 'POST', + params: {type: 'image-labels', variant: 'csv' + }} }); }); From e724fef5f5d021b0099139689c9710756e7f5c36 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 1 Sep 2016 15:23:15 +0200 Subject: [PATCH 049/407] Increase memory limit for generating large reports This is required because of the disabled chunking. References #14 --- src/Jobs/GenerateReportJob.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/Jobs/GenerateReportJob.php b/src/Jobs/GenerateReportJob.php index b2f31d732..b6b9792e5 100644 --- a/src/Jobs/GenerateReportJob.php +++ b/src/Jobs/GenerateReportJob.php @@ -14,6 +14,13 @@ class GenerateReportJob extends Job implements ShouldQueue { use InteractsWithQueue, SerializesModels; + /** + * Memory limit to set during generating a report. + * + * @var string + */ + const MEMORY_LIMIT = '512M'; + /** * The user to notify of the finished report. * @@ -45,7 +52,14 @@ public function __construct(Report $report, User $user) */ public function handle() { + $memoryLimit = ini_get('memory_limit'); + // increase memory limit for generating large reports + ini_set('memory_limit', self::MEMORY_LIMIT); + $this->report->generate(); $this->user->notify(new ReportReady($this->report)); + + // restore default memory limit + ini_set('memory_limit', $memoryLimit); } } From 1ec8896adc543652230bd1f3263a2f6653c40af7 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 26 Sep 2016 10:39:19 +0200 Subject: [PATCH 050/407] Add column headers to CSV reports Closes #17 --- src/Support/Reports/Annotations/CsvReport.php | 16 ++++++++++++++++ src/Support/Reports/ImageLabels/CsvReport.php | 12 ++++++++++++ ...leSupportReportsAnnotationsCsvReportTest.php | 17 +++++++++++++++++ ...leSupportReportsImageLabelsCsvReportTest.php | 13 +++++++++++++ 4 files changed, 58 insertions(+) diff --git a/src/Support/Reports/Annotations/CsvReport.php b/src/Support/Reports/Annotations/CsvReport.php index 90f59837b..49ce6b8a4 100644 --- a/src/Support/Reports/Annotations/CsvReport.php +++ b/src/Support/Reports/Annotations/CsvReport.php @@ -39,6 +39,22 @@ public function generateReport() $csv = CsvFile::makeTmp(); $this->tmpFiles[$id] = $csv; + // add column headers + $csv->put([ + 'annotation_label_id', + 'label_id', + 'label_name', + 'user_id', + 'firstname', + 'lastname', + 'image_id', + 'filename', + 'shape_id', + 'shape_name', + 'points', + 'attributes', + ]); + $query = $this->query($id); $rows = $query->get(); diff --git a/src/Support/Reports/ImageLabels/CsvReport.php b/src/Support/Reports/ImageLabels/CsvReport.php index 3840f7eb9..f2d7dbe62 100644 --- a/src/Support/Reports/ImageLabels/CsvReport.php +++ b/src/Support/Reports/ImageLabels/CsvReport.php @@ -39,6 +39,18 @@ public function generateReport() $csv = CsvFile::makeTmp(); $this->tmpFiles[$id] = $csv; + // add column headers + $csv->put([ + 'image_label_id', + 'image_id', + 'filename', + 'user_id', + 'firstname', + 'lastname', + 'label_id', + 'label_name', + ]); + $query = $this->query($id); $rows = $query->get(); diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php index f54619ab2..785fe873e 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php @@ -26,6 +26,23 @@ public function testGenerateReport() $mock = Mockery::mock(); $mock->path = 'abc'; + $mock->shouldReceive('put') + ->once() + ->with([ + 'annotation_label_id', + 'label_id', + 'label_name', + 'user_id', + 'firstname', + 'lastname', + 'image_id', + 'filename', + 'shape_id', + 'shape_name', + 'points', + 'attributes', + ]); + $mock->shouldReceive('put') ->once() ->with([ diff --git a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php index 1f0c482bb..6ea977250 100644 --- a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php +++ b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php @@ -28,6 +28,19 @@ public function testGenerateReport() $mock = Mockery::mock(); $mock->path = 'abc'; + $mock->shouldReceive('put') + ->once() + ->with([ + 'image_label_id', + 'image_id', + 'filename', + 'user_id', + 'firstname', + 'lastname', + 'label_id', + 'label_name', + ]); + $mock->shouldReceive('put') ->once() ->with([ From 9ce77b13c345ddb00a29ae785504b161162f109c Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 26 Sep 2016 13:20:19 +0200 Subject: [PATCH 051/407] Implement expanded label names Closes #16 --- src/Support/Reports/Annotations/CsvReport.php | 6 +- .../Reports/Annotations/ExtendedReport.php | 8 +- .../Reports/Annotations/FullReport.php | 5 +- .../Reports/ImageLabels/BasicReport.php | 5 +- src/Support/Reports/ImageLabels/CsvReport.php | 4 +- src/Support/Reports/Report.php | 78 +++++++++++++++ .../manual/tutorials/reports-schema.blade.php | 94 +++++++++++-------- ...SupportReportsAnnotationsCsvReportTest.php | 15 ++- ...rtReportsAnnotationsExtendedReportTest.php | 13 ++- ...upportReportsAnnotationsFullReportTest.php | 12 ++- .../ExportModuleSupportReportsReportTest.php | 30 ++++++ ...pportReportsImageLabelsBasicReportTest.php | 11 ++- ...SupportReportsImageLabelsCsvReportTest.php | 11 ++- 13 files changed, 224 insertions(+), 68 deletions(-) diff --git a/src/Support/Reports/Annotations/CsvReport.php b/src/Support/Reports/Annotations/CsvReport.php index 49ce6b8a4..4d189593c 100644 --- a/src/Support/Reports/Annotations/CsvReport.php +++ b/src/Support/Reports/Annotations/CsvReport.php @@ -64,7 +64,7 @@ public function generateReport() $csv->put([ $row->annotation_label_id, $row->label_id, - $row->label_name, + $this->expandLabelName($row->label_id), $row->user_id, $row->firstname, $row->lastname, @@ -94,15 +94,13 @@ public function generateReport() protected function query($id) { return DB::table('annotation_labels') - ->join('labels', 'annotation_labels.label_id', '=', 'labels.id') ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') ->join('images', 'annotations.image_id', '=', 'images.id') ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') ->join('users', 'annotation_labels.user_id', '=', 'users.id') ->select([ 'annotation_labels.id as annotation_label_id', - 'labels.id as label_id', - 'labels.name as label_name', + 'annotation_labels.label_id', 'users.id as user_id', 'users.firstname', 'users.lastname', diff --git a/src/Support/Reports/Annotations/ExtendedReport.php b/src/Support/Reports/Annotations/ExtendedReport.php index c1aaac556..2d5d5e01c 100644 --- a/src/Support/Reports/Annotations/ExtendedReport.php +++ b/src/Support/Reports/Annotations/ExtendedReport.php @@ -49,7 +49,7 @@ public function generateReport() foreach ($rows as $row) { $csv->put([ $row->filename, - $row->name, + $this->expandLabelName($row->label_id), $row->count, ]); } @@ -72,10 +72,8 @@ protected function query($id) return DB::table('images') ->join('annotations', 'annotations.image_id', '=', 'images.id') ->join('annotation_labels', 'annotation_labels.annotation_id', '=', 'annotations.id') - ->join('labels', 'annotation_labels.label_id', '=', 'labels.id') - // images.id is required for chunkById - ->select(DB::raw('images.id as images_id, images.filename, labels.name, count(labels.id) as count')) - ->groupBy('labels.id', 'images.id') + ->select(DB::raw('images.filename, annotation_labels.label_id, count(annotation_labels.label_id) as count')) + ->groupBy('annotation_labels.label_id', 'images.id') ->where('images.transect_id', $id) ->when($this->restricted, function ($query) use ($id) { return $query->whereNotIn('annotations.id', $this->getSkipIds($id)); diff --git a/src/Support/Reports/Annotations/FullReport.php b/src/Support/Reports/Annotations/FullReport.php index 7940bd823..e1d539f1b 100644 --- a/src/Support/Reports/Annotations/FullReport.php +++ b/src/Support/Reports/Annotations/FullReport.php @@ -51,7 +51,7 @@ public function generateReport() $csv->put([ $row->filename, $row->annotation_id, - $row->label_name, + $this->expandLabelName($row->label_id), $row->shape_name, $row->points, $row->attrs @@ -75,7 +75,6 @@ public function generateReport() protected function query($id) { return DB::table('annotation_labels') - ->join('labels', 'annotation_labels.label_id', '=', 'labels.id') ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') ->join('images', 'annotations.image_id', '=', 'images.id') ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') @@ -83,7 +82,7 @@ protected function query($id) 'annotation_labels.id as annotation_labels_id', // required for chunkById 'images.filename', 'annotations.id as annotation_id', - 'labels.name as label_name', + 'annotation_labels.label_id', 'shapes.name as shape_name', 'annotations.points', 'images.attrs' diff --git a/src/Support/Reports/ImageLabels/BasicReport.php b/src/Support/Reports/ImageLabels/BasicReport.php index 33c6d65b1..6505f1fe2 100644 --- a/src/Support/Reports/ImageLabels/BasicReport.php +++ b/src/Support/Reports/ImageLabels/BasicReport.php @@ -50,7 +50,7 @@ public function generateReport() $row[0]->id, $row[0]->filename, $row->map(function ($row) { - return $row->name; + return $this->expandLabelName($row->label_id); })->implode(', '), ]); } @@ -71,8 +71,7 @@ protected function query($id) { return DB::table('image_labels') ->join('images', 'image_labels.image_id', '=', 'images.id') - ->join('labels', 'image_labels.label_id', '=', 'labels.id') - ->select('images.id', 'images.filename', 'labels.name') + ->select('images.id', 'images.filename', 'image_labels.label_id') ->where('images.transect_id', $id) ->orderBy('images.filename'); } diff --git a/src/Support/Reports/ImageLabels/CsvReport.php b/src/Support/Reports/ImageLabels/CsvReport.php index f2d7dbe62..376ae5dd6 100644 --- a/src/Support/Reports/ImageLabels/CsvReport.php +++ b/src/Support/Reports/ImageLabels/CsvReport.php @@ -65,7 +65,7 @@ public function generateReport() $row->firstname, $row->lastname, $row->label_id, - $row->label_name, + $this->expandLabelName($row->label_id), ]); } // }, 'image_labels.id', 'image_label_id'); @@ -86,7 +86,6 @@ protected function query($id) { return DB::table('image_labels') ->join('images', 'image_labels.image_id', '=', 'images.id') - ->join('labels', 'image_labels.label_id', '=', 'labels.id') ->join('users', 'image_labels.user_id', '=', 'users.id') ->select([ 'image_labels.id as image_label_id', @@ -96,7 +95,6 @@ protected function query($id) 'users.firstname', 'users.lastname', 'image_labels.label_id', - 'labels.name as label_name', ]) ->where('images.transect_id', $id) ->orderBy('images.filename'); diff --git a/src/Support/Reports/Report.php b/src/Support/Reports/Report.php index a44d6d209..4800b15fd 100644 --- a/src/Support/Reports/Report.php +++ b/src/Support/Reports/Report.php @@ -4,6 +4,7 @@ use File; use Exception; +use Dias\Label; use Dias\Project; use Dias\Modules\Export\AvailableReport; @@ -51,6 +52,15 @@ class Report */ protected $availableReport; + /** + * Cache for labels of all label trees that were used in this project. + * + * Not necessarily only the label trees that are currently attached to the project! + * + * @var \Illuminate\Support\Collection + */ + protected $labels; + /** * Create a report instance. * @@ -139,4 +149,72 @@ public function getDownloadFilename() { return "biigle_{$this->project->id}_{$this->getFilename()}.{$this->extension}"; } + + /** + * Constructs a label name from the names of all parent labels and the label itself. + * + * Example: `Animalia > Annelida > Polychaeta > Buskiella sp` + * + * @param int $id Label ID + * @return string + */ + public function expandLabelName($id) + { + if (is_null($this->labels)) { + // We expect most of the used labels to belong to a label tree currently + // attached to the project. + $this->labels = $this->getProjectLabels()->keyBy('id'); + } + + if (!$this->labels->has($id)) { + // If another label tree was used, fetch it separately. + $labels = $this->getSiblingLabels($id); + $this->labels = $this->labels->merge($labels)->keyBy('id'); + } + + $label = $this->labels[$id]; + $name = $label->name; + + while (!is_null($label->parent_id)) { + // We can assume that all parents belong to the same label tree so they + // should already be cached here. + $label = $this->labels[$label->parent_id]; + $name = "{$label->name} > {$name}"; + } + + return $name; + } + + /** + * Get all labels that are attached to the project of this report (through label trees). + * + * @return \Illuminate\Support\Collection + */ + protected function getProjectLabels() + { + return Label::select('id', 'name', 'parent_id') + ->whereIn('label_tree_id', function ($query) { + $query->select('label_tree_id') + ->from('label_tree_project') + ->where('project_id', $this->project->id); + }) + ->get(); + } + + /** + * Get all labels that belong to the label tree of the given label. + * + * @param int $id Label ID + * @return \Illuminate\Support\Collection + */ + protected function getSiblingLabels($id) + { + return Label::select('id', 'name', 'parent_id') + ->whereIn('label_tree_id', function ($query) use ($id) { + $query->select('label_tree_id') + ->from('labels') + ->where('id', $id); + }) + ->get(); + } } diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index 05a8e44e6..594cc7d03 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -34,9 +34,21 @@ Each sheet contains the name of the transect as the first line. The columns are as follows:

    -
  1. Image filename
  2. -
  3. Label name
  4. -
  5. Label abundance
  6. +
  7. Image filename
  8. +
  9. + Label name +

    + The label name contains all label names from the root label to the child label, separated by a >. If we have the following label tree: +

    +Animalia
    +└─ Annelida
    +   └─ Polychaeta
    +      └─ Buskiella sp
    +
    + Then the content of the "label name" column for annotations with the label "Buskiella sp" will be Animalia > Annelida > Polychaeta > Buskiella sp. +

    +
  10. +
  11. Label abundance

Full

@@ -48,13 +60,13 @@ Each sheet contains the name of the transect as the first line. The columns are as follows:

    -
  1. Image filename
  2. -
  3. Annotation ID
  4. -
  5. Annotation shape name
  6. -
  7. X-Coordinate(s) of the annotation (may span multiple lines)
  8. -
  9. Y-Coordinate(s) of the annotation (may span multiple lines)
  10. -
  11. Labels of the annotation in a comma separated list
  12. -
  13. The area of the image in m² if available
  14. +
  15. Image filename
  16. +
  17. Annotation ID
  18. +
  19. Annotation shape name
  20. +
  21. X-Coordinate(s) of the annotation (may span multiple lines)
  22. +
  23. Y-Coordinate(s) of the annotation (may span multiple lines)
  24. +
  25. Comma separated list of label names (see the extended report on how to interpret a label name)
  26. +
  27. The area of the image in m² if available

For the different annotation shapes, the coordinates are interpreted as follows: @@ -85,25 +97,29 @@ The CSV files contains one row for each annotation label. Since an annotation can have multiple labels, there may be multiple rows for a single annotation. The columns are as follows:

    -
  1. Annotation label ID (not the annotation ID)
  2. -
  3. Label ID
  4. -
  5. Label name
  6. -
  7. ID of the user who created/attached the annotation label
  8. -
  9. User firstname
  10. -
  11. User lastname
  12. -
  13. Image ID
  14. -
  15. Image filename
  16. -
  17. Annotation shape ID
  18. -
  19. Annotation shape name
  20. -
  21. Annotation points
  22. -
  23. Additional attributes of the image
  24. +
  25. Annotation label ID (not the annotation ID)
  26. +
  27. Label ID
  28. +
  29. Label name (see the extended report on how to interpret a label name)
  30. +
  31. ID of the user who created/attached the annotation label
  32. +
  33. User firstname
  34. +
  35. User lastname
  36. +
  37. Image ID
  38. +
  39. Image filename
  40. +
  41. Annotation shape ID
  42. +
  43. Annotation shape name
  44. +
  45. + Annotation points +

    + The annotation points are encoded as a JSON array of alternating x and y values (e.g. [x1,y1,x2,y2,...]). For circles, the third value of the points array is the radius of the circle. +

    +
  46. +
  47. + Additional attributes of the image +

    + The additional attributes of the image are encoded as a JSON object. The content may vary depending on the DIAS modules that are installed and the operations performed on the image (e.g. a laserpoint detection to calculate the area of an image). +

    +
-

- The annotation points are encoded as a JSON array of alternating x and y values (e.g. [x1,y1,x2,y2,...]). For circles, the third value of the points array is the radius of the circle. -

-

- The additional attributes of the image are encoded as a JSON object. The content may vary depending on the DIAS modules that are installed and the operations performed on the image (e.g. a laserpoint detection to calculate the area of an image). -

Image label reports

Basic

@@ -111,9 +127,9 @@ The basic image label report is an XLSX spreadsheet similar to the extended annotation report. It contains a list of all labels attached to each image of a transect. The columns are as follows:

    -
  1. Image ID
  2. -
  3. Image filename
  4. -
  5. Comma separated list of label names
  6. +
  7. Image ID
  8. +
  9. Image filename
  10. +
  11. Comma separated list of label names (see the extended annotation report on how to interpret a label name)

CSV

@@ -124,14 +140,14 @@ The CSV files contains one row for each image label. Since an image can have multiple different labels, there may be multiple rows for a single image. The columns are as follows:

    -
  1. Image label ID
  2. -
  3. Image ID
  4. -
  5. Image filename
  6. -
  7. ID of the user who attached the image label
  8. -
  9. User firstname
  10. -
  11. User lastname
  12. -
  13. Label ID
  14. -
  15. Label name
  16. +
  17. Image label ID
  18. +
  19. Image ID
  20. +
  21. Image filename
  22. +
  23. ID of the user who attached the image label
  24. +
  25. User firstname
  26. +
  27. User lastname
  28. +
  29. Label ID
  30. +
  31. Label name (see the extended annotation report on how to interpret a label name)
@endsection diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php index 785fe873e..07e681a19 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php @@ -13,11 +13,20 @@ public function testGenerateReport() ]); $project->transects()->attach($transect); - $al = AnnotationLabelTest::create(); + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + + $al = AnnotationLabelTest::create([ + 'label_id' => $child->id, + ]); $al->annotation->image->transect_id = $transect->id; $al->annotation->image->attrs = ['image' => 'attrs']; $al->annotation->image->save(); + // for the AvailableReport File::shouldReceive('exists') ->once() @@ -47,8 +56,8 @@ public function testGenerateReport() ->once() ->with([ $al->id, - $al->label_id, - $al->label->name, + $child->id, + "{$root->name} > {$child->name}", $al->user_id, $al->user->firstname, $al->user->lastname, diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php index a87ffafd1..0298ccd7f 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php @@ -15,9 +15,18 @@ public function testGenerateReport() $project->transects()->attach($transect); $user = UserTest::create(); - $al = AnnotationLabelTest::create(); + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + + $al = AnnotationLabelTest::create([ + 'label_id' => $child->id, + ]); $al->annotation->image->transect_id = $transect->id; $al->annotation->image->save(); + AnnotationLabelTest::create([ 'annotation_id' => $al->annotation_id, 'label_id' => $al->label_id, @@ -39,7 +48,7 @@ public function testGenerateReport() $mock->shouldReceive('put') ->once() - ->with([$al->annotation->image->filename, $al->label->name, 2]); + ->with([$al->annotation->image->filename, "{$root->name} > {$child->name}", 2]); $mock->shouldReceive('put') ->once() diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php index 2e95da36e..4faf68ad4 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php @@ -15,7 +15,15 @@ public function testGenerateReport() $project->transects()->attach($transect); $user = UserTest::create(); - $al = AnnotationLabelTest::create(); + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + + $al = AnnotationLabelTest::create([ + 'label_id' => $child->id, + ]); $al->annotation->image->transect_id = $transect->id; $al->annotation->image->attrs = ['image' => 'attrs']; $al->annotation->image->save(); @@ -37,7 +45,7 @@ public function testGenerateReport() ->with([ $al->annotation->image->filename, $al->annotation_id, - $al->label->name, + "{$root->name} > {$child->name}", $al->annotation->shape->name, json_encode($al->annotation->points), json_encode(['image' => 'attrs']), diff --git a/tests/Support/Reports/ExportModuleSupportReportsReportTest.php b/tests/Support/Reports/ExportModuleSupportReportsReportTest.php index 6faa5a473..548a554b1 100644 --- a/tests/Support/Reports/ExportModuleSupportReportsReportTest.php +++ b/tests/Support/Reports/ExportModuleSupportReportsReportTest.php @@ -23,6 +23,36 @@ public function testGetUrl() $url = with(new ReportThrowNoExceptionStub($project))->getUrl(); $this->assertTrue(ends_with($url, 'ab_cd_report.txt')); } + + public function testExpandLabelNameOwnTree() + { + $project = ProjectTest::create(); + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + $project->labelTrees()->attach($root->tree); + + $report = new Report($project); + + $this->assertEquals("{$root->name} > {$child->name}", $report->expandLabelName($child->id)); + } + + public function testExpandLabelNameOtherTree() + { + $project = ProjectTest::create(); + // these labels do NOT belong to a label tree attached to the project + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + + $report = new Report($project); + + $this->assertEquals("{$root->name} > {$child->name}", $report->expandLabelName($child->id)); + } } class ReportThrowExceptionStub extends Report diff --git a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsBasicReportTest.php b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsBasicReportTest.php index 95850153f..e87d45771 100644 --- a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsBasicReportTest.php +++ b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsBasicReportTest.php @@ -24,11 +24,18 @@ public function testGenerateReport() 'image_id' => $il->image_id, ]); + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + $il3 = ImageLabelTest::create([ 'image_id' => ImageTest::create([ 'transect_id' => $transect->id, 'filename' => 'bar.jpg', - ])->id + ])->id, + 'label_id' => $child->id, ]); // for the AvailableReport @@ -49,7 +56,7 @@ public function testGenerateReport() $mock->shouldReceive('put') ->once() - ->with([$il3->image->id, $il3->image->filename, $il3->label->name]); + ->with([$il3->image->id, $il3->image->filename, "{$root->name} > {$child->name}"]); $mock->shouldReceive('close') ->once(); diff --git a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php index 6ea977250..739092889 100644 --- a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php +++ b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php @@ -13,11 +13,18 @@ public function testGenerateReport() $project->transects()->attach($transect); $user = UserTest::create(); + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + $il = ImageLabelTest::create([ 'image_id' => ImageTest::create([ 'transect_id' => $transect->id, 'filename' => 'foo.jpg', - ])->id + ])->id, + 'label_id' => $child->id, ]); // for the AvailableReport @@ -51,7 +58,7 @@ public function testGenerateReport() $il->user->firstname, $il->user->lastname, $il->label_id, - $il->label->name, + "{$root->name} > {$child->name}", ]); $mock->shouldReceive('close') From 60bbfc4a879e8730857fdcd13d935fb045bdd514 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 26 Sep 2016 14:20:55 +0200 Subject: [PATCH 052/407] Implement generic report options Used for the "restrict to annotation area" option and intended for the "separate label trees" option of #12. --- .../Api/Annotations/BasicReportController.php | 8 ++--- .../Api/Annotations/CsvReportController.php | 8 ++--- .../Annotations/ExtendedReportController.php | 8 ++--- .../Api/Annotations/FullReportController.php | 8 ++--- src/Jobs/GenerateReportJob.php | 4 +-- .../Reports/Annotations/AnnotationReport.php | 33 +++++++------------ .../Reports/Annotations/BasicReport.php | 8 ++--- src/Support/Reports/Annotations/CsvReport.php | 8 ++--- .../Reports/Annotations/ExtendedReport.php | 8 ++--- .../Reports/Annotations/FullReport.php | 8 ++--- .../Reports/ImageLabels/BasicReport.php | 5 +-- src/Support/Reports/ImageLabels/CsvReport.php | 5 +-- src/Support/Reports/Report.php | 13 ++++++-- ...piAnnotationsBasicReportControllerTest.php | 7 ++++ ...sApiAnnotationsCsvReportControllerTest.php | 7 ++++ ...nnotationsExtendedReportControllerTest.php | 7 ++++ ...ApiAnnotationsFullReportControllerTest.php | 7 ++++ ...ReportsAnnotationsAnnotationReportTest.php | 2 +- ...pportReportsAnnotationsBasicReportTest.php | 2 +- ...SupportReportsAnnotationsCsvReportTest.php | 2 +- ...rtReportsAnnotationsExtendedReportTest.php | 2 +- ...upportReportsAnnotationsFullReportTest.php | 2 +- 22 files changed, 96 insertions(+), 66 deletions(-) diff --git a/src/Http/Controllers/Api/Annotations/BasicReportController.php b/src/Http/Controllers/Api/Annotations/BasicReportController.php index 1b834b00a..67736a8f5 100644 --- a/src/Http/Controllers/Api/Annotations/BasicReportController.php +++ b/src/Http/Controllers/Api/Annotations/BasicReportController.php @@ -32,9 +32,9 @@ public function store(Request $request, Guard $auth, $id) $project = Project::findOrFail($id); $this->authorize('access', $project); $this->validate($request, ['restrict' => 'boolean']); - $this->dispatch(new GenerateReportJob( - new BasicReport($project, (bool) $request->input('restrict', false)), - $auth->user() - )); + $report = new BasicReport($project, [ + 'restricted' => (bool) $request->input('restrict', false), + ]); + $this->dispatch(new GenerateReportJob($report, $auth->user())); } } diff --git a/src/Http/Controllers/Api/Annotations/CsvReportController.php b/src/Http/Controllers/Api/Annotations/CsvReportController.php index eb0d11541..352c3faa0 100644 --- a/src/Http/Controllers/Api/Annotations/CsvReportController.php +++ b/src/Http/Controllers/Api/Annotations/CsvReportController.php @@ -32,9 +32,9 @@ public function store(Request $request, Guard $auth, $id) $project = Project::findOrFail($id); $this->authorize('access', $project); $this->validate($request, ['restrict' => 'boolean']); - $this->dispatch(new GenerateReportJob( - new CsvReport($project, (bool) $request->input('restrict', false)), - $auth->user() - )); + $report = new CsvReport($project, [ + 'restricted' => (bool) $request->input('restrict', false), + ]); + $this->dispatch(new GenerateReportJob($report, $auth->user())); } } diff --git a/src/Http/Controllers/Api/Annotations/ExtendedReportController.php b/src/Http/Controllers/Api/Annotations/ExtendedReportController.php index bf3074207..575c5372d 100644 --- a/src/Http/Controllers/Api/Annotations/ExtendedReportController.php +++ b/src/Http/Controllers/Api/Annotations/ExtendedReportController.php @@ -32,9 +32,9 @@ public function store(Request $request, Guard $auth, $id) $project = Project::findOrFail($id); $this->authorize('access', $project); $this->validate($request, ['restrict' => 'boolean']); - $this->dispatch(new GenerateReportJob( - new ExtendedReport($project, (bool) $request->input('restrict', false)), - $auth->user() - )); + $report = new ExtendedReport($project, [ + 'restricted' => (bool) $request->input('restrict', false), + ]); + $this->dispatch(new GenerateReportJob($report, $auth->user())); } } diff --git a/src/Http/Controllers/Api/Annotations/FullReportController.php b/src/Http/Controllers/Api/Annotations/FullReportController.php index 097a8073e..2582087d9 100644 --- a/src/Http/Controllers/Api/Annotations/FullReportController.php +++ b/src/Http/Controllers/Api/Annotations/FullReportController.php @@ -32,9 +32,9 @@ public function store(Request $request, Guard $auth, $id) $project = Project::findOrFail($id); $this->authorize('access', $project); $this->validate($request, ['restrict' => 'boolean']); - $this->dispatch(new GenerateReportJob( - new FullReport($project, (bool) $request->input('restrict', false)), - $auth->user() - )); + $report = new FullReport($project, [ + 'restricted' => (bool) $request->input('restrict', false), + ]); + $this->dispatch(new GenerateReportJob($report, $auth->user())); } } diff --git a/src/Jobs/GenerateReportJob.php b/src/Jobs/GenerateReportJob.php index b6b9792e5..79ea60e29 100644 --- a/src/Jobs/GenerateReportJob.php +++ b/src/Jobs/GenerateReportJob.php @@ -26,14 +26,14 @@ class GenerateReportJob extends Job implements ShouldQueue * * @var User */ - protected $user; + public $user; /** * The report that should be generated. * * @var Report */ - protected $report; + public $report; /** * Create a new job instance. diff --git a/src/Support/Reports/Annotations/AnnotationReport.php b/src/Support/Reports/Annotations/AnnotationReport.php index 14116ed95..1a9c85c16 100644 --- a/src/Support/Reports/Annotations/AnnotationReport.php +++ b/src/Support/Reports/Annotations/AnnotationReport.php @@ -9,25 +9,6 @@ class AnnotationReport extends Report { - /** - * Specifies if the report is restricted to the export area - * - * @var bool - */ - protected $restricted; - - /** - * Create a report instance. - * - * @param Project $project The project for which the report should be generated. - * @param bool $restricted Is the report restricted to the export area? - */ - public function __construct(Project $project, $restricted) - { - parent::__construct($project); - $this->restricted = $restricted; - } - /** * Get the report name * @@ -35,7 +16,7 @@ public function __construct(Project $project, $restricted) */ public function getName() { - if ($this->restricted) { + if ($this->isRestricted()) { return "{$this->name} (restricted to export area)"; } @@ -49,7 +30,7 @@ public function getName() */ public function getFilename() { - if ($this->restricted) { + if ($this->isRestricted()) { return "{$this->filename}_restricted"; } @@ -115,4 +96,14 @@ protected function getSkipIds($id) return $skip; } + + /** + * Should this report be restricted to the export area? + * + * @return boolean + */ + protected function isRestricted() + { + return $this->options->get('restricted', false); + } } diff --git a/src/Support/Reports/Annotations/BasicReport.php b/src/Support/Reports/Annotations/BasicReport.php index df4b062b0..b21fbdcda 100644 --- a/src/Support/Reports/Annotations/BasicReport.php +++ b/src/Support/Reports/Annotations/BasicReport.php @@ -15,11 +15,11 @@ class BasicReport extends AnnotationReport * Create an image label report instance. * * @param Project $project The project for which the report should be generated. - * @param bool $restricted Is the report restricted to the export area? + * @param array $options Options for the report */ - public function __construct(Project $project, $restricted) + public function __construct(Project $project, $options = []) { - parent::__construct($project, $restricted); + parent::__construct($project, $options); $this->name = 'basic annotation report'; $this->filename = 'basic_annotation_report'; $this->extension = 'pdf'; @@ -73,7 +73,7 @@ protected function query($id) ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') ->join('images', 'annotations.image_id', '=', 'images.id') ->where('images.transect_id', $id) - ->when($this->restricted, function ($query) use ($id) { + ->when($this->isRestricted(), function ($query) use ($id) { return $query->whereNotIn('annotations.id', $this->getSkipIds($id)); }) ->select(DB::raw('labels.name, labels.color, count(labels.id) as count')) diff --git a/src/Support/Reports/Annotations/CsvReport.php b/src/Support/Reports/Annotations/CsvReport.php index 4d189593c..bdd66596a 100644 --- a/src/Support/Reports/Annotations/CsvReport.php +++ b/src/Support/Reports/Annotations/CsvReport.php @@ -15,11 +15,11 @@ class CsvReport extends AnnotationReport * Create an image label report instance. * * @param Project $project The project for which the report should be generated. - * @param bool $restricted Is the report restricted to the export area? + * @param array $options Options for the report */ - public function __construct(Project $project, $restricted) + public function __construct(Project $project, $options = []) { - parent::__construct($project, $restricted); + parent::__construct($project, $options); $this->name = 'CSV annotation report'; $this->filename = 'csv_annotation_report'; $this->extension = 'zip'; @@ -112,7 +112,7 @@ protected function query($id) 'images.attrs', ]) ->where('images.transect_id', $id) - ->when($this->restricted, function ($query) use ($id) { + ->when($this->isRestricted(), function ($query) use ($id) { return $query->whereNotIn('annotations.id', $this->getSkipIds($id)); }) ->orderBy('annotation_labels.id'); diff --git a/src/Support/Reports/Annotations/ExtendedReport.php b/src/Support/Reports/Annotations/ExtendedReport.php index 2d5d5e01c..28635a99b 100644 --- a/src/Support/Reports/Annotations/ExtendedReport.php +++ b/src/Support/Reports/Annotations/ExtendedReport.php @@ -15,11 +15,11 @@ class ExtendedReport extends AnnotationReport * Create an image label report instance. * * @param Project $project The project for which the report should be generated. - * @param bool $restricted Is the report restricted to the export area? + * @param array $options Options for the report */ - public function __construct(Project $project, $restricted) + public function __construct(Project $project, $options = []) { - parent::__construct($project, $restricted); + parent::__construct($project, $options); $this->name = 'extended annotation report'; $this->filename = 'extended_annotation_report'; $this->extension = 'xlsx'; @@ -75,7 +75,7 @@ protected function query($id) ->select(DB::raw('images.filename, annotation_labels.label_id, count(annotation_labels.label_id) as count')) ->groupBy('annotation_labels.label_id', 'images.id') ->where('images.transect_id', $id) - ->when($this->restricted, function ($query) use ($id) { + ->when($this->isRestricted(), function ($query) use ($id) { return $query->whereNotIn('annotations.id', $this->getSkipIds($id)); }) ->orderBy('images.filename'); diff --git a/src/Support/Reports/Annotations/FullReport.php b/src/Support/Reports/Annotations/FullReport.php index e1d539f1b..23141fd37 100644 --- a/src/Support/Reports/Annotations/FullReport.php +++ b/src/Support/Reports/Annotations/FullReport.php @@ -15,11 +15,11 @@ class FullReport extends AnnotationReport * Create an image label report instance. * * @param Project $project The project for which the report should be generated. - * @param bool $restricted Is the report restricted to the export area? + * @param array $options Options for the report */ - public function __construct(Project $project, $restricted) + public function __construct(Project $project, $options = []) { - parent::__construct($project, $restricted); + parent::__construct($project, $options); $this->name = 'full annotation report'; $this->filename = 'full_annotation_report'; $this->extension = 'xlsx'; @@ -88,7 +88,7 @@ protected function query($id) 'images.attrs' ) ->where('images.transect_id', $id) - ->when($this->restricted, function ($query) use ($id) { + ->when($this->isRestricted(), function ($query) use ($id) { return $query->whereNotIn('annotations.id', $this->getSkipIds($id)); }) ->orderBy('annotations.id'); diff --git a/src/Support/Reports/ImageLabels/BasicReport.php b/src/Support/Reports/ImageLabels/BasicReport.php index 6505f1fe2..e5c9b559f 100644 --- a/src/Support/Reports/ImageLabels/BasicReport.php +++ b/src/Support/Reports/ImageLabels/BasicReport.php @@ -16,10 +16,11 @@ class BasicReport extends Report * Create an image label report instance. * * @param Project $project The project for which the report should be generated. + * @param array $options Options for the report */ - public function __construct(Project $project) + public function __construct(Project $project, $options = []) { - parent::__construct($project); + parent::__construct($project, $options); $this->name = 'standard image label report'; $this->filename = 'standard_image_label_report'; $this->extension = 'xlsx'; diff --git a/src/Support/Reports/ImageLabels/CsvReport.php b/src/Support/Reports/ImageLabels/CsvReport.php index 376ae5dd6..5082a6aa2 100644 --- a/src/Support/Reports/ImageLabels/CsvReport.php +++ b/src/Support/Reports/ImageLabels/CsvReport.php @@ -16,10 +16,11 @@ class CsvReport extends Report * Create an image label report instance. * * @param Project $project The project for which the report should be generated. + * @param array $options Options for the report */ - public function __construct(Project $project) + public function __construct(Project $project, $options = []) { - parent::__construct($project); + parent::__construct($project, $options); $this->name = 'CSV image label report'; $this->filename = 'csv_image_label_report'; $this->extension = 'zip'; diff --git a/src/Support/Reports/Report.php b/src/Support/Reports/Report.php index 4800b15fd..8b8ea0de7 100644 --- a/src/Support/Reports/Report.php +++ b/src/Support/Reports/Report.php @@ -15,7 +15,14 @@ class Report * * @var Project */ - protected $project; + public $project; + + /** + * Options for this report. + * + * @var \Illuminate\Support\Collection + */ + public $options; /** * Name of the report for use in text. @@ -65,10 +72,12 @@ class Report * Create a report instance. * * @param Project $project The project for which the report should be generated. + * @param array $options Options for the report */ - public function __construct(Project $project) + public function __construct(Project $project, $options = []) { $this->project = $project; + $this->options = collect($options); $this->tmpFiles = []; $this->name = ''; $this->filename = ''; diff --git a/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsBasicReportControllerTest.php b/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsBasicReportControllerTest.php index dc90e849a..01141c0a2 100644 --- a/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsBasicReportControllerTest.php +++ b/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsBasicReportControllerTest.php @@ -1,6 +1,7 @@ beGuest(); $this->post("api/v1/projects/{$id}/reports/annotations/basic") ->assertResponseOk(); + + $job = $this->dispatchedJobs[0]; + $report = $job->report; + $this->assertInstanceOf(BasicReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(false, $report->options['restricted']); } } diff --git a/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsCsvReportControllerTest.php b/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsCsvReportControllerTest.php index 1c033b3b8..1c4dcbc1c 100644 --- a/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsCsvReportControllerTest.php +++ b/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsCsvReportControllerTest.php @@ -1,6 +1,7 @@ beGuest(); $this->post("api/v1/projects/{$id}/reports/annotations/csv") ->assertResponseOk(); + + $job = $this->dispatchedJobs[0]; + $report = $job->report; + $this->assertInstanceOf(CsvReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(false, $report->options['restricted']); } } diff --git a/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsExtendedReportControllerTest.php b/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsExtendedReportControllerTest.php index af91de52a..5ee5afd23 100644 --- a/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsExtendedReportControllerTest.php +++ b/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsExtendedReportControllerTest.php @@ -1,6 +1,7 @@ beGuest(); $this->post("api/v1/projects/{$id}/reports/annotations/extended") ->assertResponseOk(); + + $job = $this->dispatchedJobs[0]; + $report = $job->report; + $this->assertInstanceOf(ExtendedReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(false, $report->options['restricted']); } } diff --git a/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsFullReportControllerTest.php b/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsFullReportControllerTest.php index 0b93a298d..70d350c0b 100644 --- a/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsFullReportControllerTest.php +++ b/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsFullReportControllerTest.php @@ -1,6 +1,7 @@ beGuest(); $this->post("api/v1/projects/{$id}/reports/annotations/full") ->assertResponseOk(); + + $job = $this->dispatchedJobs[0]; + $report = $job->report; + $this->assertInstanceOf(FullReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(false, $report->options['restricted']); } } diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsAnnotationReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsAnnotationReportTest.php index 33c58006c..3209a9390 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsAnnotationReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsAnnotationReportTest.php @@ -99,6 +99,6 @@ public function testGenerateReportRestrict() return $mock; }); - with(new BasicReport($project, true))->generateReport(); + with(new BasicReport($project, ['restricted' => true]))->generateReport(); } } diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php index 154a6e51e..0a61b51fa 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php @@ -58,6 +58,6 @@ public function testGenerateReport() return $mock; }); - with(new BasicReport($project, false))->generateReport(); + with(new BasicReport($project))->generateReport(); } } diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php index 07e681a19..233358691 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php @@ -92,6 +92,6 @@ public function testGenerateReport() return $mock; }); - with(new CsvReport($project, false))->generateReport(); + with(new CsvReport($project))->generateReport(); } } diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php index 0298ccd7f..f61086116 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php @@ -67,6 +67,6 @@ public function testGenerateReport() return $mock; }); - with(new ExtendedReport($project, false))->generateReport(); + with(new ExtendedReport($project))->generateReport(); } } diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php index 4faf68ad4..362a83c48 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php @@ -64,6 +64,6 @@ public function testGenerateReport() return $mock; }); - with(new FullReport($project, false))->generateReport(); + with(new FullReport($project))->generateReport(); } } From 3a27af46881b8314ae452835a9c84810b646a704 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 26 Sep 2016 14:52:23 +0200 Subject: [PATCH 053/407] Add more visible hints to the reports schema documentation --- .../views/manual/tutorials/reports-schema.blade.php | 8 ++++---- src/resources/views/projectsShow.blade.php | 13 ++++++------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index 594cc7d03..8455bb230 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -9,7 +9,7 @@

Annotation reports

-

Basic

+

Basic

The basic annotation report contains graphical plots of abundances of the different annotation labels (annotations can have multiple different labels by different users). The report is generated as a single PDF file, containing one page and plot for each transect of the project.

@@ -51,7 +51,7 @@
  • Label abundance
  • -

    Full

    +

    Full

    The full annotation report is an XLSX spreadsheet similar to the extended report. It contains a list of all annotations and their labels for each transect. @@ -122,7 +122,7 @@

    Image label reports

    -

    Basic

    +

    Basic

    The basic image label report is an XLSX spreadsheet similar to the extended annotation report. It contains a list of all labels attached to each image of a transect. The columns are as follows:

    @@ -132,7 +132,7 @@
  • Comma separated list of label names (see the extended annotation report on how to interpret a label name)
  • -

    CSV

    +

    CSV

    The CSV report is similar to the annotation CSV report. If you want the data in a machine readable format, choose this report.

    diff --git a/src/resources/views/projectsShow.blade.php b/src/resources/views/projectsShow.blade.php index f4f8afa36..07ad2d926 100644 --- a/src/resources/views/projectsShow.blade.php +++ b/src/resources/views/projectsShow.blade.php @@ -1,6 +1,5 @@
    - Reports
    @@ -28,22 +27,22 @@
    - The basic annotation report contains graphical plots of abundances of the different annotation labels for each transect of this project (as PDF). + The basic annotation report contains graphical plots of abundances of the different annotation labels for each transect of this project (as PDF). See the manual for the report schema.
    - The extended annotation report lists the abundances of annotation labels for each image in all transects of this project (as XLSX). + The extended annotation report lists the abundances of annotation labels for each image in all transects of this project (as XLSX). See the manual for the report schema.
    - The full annotation report lists the labels, shape and coordinates of all annotations in all transects of this project (as XLSX). + The full annotation report lists the labels, shape and coordinates of all annotations in all transects of this project (as XLSX). See the manual for the report schema.
    - The CSV annotation report is intended for subsequent processing and lists the annotation labels of all transects of this project at the highest possible resolution (as CSV files in a ZIP archive). + The CSV annotation report is intended for subsequent processing and lists the annotation labels of all transects of this project at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema.
    - The basic image label report lists the image labels of all images of all transects of this project (as XLSX). + The basic image label report lists the image labels of all images of all transects of this project (as XLSX). See the manual for the report schema.
    - The CSV image label report is intended for subsequent processing and lists the image labels of all transects of this project at the highest possible resolution (as CSV files in a ZIP archive). + The CSV image label report is intended for subsequent processing and lists the image labels of all transects of this project at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema.
    From 7fdb9b0b0ff81b4ffed53ec9e0e884a826b217e5 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 26 Sep 2016 16:10:08 +0200 Subject: [PATCH 054/407] Simplify setting of report properties and improve their tests --- .../Reports/Annotations/BasicReport.php | 27 ++++++++++++------- src/Support/Reports/Annotations/CsvReport.php | 27 ++++++++++++------- .../Reports/Annotations/ExtendedReport.php | 27 ++++++++++++------- .../Reports/Annotations/FullReport.php | 27 ++++++++++++------- .../Reports/ImageLabels/BasicReport.php | 27 ++++++++++++------- src/Support/Reports/ImageLabels/CsvReport.php | 27 ++++++++++++------- src/Support/Reports/Report.php | 15 ++++++++--- ...pportReportsAnnotationsBasicReportTest.php | 11 +++++++- ...SupportReportsAnnotationsCsvReportTest.php | 10 ++++++- ...rtReportsAnnotationsExtendedReportTest.php | 10 ++++++- ...upportReportsAnnotationsFullReportTest.php | 10 ++++++- ...pportReportsImageLabelsBasicReportTest.php | 10 ++++++- ...SupportReportsImageLabelsCsvReportTest.php | 10 ++++++- 13 files changed, 168 insertions(+), 70 deletions(-) diff --git a/src/Support/Reports/Annotations/BasicReport.php b/src/Support/Reports/Annotations/BasicReport.php index b21fbdcda..b0564478d 100644 --- a/src/Support/Reports/Annotations/BasicReport.php +++ b/src/Support/Reports/Annotations/BasicReport.php @@ -12,18 +12,25 @@ class BasicReport extends AnnotationReport use ExecutesPythonScript; /** - * Create an image label report instance. + * Name of the report for use in text. * - * @param Project $project The project for which the report should be generated. - * @param array $options Options for the report + * @var string */ - public function __construct(Project $project, $options = []) - { - parent::__construct($project, $options); - $this->name = 'basic annotation report'; - $this->filename = 'basic_annotation_report'; - $this->extension = 'pdf'; - } + protected $name = 'basic annotation report'; + + /** + * Name of the report for use as (part of) a filename. + * + * @var string + */ + protected $filename = 'basic_annotation_report'; + + /** + * File extension of the report file. + * + * @var string + */ + protected $extension = 'pdf'; /** * Generate the report. diff --git a/src/Support/Reports/Annotations/CsvReport.php b/src/Support/Reports/Annotations/CsvReport.php index bdd66596a..f053acf03 100644 --- a/src/Support/Reports/Annotations/CsvReport.php +++ b/src/Support/Reports/Annotations/CsvReport.php @@ -12,18 +12,25 @@ class CsvReport extends AnnotationReport use MakesZipArchives; /** - * Create an image label report instance. + * Name of the report for use in text. * - * @param Project $project The project for which the report should be generated. - * @param array $options Options for the report + * @var string */ - public function __construct(Project $project, $options = []) - { - parent::__construct($project, $options); - $this->name = 'CSV annotation report'; - $this->filename = 'csv_annotation_report'; - $this->extension = 'zip'; - } + protected $name = 'CSV annotation report'; + + /** + * Name of the report for use as (part of) a filename. + * + * @var string + */ + protected $filename = 'csv_annotation_report'; + + /** + * File extension of the report file. + * + * @var string + */ + protected $extension = 'zip'; /** * Generate the report. diff --git a/src/Support/Reports/Annotations/ExtendedReport.php b/src/Support/Reports/Annotations/ExtendedReport.php index 28635a99b..90a0371ed 100644 --- a/src/Support/Reports/Annotations/ExtendedReport.php +++ b/src/Support/Reports/Annotations/ExtendedReport.php @@ -12,18 +12,25 @@ class ExtendedReport extends AnnotationReport use ExecutesPythonScript; /** - * Create an image label report instance. + * Name of the report for use in text. * - * @param Project $project The project for which the report should be generated. - * @param array $options Options for the report + * @var string */ - public function __construct(Project $project, $options = []) - { - parent::__construct($project, $options); - $this->name = 'extended annotation report'; - $this->filename = 'extended_annotation_report'; - $this->extension = 'xlsx'; - } + protected $name = 'extended annotation report'; + + /** + * Name of the report for use as (part of) a filename. + * + * @var string + */ + protected $filename = 'extended_annotation_report'; + + /** + * File extension of the report file. + * + * @var string + */ + protected $extension = 'xlsx'; /** * Generate the report. diff --git a/src/Support/Reports/Annotations/FullReport.php b/src/Support/Reports/Annotations/FullReport.php index 23141fd37..294bad10a 100644 --- a/src/Support/Reports/Annotations/FullReport.php +++ b/src/Support/Reports/Annotations/FullReport.php @@ -12,18 +12,25 @@ class FullReport extends AnnotationReport use ExecutesPythonScript; /** - * Create an image label report instance. + * Name of the report for use in text. * - * @param Project $project The project for which the report should be generated. - * @param array $options Options for the report + * @var string */ - public function __construct(Project $project, $options = []) - { - parent::__construct($project, $options); - $this->name = 'full annotation report'; - $this->filename = 'full_annotation_report'; - $this->extension = 'xlsx'; - } + protected $name = 'full annotation report'; + + /** + * Name of the report for use as (part of) a filename. + * + * @var string + */ + protected $filename = 'full_annotation_report'; + + /** + * File extension of the report file. + * + * @var string + */ + protected $extension = 'xlsx'; /** * Generate the report. diff --git a/src/Support/Reports/ImageLabels/BasicReport.php b/src/Support/Reports/ImageLabels/BasicReport.php index e5c9b559f..9d31b4f87 100644 --- a/src/Support/Reports/ImageLabels/BasicReport.php +++ b/src/Support/Reports/ImageLabels/BasicReport.php @@ -13,18 +13,25 @@ class BasicReport extends Report use ExecutesPythonScript; /** - * Create an image label report instance. + * Name of the report for use in text. * - * @param Project $project The project for which the report should be generated. - * @param array $options Options for the report + * @var string */ - public function __construct(Project $project, $options = []) - { - parent::__construct($project, $options); - $this->name = 'standard image label report'; - $this->filename = 'standard_image_label_report'; - $this->extension = 'xlsx'; - } + protected $name = 'basic image label report'; + + /** + * Name of the report for use as (part of) a filename. + * + * @var string + */ + protected $filename = 'basic_image_label_report'; + + /** + * File extension of the report file. + * + * @var string + */ + protected $extension = 'xlsx'; /** * Generate the report. diff --git a/src/Support/Reports/ImageLabels/CsvReport.php b/src/Support/Reports/ImageLabels/CsvReport.php index 5082a6aa2..1789f18b7 100644 --- a/src/Support/Reports/ImageLabels/CsvReport.php +++ b/src/Support/Reports/ImageLabels/CsvReport.php @@ -13,18 +13,25 @@ class CsvReport extends Report use MakesZipArchives; /** - * Create an image label report instance. + * Name of the report for use in text. * - * @param Project $project The project for which the report should be generated. - * @param array $options Options for the report + * @var string */ - public function __construct(Project $project, $options = []) - { - parent::__construct($project, $options); - $this->name = 'CSV image label report'; - $this->filename = 'csv_image_label_report'; - $this->extension = 'zip'; - } + protected $name = 'CSV image label report'; + + /** + * Name of the report for use as (part of) a filename. + * + * @var string + */ + protected $filename = 'csv_image_label_report'; + + /** + * File extension of the report file. + * + * @var string + */ + protected $extension = 'zip'; /** * Generate the report. diff --git a/src/Support/Reports/Report.php b/src/Support/Reports/Report.php index 8b8ea0de7..18a7af122 100644 --- a/src/Support/Reports/Report.php +++ b/src/Support/Reports/Report.php @@ -79,9 +79,6 @@ public function __construct(Project $project, $options = []) $this->project = $project; $this->options = collect($options); $this->tmpFiles = []; - $this->name = ''; - $this->filename = ''; - $this->extension = ''; $this->availableReport = new AvailableReport; } @@ -149,6 +146,16 @@ public function getFilename() return $this->filename; } + /** + * Get the file extension + * + * @return string + */ + public function getExtension() + { + return $this->extension; + } + /** * Get the filename used for downloading the report * @@ -156,7 +163,7 @@ public function getFilename() */ public function getDownloadFilename() { - return "biigle_{$this->project->id}_{$this->getFilename()}.{$this->extension}"; + return "biigle_{$this->project->id}_{$this->getFilename()}.{$this->getExtension()}"; } /** diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php index 0a61b51fa..b6c637af8 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php @@ -6,7 +6,16 @@ use Dias\Modules\Export\Support\CsvFile; use Dias\Modules\Export\Support\Reports\Annotations\BasicReport; -class ExportModuleSupportReportsAnnotationsBasicReportTest extends TestCase { +class ExportModuleSupportReportsAnnotationsBasicReportTest extends TestCase +{ + + public function testProperties() + { + $report = new BasicReport(ProjectTest::make()); + $this->assertEquals('basic annotation report', $report->getName()); + $this->assertEquals('basic_annotation_report', $report->getFilename()); + $this->assertEquals('pdf', $report->getExtension()); + } public function testGenerateReport() { diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php index 233358691..e24c951d3 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php @@ -3,7 +3,15 @@ use Dias\Modules\Export\Support\CsvFile; use Dias\Modules\Export\Support\Reports\Annotations\CsvReport; -class ExportModuleSupportReportsAnnotationsCsvReportTest extends TestCase { +class ExportModuleSupportReportsAnnotationsCsvReportTest extends TestCase +{ + public function testProperties() + { + $report = new CsvReport(ProjectTest::make()); + $this->assertEquals('CSV annotation report', $report->getName()); + $this->assertEquals('csv_annotation_report', $report->getFilename()); + $this->assertEquals('zip', $report->getExtension()); + } public function testGenerateReport() { diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php index f61086116..a19ec3da9 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php @@ -6,7 +6,15 @@ use Dias\Modules\Export\Support\CsvFile; use Dias\Modules\Export\Support\Reports\Annotations\ExtendedReport; -class ExportModuleSupportReportsAnnotationsExtendedReportTest extends TestCase { +class ExportModuleSupportReportsAnnotationsExtendedReportTest extends TestCase +{ + public function testProperties() + { + $report = new ExtendedReport(ProjectTest::make()); + $this->assertEquals('extended annotation report', $report->getName()); + $this->assertEquals('extended_annotation_report', $report->getFilename()); + $this->assertEquals('xlsx', $report->getExtension()); + } public function testGenerateReport() { diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php index 362a83c48..1836af17b 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php +++ b/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php @@ -6,7 +6,15 @@ use Dias\Modules\Export\Support\CsvFile; use Dias\Modules\Export\Support\Reports\Annotations\FullReport; -class ExportModuleSupportReportsAnnotationsFullReportTest extends TestCase { +class ExportModuleSupportReportsAnnotationsFullReportTest extends TestCase +{ + public function testProperties() + { + $report = new FullReport(ProjectTest::make()); + $this->assertEquals('full annotation report', $report->getName()); + $this->assertEquals('full_annotation_report', $report->getFilename()); + $this->assertEquals('xlsx', $report->getExtension()); + } public function testGenerateReport() { diff --git a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsBasicReportTest.php b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsBasicReportTest.php index e87d45771..f8d1efe7c 100644 --- a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsBasicReportTest.php +++ b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsBasicReportTest.php @@ -4,7 +4,15 @@ use Dias\Modules\Export\Support\CsvFile; use Dias\Modules\Export\Support\Reports\ImageLabels\BasicReport; -class ExportModuleSupportReportsImageLabelsBasicReportTest extends TestCase { +class ExportModuleSupportReportsImageLabelsBasicReportTest extends TestCase +{ + public function testProperties() + { + $report = new BasicReport(ProjectTest::make()); + $this->assertEquals('basic image label report', $report->getName()); + $this->assertEquals('basic_image_label_report', $report->getFilename()); + $this->assertEquals('xlsx', $report->getExtension()); + } public function testGenerateReport() { diff --git a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php index 739092889..6834a06a3 100644 --- a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php +++ b/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php @@ -4,7 +4,15 @@ use Dias\Modules\Export\Support\CsvFile; use Dias\Modules\Export\Support\Reports\ImageLabels\CsvReport; -class ExportModuleSupportReportsImageLabelsCsvReportTest extends TestCase { +class ExportModuleSupportReportsImageLabelsCsvReportTest extends TestCase +{ + public function testProperties() + { + $report = new CsvReport(ProjectTest::make()); + $this->assertEquals('CSV image label report', $report->getName()); + $this->assertEquals('csv_image_label_report', $report->getFilename()); + $this->assertEquals('zip', $report->getExtension()); + } public function testGenerateReport() { From 1ed43f195b90c09858956e80c8b65401e4247918 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 27 Sep 2016 13:25:00 +0200 Subject: [PATCH 055/407] Change reports for a project to be reports for a single transect --- .../Api/ImageLabels/BasicReportController.php | 33 ----- .../Api/ImageLabels/CsvReportController.php | 33 ----- .../Annotations/BasicReportController.php | 24 ++-- .../Annotations/CsvReportController.php | 24 ++-- .../Annotations/ExtendedReportController.php | 22 +-- .../Annotations/FullReportController.php | 24 ++-- .../Api/Transects/ExportAreaController.php | 88 ++++++++++++ .../ImageLabels/BasicReportController.php | 33 +++++ .../ImageLabels/CsvReportController.php | 33 +++++ src/Http/routes.php | 62 +++++---- src/Notifications/ReportReady.php | 2 +- src/Support/Reports/Annotations/CsvReport.php | 127 ------------------ .../Reports/Annotations/FullReport.php | 103 -------------- src/Support/Reports/ExecutesPythonScript.php | 5 +- .../Reports/ImageLabels/BasicReport.php | 86 ------------ src/Support/Reports/ImageLabels/CsvReport.php | 110 --------------- src/Support/Reports/MakesZipArchives.php | 26 ++-- src/Support/Reports/Report.php | 74 +++++----- .../Annotations/BasicReport.php | 47 +++---- .../Transects/Annotations/CsvReport.php | 120 +++++++++++++++++ .../Annotations/ExtendedReport.php | 53 +++----- .../Transects/Annotations/FullReport.php | 94 +++++++++++++ .../Annotations/Report.php} | 15 +-- .../Transects/ImageLabels/BasicReport.php | 78 +++++++++++ .../Transects/ImageLabels/CsvReport.php | 104 ++++++++++++++ src/Support/Reports/Transects/Report.php | 88 ++++++++++++ src/config/export.php | 1 - src/resources/scripts/basic_report.py | 8 +- src/resources/scripts/extended_report.py | 17 +-- src/resources/scripts/full_report.py | 15 +-- src/resources/scripts/image_label_report.py | 32 ----- ...piImageLabelsBasicReportControllerTest.php | 20 --- ...sApiImageLabelsCsvReportControllerTest.php | 20 --- ...sAnnotationsBasicReportControllerTest.php} | 12 +- ...ctsAnnotationsCsvReportControllerTest.php} | 12 +- ...notationsExtendedReportControllerTest.php} | 12 +- ...tsAnnotationsFullReportControllerTest.php} | 12 +- ...sApiTransectsExportAreaControllerTest.php} | 2 +- ...tsImageLabelsBasicReportControllerTest.php | 20 +++ ...ectsImageLabelsCsvReportControllerTest.php | 20 +++ .../ExportModuleSupportReportsReportTest.php | 38 +----- ...tsTransectsAnnotationsBasicReportTest.php} | 10 +- ...ortsTransectsAnnotationsCsvReportTest.php} | 12 +- ...ransectsAnnotationsExtendedReportTest.php} | 14 +- ...rtsTransectsAnnotationsFullReportTest.php} | 10 +- ...ReportsTransectsAnnotationsReportTest.php} | 53 ++------ ...oduleSupportReportsTransectsReportTest.php | 30 +++++ ...tsTransectsImageLabelsBasicReportTest.php} | 14 +- ...ortsTransectsImageLabelsCsvReportTest.php} | 10 +- 49 files changed, 984 insertions(+), 918 deletions(-) delete mode 100644 src/Http/Controllers/Api/ImageLabels/BasicReportController.php delete mode 100644 src/Http/Controllers/Api/ImageLabels/CsvReportController.php rename src/Http/Controllers/Api/{ => Transects}/Annotations/BasicReportController.php (56%) rename src/Http/Controllers/Api/{ => Transects}/Annotations/CsvReportController.php (56%) rename src/Http/Controllers/Api/{ => Transects}/Annotations/ExtendedReportController.php (60%) rename src/Http/Controllers/Api/{ => Transects}/Annotations/FullReportController.php (56%) create mode 100644 src/Http/Controllers/Api/Transects/ExportAreaController.php create mode 100644 src/Http/Controllers/Api/Transects/ImageLabels/BasicReportController.php create mode 100644 src/Http/Controllers/Api/Transects/ImageLabels/CsvReportController.php delete mode 100644 src/Support/Reports/Annotations/CsvReport.php delete mode 100644 src/Support/Reports/Annotations/FullReport.php delete mode 100644 src/Support/Reports/ImageLabels/BasicReport.php delete mode 100644 src/Support/Reports/ImageLabels/CsvReport.php rename src/Support/Reports/{ => Transects}/Annotations/BasicReport.php (56%) create mode 100644 src/Support/Reports/Transects/Annotations/CsvReport.php rename src/Support/Reports/{ => Transects}/Annotations/ExtendedReport.php (54%) create mode 100644 src/Support/Reports/Transects/Annotations/FullReport.php rename src/Support/Reports/{Annotations/AnnotationReport.php => Transects/Annotations/Report.php} (88%) create mode 100644 src/Support/Reports/Transects/ImageLabels/BasicReport.php create mode 100644 src/Support/Reports/Transects/ImageLabels/CsvReport.php create mode 100644 src/Support/Reports/Transects/Report.php delete mode 100644 src/resources/scripts/image_label_report.py delete mode 100644 tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsBasicReportControllerTest.php delete mode 100644 tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsCsvReportControllerTest.php rename tests/Http/Controllers/Api/{Annotations/ExportModuleHttpControllersApiAnnotationsBasicReportControllerTest.php => Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsBasicReportControllerTest.php} (52%) rename tests/Http/Controllers/Api/{Annotations/ExportModuleHttpControllersApiAnnotationsCsvReportControllerTest.php => Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsCsvReportControllerTest.php} (53%) rename tests/Http/Controllers/Api/{Annotations/ExportModuleHttpControllersApiAnnotationsExtendedReportControllerTest.php => Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsExtendedReportControllerTest.php} (52%) rename tests/Http/Controllers/Api/{Annotations/ExportModuleHttpControllersApiAnnotationsFullReportControllerTest.php => Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsFullReportControllerTest.php} (53%) rename tests/Http/Controllers/Api/{ExportModuleHttpControllersApiTransectExportAreaControllerTest.php => Transects/ExportModuleHttpControllersApiTransectsExportAreaControllerTest.php} (96%) create mode 100644 tests/Http/Controllers/Api/Transects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsBasicReportControllerTest.php create mode 100644 tests/Http/Controllers/Api/Transects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsCsvReportControllerTest.php rename tests/Support/Reports/{Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php => Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsBasicReportTest.php} (83%) rename tests/Support/Reports/{Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php => Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsCsvReportTest.php} (86%) rename tests/Support/Reports/{Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php => Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsExtendedReportTest.php} (82%) rename tests/Support/Reports/{Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php => Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php} (85%) rename tests/Support/Reports/{Annotations/ExportModuleSupportReportsAnnotationsAnnotationReportTest.php => Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsReportTest.php} (50%) create mode 100644 tests/Support/Reports/Transects/ExportModuleSupportReportsTransectsReportTest.php rename tests/Support/Reports/{ImageLabels/ExportModuleSupportReportsImageLabelsBasicReportTest.php => Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsBasicReportTest.php} (84%) rename tests/Support/Reports/{ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php => Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsCsvReportTest.php} (87%) diff --git a/src/Http/Controllers/Api/ImageLabels/BasicReportController.php b/src/Http/Controllers/Api/ImageLabels/BasicReportController.php deleted file mode 100644 index 128d04968..000000000 --- a/src/Http/Controllers/Api/ImageLabels/BasicReportController.php +++ /dev/null @@ -1,33 +0,0 @@ -authorize('access', $project); - $this->dispatch(new GenerateReportJob(new BasicReport($project), $auth->user())); - } -} diff --git a/src/Http/Controllers/Api/ImageLabels/CsvReportController.php b/src/Http/Controllers/Api/ImageLabels/CsvReportController.php deleted file mode 100644 index dacc1ece1..000000000 --- a/src/Http/Controllers/Api/ImageLabels/CsvReportController.php +++ /dev/null @@ -1,33 +0,0 @@ -authorize('access', $project); - $this->dispatch(new GenerateReportJob(new CsvReport($project), $auth->user())); - } -} diff --git a/src/Http/Controllers/Api/Annotations/BasicReportController.php b/src/Http/Controllers/Api/Transects/Annotations/BasicReportController.php similarity index 56% rename from src/Http/Controllers/Api/Annotations/BasicReportController.php rename to src/Http/Controllers/Api/Transects/Annotations/BasicReportController.php index 67736a8f5..36be67b69 100644 --- a/src/Http/Controllers/Api/Annotations/BasicReportController.php +++ b/src/Http/Controllers/Api/Transects/Annotations/BasicReportController.php @@ -1,38 +1,38 @@ authorize('access', $project); + $transect = Transect::findOrFail($id); + $this->authorize('access', $transect); $this->validate($request, ['restrict' => 'boolean']); - $report = new BasicReport($project, [ + $report = new BasicReport($transect, [ 'restricted' => (bool) $request->input('restrict', false), ]); $this->dispatch(new GenerateReportJob($report, $auth->user())); diff --git a/src/Http/Controllers/Api/Annotations/CsvReportController.php b/src/Http/Controllers/Api/Transects/Annotations/CsvReportController.php similarity index 56% rename from src/Http/Controllers/Api/Annotations/CsvReportController.php rename to src/Http/Controllers/Api/Transects/Annotations/CsvReportController.php index 352c3faa0..02f1bc145 100644 --- a/src/Http/Controllers/Api/Annotations/CsvReportController.php +++ b/src/Http/Controllers/Api/Transects/Annotations/CsvReportController.php @@ -1,38 +1,38 @@ authorize('access', $project); + $transect = Transect::findOrFail($id); + $this->authorize('access', $transect); $this->validate($request, ['restrict' => 'boolean']); - $report = new CsvReport($project, [ + $report = new CsvReport($transect, [ 'restricted' => (bool) $request->input('restrict', false), ]); $this->dispatch(new GenerateReportJob($report, $auth->user())); diff --git a/src/Http/Controllers/Api/Annotations/ExtendedReportController.php b/src/Http/Controllers/Api/Transects/Annotations/ExtendedReportController.php similarity index 60% rename from src/Http/Controllers/Api/Annotations/ExtendedReportController.php rename to src/Http/Controllers/Api/Transects/Annotations/ExtendedReportController.php index 575c5372d..10d703340 100644 --- a/src/Http/Controllers/Api/Annotations/ExtendedReportController.php +++ b/src/Http/Controllers/Api/Transects/Annotations/ExtendedReportController.php @@ -1,38 +1,38 @@ authorize('access', $project); + $transect = Transect::findOrFail($id); + $this->authorize('access', $transect); $this->validate($request, ['restrict' => 'boolean']); - $report = new ExtendedReport($project, [ + $report = new ExtendedReport($transect, [ 'restricted' => (bool) $request->input('restrict', false), ]); $this->dispatch(new GenerateReportJob($report, $auth->user())); diff --git a/src/Http/Controllers/Api/Annotations/FullReportController.php b/src/Http/Controllers/Api/Transects/Annotations/FullReportController.php similarity index 56% rename from src/Http/Controllers/Api/Annotations/FullReportController.php rename to src/Http/Controllers/Api/Transects/Annotations/FullReportController.php index 2582087d9..7b1e36295 100644 --- a/src/Http/Controllers/Api/Annotations/FullReportController.php +++ b/src/Http/Controllers/Api/Transects/Annotations/FullReportController.php @@ -1,38 +1,38 @@ authorize('access', $project); + $transect = Transect::findOrFail($id); + $this->authorize('access', $transect); $this->validate($request, ['restrict' => 'boolean']); - $report = new FullReport($project, [ + $report = new FullReport($transect, [ 'restricted' => (bool) $request->input('restrict', false), ]); $this->dispatch(new GenerateReportJob($report, $auth->user())); diff --git a/src/Http/Controllers/Api/Transects/ExportAreaController.php b/src/Http/Controllers/Api/Transects/ExportAreaController.php new file mode 100644 index 000000000..543d0c7fa --- /dev/null +++ b/src/Http/Controllers/Api/Transects/ExportAreaController.php @@ -0,0 +1,88 @@ +authorize('access', $transect); + + return Transect::convert($transect)->exportArea; + } + + /** + * Set the export area + * + * @api {post} transects/:id/export-area Set the export area + * @apiGroup Transects + * @apiName StoreTransectsExportArea + * @apiPermission projectAdmin + * + * @apiParam (Required arguments) {Number[]} coordinates Coordinates of the export area formatted as `[x1, y1, x2, y2]` array of integers + * + * @param Request $request + * @param int $id Transect ID + * @return \Illuminate\Http\Response + */ + public function store(Request $request, $id) + { + $transect = BaseTransect::findOrFail($id); + $this->authorize('update', $transect); + $this->validate($request, Transect::$storeRules); + + $transect = Transect::convert($transect); + + try { + $transect->exportArea = $request->input('coordinates'); + $transect->save(); + } catch (Exception $e) { + return $this->buildFailedValidationResponse($request, [ + 'coordinates' => $e->getMessage(), + ]); + } + } + + /** + * Remove the export area + * + * @api {delete} transects/:id/export-area Remove the export area + * @apiGroup Transects + * @apiName DestroyTransectsExportArea + * @apiPermission projectAdmin + * + * @param int $id Transect ID + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $transect = BaseTransect::findOrFail($id); + $this->authorize('update', $transect); + $transect = Transect::convert($transect); + $transect->exportArea = null; + $transect->save(); + } +} diff --git a/src/Http/Controllers/Api/Transects/ImageLabels/BasicReportController.php b/src/Http/Controllers/Api/Transects/ImageLabels/BasicReportController.php new file mode 100644 index 000000000..58f129e92 --- /dev/null +++ b/src/Http/Controllers/Api/Transects/ImageLabels/BasicReportController.php @@ -0,0 +1,33 @@ +authorize('access', $transect); + $this->dispatch(new GenerateReportJob(new BasicReport($transect), $auth->user())); + } +} diff --git a/src/Http/Controllers/Api/Transects/ImageLabels/CsvReportController.php b/src/Http/Controllers/Api/Transects/ImageLabels/CsvReportController.php new file mode 100644 index 000000000..09f7d62ec --- /dev/null +++ b/src/Http/Controllers/Api/Transects/ImageLabels/CsvReportController.php @@ -0,0 +1,33 @@ +authorize('access', $transect); + $this->dispatch(new GenerateReportJob(new CsvReport($transect), $auth->user())); + } +} diff --git a/src/Http/routes.php b/src/Http/routes.php index e7d2a243b..3e0569a6c 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -6,41 +6,49 @@ 'middleware' => 'auth.api', ], function ($router) { - $router->post('projects/{id}/reports/annotations/basic', [ - 'uses' => 'Annotations\BasicReportController@store', - ]); + $router->group([ + 'namespace' => 'Transects', + 'prefix' => 'transects', + ], function ($router) { - $router->post('projects/{id}/reports/annotations/extended', [ - 'uses' => 'Annotations\ExtendedReportController@store', - ]); + $router->post('{id}/reports/annotations/basic', [ + 'uses' => 'Annotations\BasicReportController@store', + ]); - $router->post('projects/{id}/reports/annotations/full', [ - 'uses' => 'Annotations\FullReportController@store', - ]); + $router->post('{id}/reports/annotations/extended', [ + 'uses' => 'Annotations\ExtendedReportController@store', + ]); - $router->post('projects/{id}/reports/annotations/csv', [ - 'uses' => 'Annotations\CsvReportController@store', - ]); + $router->post('{id}/reports/annotations/full', [ + 'uses' => 'Annotations\FullReportController@store', + ]); - $router->post('projects/{id}/reports/image-labels/basic', [ - 'uses' => 'ImageLabels\BasicReportController@store', - ]); + $router->post('{id}/reports/annotations/csv', [ + 'uses' => 'Annotations\CsvReportController@store', + ]); - $router->post('projects/{id}/reports/image-labels/csv', [ - 'uses' => 'ImageLabels\CsvReportController@store', - ]); + $router->post('{id}/reports/image-labels/basic', [ + 'uses' => 'ImageLabels\BasicReportController@store', + ]); - $router->get('transects/{id}/export-area', [ - 'uses' => 'TransectExportAreaController@show', - ]); + $router->post('{id}/reports/image-labels/csv', [ + 'uses' => 'ImageLabels\CsvReportController@store', + ]); - $router->post('transects/{id}/export-area', [ - 'uses' => 'TransectExportAreaController@store', - ]); + $router->get('{id}/export-area', [ + 'uses' => 'ExportAreaController@show', + ]); + + $router->post('{id}/export-area', [ + 'uses' => 'ExportAreaController@store', + ]); + + $router->delete('{id}/export-area', [ + 'uses' => 'ExportAreaController@destroy', + ]); + + }); - $router->delete('transects/{id}/export-area', [ - 'uses' => 'TransectExportAreaController@destroy', - ]); }); // this route should be public (is protected by random uids) diff --git a/src/Notifications/ReportReady.php b/src/Notifications/ReportReady.php index 3e410522b..5d19e7460 100644 --- a/src/Notifications/ReportReady.php +++ b/src/Notifications/ReportReady.php @@ -47,7 +47,7 @@ public function toMail($notifiable) { return (new MailMessage) ->subject('Your BIIGLE DIAS report is ready') - ->line("Your {$this->report->getName()} for project {$this->report->getProjectName()} is ready for download!") + ->line("Your {$this->report->getName()} for {$this->report->getSubject()} is ready for download!") ->line('The report will be removed once you have downloaded it.') ->action('Download report', $this->report->getUrl()); } diff --git a/src/Support/Reports/Annotations/CsvReport.php b/src/Support/Reports/Annotations/CsvReport.php deleted file mode 100644 index f053acf03..000000000 --- a/src/Support/Reports/Annotations/CsvReport.php +++ /dev/null @@ -1,127 +0,0 @@ -project->transects() - ->pluck('name', 'id'); - - foreach ($transects as $id => $name) { - $csv = CsvFile::makeTmp(); - $this->tmpFiles[$id] = $csv; - - // add column headers - $csv->put([ - 'annotation_label_id', - 'label_id', - 'label_name', - 'user_id', - 'firstname', - 'lastname', - 'image_id', - 'filename', - 'shape_id', - 'shape_name', - 'points', - 'attributes', - ]); - - $query = $this->query($id); - $rows = $query->get(); - - // CHUNKING IS BROKEN SOMEHOW! - // $query->chunkById(500, function ($rows) use ($csv) { - foreach ($rows as $row) { - $csv->put([ - $row->annotation_label_id, - $row->label_id, - $this->expandLabelName($row->label_id), - $row->user_id, - $row->firstname, - $row->lastname, - $row->image_id, - $row->filename, - $row->shape_id, - $row->shape_name, - $row->points, - $row->attrs, - ]); - } - // }, 'annotation_labels.id', 'annotation_label_id'); - - $csv->close(); - } - - $this->makeZip($transects); - } - - /** - * Assemble a new DB query for a transect. - * - * @param int $id Transect ID - * - * @return \Illuminate\Database\Query\Builder - */ - protected function query($id) - { - return DB::table('annotation_labels') - ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') - ->join('images', 'annotations.image_id', '=', 'images.id') - ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') - ->join('users', 'annotation_labels.user_id', '=', 'users.id') - ->select([ - 'annotation_labels.id as annotation_label_id', - 'annotation_labels.label_id', - 'users.id as user_id', - 'users.firstname', - 'users.lastname', - 'images.id as image_id', - 'images.filename', - 'shapes.id as shape_id', - 'shapes.name as shape_name', - 'annotations.points', - 'images.attrs', - ]) - ->where('images.transect_id', $id) - ->when($this->isRestricted(), function ($query) use ($id) { - return $query->whereNotIn('annotations.id', $this->getSkipIds($id)); - }) - ->orderBy('annotation_labels.id'); - } -} diff --git a/src/Support/Reports/Annotations/FullReport.php b/src/Support/Reports/Annotations/FullReport.php deleted file mode 100644 index 294bad10a..000000000 --- a/src/Support/Reports/Annotations/FullReport.php +++ /dev/null @@ -1,103 +0,0 @@ -project->transects() - ->pluck('name', 'id'); - - foreach ($transects as $id => $name) { - $csv = CsvFile::makeTmp(); - $this->tmpFiles[] = $csv; - - // put transect name to first line - $csv->put([$name]); - - $query = $this->query($id); - $rows = $query->get(); - - // CHUNKING IS BROKEN SOMEHOW! - // $query->chunkById(500, function ($rows) use ($csv) { - foreach ($rows as $row) { - $csv->put([ - $row->filename, - $row->annotation_id, - $this->expandLabelName($row->label_id), - $row->shape_name, - $row->points, - $row->attrs - ]); - } - // }, 'annotation_labels.id', 'annotation_labels_id'); - - $csv->close(); - } - - $this->executeScript('full_report'); - } - - /** - * Assemble a new DB query for a transect. - * - * @param int $id Transect ID - * - * @return \Illuminate\Database\Query\Builder - */ - protected function query($id) - { - return DB::table('annotation_labels') - ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') - ->join('images', 'annotations.image_id', '=', 'images.id') - ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') - ->select( - 'annotation_labels.id as annotation_labels_id', // required for chunkById - 'images.filename', - 'annotations.id as annotation_id', - 'annotation_labels.label_id', - 'shapes.name as shape_name', - 'annotations.points', - 'images.attrs' - ) - ->where('images.transect_id', $id) - ->when($this->isRestricted(), function ($query) use ($id) { - return $query->whereNotIn('annotations.id', $this->getSkipIds($id)); - }) - ->orderBy('annotations.id'); - } -} diff --git a/src/Support/Reports/ExecutesPythonScript.php b/src/Support/Reports/ExecutesPythonScript.php index 10c9d6077..4da014d40 100644 --- a/src/Support/Reports/ExecutesPythonScript.php +++ b/src/Support/Reports/ExecutesPythonScript.php @@ -12,9 +12,10 @@ trait ExecutesPythonScript * Execute the external report parsing Python script * * @param string $name Name of the script to execute (in the `export.scripts` config namespace) + * @param string $title Title to use for the report * @throws Exception If the script returned an error code. */ - protected function executeScript($name) + protected function executeScript($name, $title) { $python = config('export.python'); $script = config("export.scripts.{$name}"); @@ -24,7 +25,7 @@ protected function executeScript($name) }, $this->tmpFiles)); $exec = App::make(Exec::class, [ - 'command' => "{$python} {$script} \"{$this->project->name}\" {$this->availableReport->path} {$csvs}", + 'command' => "{$python} {$script} \"{$title}\" {$this->availableReport->path} {$csvs}", ]); if ($exec->code !== 0) { diff --git a/src/Support/Reports/ImageLabels/BasicReport.php b/src/Support/Reports/ImageLabels/BasicReport.php deleted file mode 100644 index 9d31b4f87..000000000 --- a/src/Support/Reports/ImageLabels/BasicReport.php +++ /dev/null @@ -1,86 +0,0 @@ -project->transects() - ->pluck('name', 'id'); - - foreach ($transects as $id => $name) { - $csv = CsvFile::makeTmp(); - $this->tmpFiles[] = $csv; - - - // put transect name to first line - $csv->put([$name]); - - $rows = $this->query($id)->get()->groupBy('id'); - - foreach ($rows as $imageId => $row) { - $csv->put([ - $row[0]->id, - $row[0]->filename, - $row->map(function ($row) { - return $this->expandLabelName($row->label_id); - })->implode(', '), - ]); - } - - $csv->close(); - } - - $this->executeScript('image_labels_standard_report'); - } - - /** - * Assemble a new DB query for a transect. - * - * @param int $id Transect ID - * @return \Illuminate\Database\Query\Builder - */ - protected function query($id) - { - return DB::table('image_labels') - ->join('images', 'image_labels.image_id', '=', 'images.id') - ->select('images.id', 'images.filename', 'image_labels.label_id') - ->where('images.transect_id', $id) - ->orderBy('images.filename'); - } -} diff --git a/src/Support/Reports/ImageLabels/CsvReport.php b/src/Support/Reports/ImageLabels/CsvReport.php deleted file mode 100644 index 1789f18b7..000000000 --- a/src/Support/Reports/ImageLabels/CsvReport.php +++ /dev/null @@ -1,110 +0,0 @@ -project->transects() - ->pluck('name', 'id'); - - foreach ($transects as $id => $name) { - $csv = CsvFile::makeTmp(); - $this->tmpFiles[$id] = $csv; - - // add column headers - $csv->put([ - 'image_label_id', - 'image_id', - 'filename', - 'user_id', - 'firstname', - 'lastname', - 'label_id', - 'label_name', - ]); - - $query = $this->query($id); - $rows = $query->get(); - - // CHUNKING IS BROKEN SOMEHOW! - // $query->chunkById(500, function ($rows) use ($csv) { - foreach ($rows as $row) { - $csv->put([ - $row->image_label_id, - $row->image_id, - $row->filename, - $row->user_id, - $row->firstname, - $row->lastname, - $row->label_id, - $this->expandLabelName($row->label_id), - ]); - } - // }, 'image_labels.id', 'image_label_id'); - - $csv->close(); - } - - $this->makeZip($transects); - } - - /** - * Assemble a new DB query for a transect. - * - * @param int $id Transect ID - * @return \Illuminate\Database\Query\Builder - */ - protected function query($id) - { - return DB::table('image_labels') - ->join('images', 'image_labels.image_id', '=', 'images.id') - ->join('users', 'image_labels.user_id', '=', 'users.id') - ->select([ - 'image_labels.id as image_label_id', - 'image_labels.image_id', - 'images.filename', - 'image_labels.user_id', - 'users.firstname', - 'users.lastname', - 'image_labels.label_id', - ]) - ->where('images.transect_id', $id) - ->orderBy('images.filename'); - } -} diff --git a/src/Support/Reports/MakesZipArchives.php b/src/Support/Reports/MakesZipArchives.php index 9d38e0759..2449e366c 100644 --- a/src/Support/Reports/MakesZipArchives.php +++ b/src/Support/Reports/MakesZipArchives.php @@ -12,12 +12,12 @@ trait MakesZipArchives /** * Create a ZIP archive as a report. * - * This function will create a ZIP archive at `$this->availableReport->path` and put the CSV files of `$this->tmpFiles`, indexed by the transect IDs, into it. + * This function will create a ZIP archive at `$this->availableReport->path`. * - * @param array $transects Array of transects, with transect IDs as keys and transect names as values. + * @param array $files Array of files, with source path as keys and target filenames (in the ZIP) as values. * @throws Exception If the ZIP file could not be created. */ - protected function makeZip($transects) + protected function makeZip($files) { $zip = App::make(ZipArchive::class); $open = $zip->open($this->availableReport->path, ZipArchive::CREATE); @@ -27,14 +27,24 @@ protected function makeZip($transects) } try { - foreach ($transects as $id => $name) { - $zip->addFile( - $this->tmpFiles[$id]->path, - $id.'_'.Str::slug($name).'.csv' - ); + foreach ($files as $source => $target) { + $zip->addFile($source, $target); } } finally { $zip->close(); } } + + /** + * Sanitizes a filename + * + * @param string $name Filename to sanitize + * @param string $extension File extension to use (since dots are sanitized, too) + * + * @return string + */ + protected function sanitizeFilename($name, $extension) + { + return Str::slug($name).'.'.$extension; + } } diff --git a/src/Support/Reports/Report.php b/src/Support/Reports/Report.php index 18a7af122..03ed87f10 100644 --- a/src/Support/Reports/Report.php +++ b/src/Support/Reports/Report.php @@ -5,18 +5,10 @@ use File; use Exception; use Dias\Label; -use Dias\Project; use Dias\Modules\Export\AvailableReport; class Report { - /** - * The project for which the report should be generated. - * - * @var Project - */ - public $project; - /** * Options for this report. * @@ -60,9 +52,7 @@ class Report protected $availableReport; /** - * Cache for labels of all label trees that were used in this project. - * - * Not necessarily only the label trees that are currently attached to the project! + * Cache for labels of all label trees that are used for this report. * * @var \Illuminate\Support\Collection */ @@ -71,12 +61,10 @@ class Report /** * Create a report instance. * - * @param Project $project The project for which the report should be generated. * @param array $options Options for the report */ - public function __construct(Project $project, $options = []) + public function __construct($options = []) { - $this->project = $project; $this->options = collect($options); $this->tmpFiles = []; $this->availableReport = new AvailableReport; @@ -84,8 +72,6 @@ public function __construct(Project $project, $options = []) /** * Generate the report. - * - * @return void */ public function generate() { @@ -104,23 +90,23 @@ public function generate() } /** - * Get the report name + * Internal function to generate the report. * - * @return string + * (public for better testability) */ - public function getName() + public function generateReport() { - return $this->name; + // } /** - * Get the name of the project belonging to this report + * Get the report name * * @return string */ - public function getProjectName() + public function getName() { - return $this->project->name; + return $this->name; } /** @@ -156,6 +142,16 @@ public function getExtension() return $this->extension; } + /** + * Get the ID associated with this report (e.g. project ID) + * + * @return int + */ + public function getId() + { + return 0; + } + /** * Get the filename used for downloading the report * @@ -163,7 +159,17 @@ public function getExtension() */ public function getDownloadFilename() { - return "biigle_{$this->project->id}_{$this->getFilename()}.{$this->getExtension()}"; + return "biigle_{$this->getId()}_{$this->getFilename()}.{$this->getExtension()}"; + } + + /** + * Description of the subject of this report (e.g. `project xyz`). + * + * @return string + */ + public function getSubject() + { + return ''; } /** @@ -177,9 +183,7 @@ public function getDownloadFilename() public function expandLabelName($id) { if (is_null($this->labels)) { - // We expect most of the used labels to belong to a label tree currently - // attached to the project. - $this->labels = $this->getProjectLabels()->keyBy('id'); + $this->labels = collect(); } if (!$this->labels->has($id)) { @@ -201,22 +205,6 @@ public function expandLabelName($id) return $name; } - /** - * Get all labels that are attached to the project of this report (through label trees). - * - * @return \Illuminate\Support\Collection - */ - protected function getProjectLabels() - { - return Label::select('id', 'name', 'parent_id') - ->whereIn('label_tree_id', function ($query) { - $query->select('label_tree_id') - ->from('label_tree_project') - ->where('project_id', $this->project->id); - }) - ->get(); - } - /** * Get all labels that belong to the label tree of the given label. * diff --git a/src/Support/Reports/Annotations/BasicReport.php b/src/Support/Reports/Transects/Annotations/BasicReport.php similarity index 56% rename from src/Support/Reports/Annotations/BasicReport.php rename to src/Support/Reports/Transects/Annotations/BasicReport.php index b0564478d..54f818f93 100644 --- a/src/Support/Reports/Annotations/BasicReport.php +++ b/src/Support/Reports/Transects/Annotations/BasicReport.php @@ -1,13 +1,12 @@ project->transects() - ->pluck('name', 'id'); + $csv = CsvFile::makeTmp(); + $this->tmpFiles[] = $csv; - foreach ($transects as $id => $name) { - $csv = CsvFile::makeTmp(); - $this->tmpFiles[] = $csv; + // put transect name to first line + $csv->put([$this->transect->name]); + $rows = $this->query()->get(); - // put transect name to first line - $csv->put([$name]); - - $rows = $this->query($id)->get(); - - foreach ($rows as $row) { - $csv->put([ - $row->name, - $row->color, - $row->count, - ]); - } - - $csv->close(); + foreach ($rows as $row) { + $csv->put([$row->name, $row->color, $row->count]); } - $this->executeScript('basic_report'); + $csv->close(); + + $this->executeScript('basic_report', $this->transect->name); } /** - * Assemble a new DB query for a transect. - * - * @param int $id Transect ID + * Assemble a new DB query for the transect of this report. * * @return \Illuminate\Database\Query\Builder */ - protected function query($id) + protected function query() { return DB::table('labels') ->join('annotation_labels', 'annotation_labels.label_id', '=', 'labels.id') ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') ->join('images', 'annotations.image_id', '=', 'images.id') - ->where('images.transect_id', $id) - ->when($this->isRestricted(), function ($query) use ($id) { - return $query->whereNotIn('annotations.id', $this->getSkipIds($id)); + ->where('images.transect_id', $this->transect->id) + ->when($this->isRestricted(), function ($query) { + return $query->whereNotIn('annotations.id', $this->getSkipIds()); }) ->select(DB::raw('labels.name, labels.color, count(labels.id) as count')) ->groupBy('labels.id') diff --git a/src/Support/Reports/Transects/Annotations/CsvReport.php b/src/Support/Reports/Transects/Annotations/CsvReport.php new file mode 100644 index 000000000..471b4a692 --- /dev/null +++ b/src/Support/Reports/Transects/Annotations/CsvReport.php @@ -0,0 +1,120 @@ +tmpFiles[] = $csv; + + // add column headers + $csv->put([ + 'annotation_label_id', + 'label_id', + 'label_name', + 'user_id', + 'firstname', + 'lastname', + 'image_id', + 'filename', + 'shape_id', + 'shape_name', + 'points', + 'attributes', + ]); + + $rows = $this->query()->get(); + + // CHUNKING IS BROKEN SOMEHOW! + // $query->chunkById(500, function ($rows) use ($csv) { + foreach ($rows as $row) { + $csv->put([ + $row->annotation_label_id, + $row->label_id, + $this->expandLabelName($row->label_id), + $row->user_id, + $row->firstname, + $row->lastname, + $row->image_id, + $row->filename, + $row->shape_id, + $row->shape_name, + $row->points, + $row->attrs, + ]); + } + // }, 'annotation_labels.id', 'annotation_label_id'); + + $csv->close(); + + $this->makeZip([ + $csv->path => $this->sanitizeFilename("{$this->transect->id}-{$this->transect->name}", 'csv'), + ]); + } + + /** + * Assemble a new DB query for the transect of this report. + * + * @return \Illuminate\Database\Query\Builder + */ + protected function query() + { + return DB::table('annotation_labels') + ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') + ->join('images', 'annotations.image_id', '=', 'images.id') + ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') + ->join('users', 'annotation_labels.user_id', '=', 'users.id') + ->select([ + 'annotation_labels.id as annotation_label_id', + 'annotation_labels.label_id', + 'users.id as user_id', + 'users.firstname', + 'users.lastname', + 'images.id as image_id', + 'images.filename', + 'shapes.id as shape_id', + 'shapes.name as shape_name', + 'annotations.points', + 'images.attrs', + ]) + ->where('images.transect_id', $this->transect->id) + ->when($this->isRestricted(), function ($query) { + return $query->whereNotIn('annotations.id', $this->getSkipIds()); + }) + ->orderBy('annotation_labels.id'); + } +} diff --git a/src/Support/Reports/Annotations/ExtendedReport.php b/src/Support/Reports/Transects/Annotations/ExtendedReport.php similarity index 54% rename from src/Support/Reports/Annotations/ExtendedReport.php rename to src/Support/Reports/Transects/Annotations/ExtendedReport.php index 90a0371ed..d69ef90dc 100644 --- a/src/Support/Reports/Annotations/ExtendedReport.php +++ b/src/Support/Reports/Transects/Annotations/ExtendedReport.php @@ -1,13 +1,12 @@ project->transects() - ->pluck('name', 'id'); + $csv = CsvFile::makeTmp(); + $this->tmpFiles[] = $csv; - foreach ($transects as $id => $name) { - $csv = CsvFile::makeTmp(); - $this->tmpFiles[] = $csv; + $csv->put([$this->transect->name]); + $csv->put(['image_filename', 'label_name', 'annotation_count']); - // put transect name to first line - $csv->put([$name]); + $rows = $this->query()->get(); - $query = $this->query($id); - $rows = $query->get(); - - // DO NOT USE CHUNK BECAUSE IT DESTROYS groupBy! - foreach ($rows as $row) { - $csv->put([ - $row->filename, - $this->expandLabelName($row->label_id), - $row->count, - ]); - } - - $csv->close(); + // DO NOT USE CHUNK BECAUSE IT DESTROYS groupBy! + foreach ($rows as $row) { + $csv->put([ + $row->filename, + $this->expandLabelName($row->label_id), + $row->count, + ]); } - $this->executeScript('extended_report'); + $csv->close(); + + $this->executeScript('extended_report', $this->transect->name); } /** - * Assemble a new DB query for a transect. - * - * @param int $id Transect ID + * Assemble a new DB query for the transect of this report. * * @return \Illuminate\Database\Query\Builder */ - protected function query($id) + protected function query() { return DB::table('images') ->join('annotations', 'annotations.image_id', '=', 'images.id') ->join('annotation_labels', 'annotation_labels.annotation_id', '=', 'annotations.id') ->select(DB::raw('images.filename, annotation_labels.label_id, count(annotation_labels.label_id) as count')) ->groupBy('annotation_labels.label_id', 'images.id') - ->where('images.transect_id', $id) - ->when($this->isRestricted(), function ($query) use ($id) { - return $query->whereNotIn('annotations.id', $this->getSkipIds($id)); + ->where('images.transect_id', $this->transect->id) + ->when($this->isRestricted(), function ($query) { + return $query->whereNotIn('annotations.id', $this->getSkipIds()); }) ->orderBy('images.filename'); } diff --git a/src/Support/Reports/Transects/Annotations/FullReport.php b/src/Support/Reports/Transects/Annotations/FullReport.php new file mode 100644 index 000000000..f643ac108 --- /dev/null +++ b/src/Support/Reports/Transects/Annotations/FullReport.php @@ -0,0 +1,94 @@ +tmpFiles[] = $csv; + + // put transect name to first line + $csv->put([$this->transect->name]); + + $rows = $this->query()->get(); + + // CHUNKING IS BROKEN SOMEHOW! + // $query->chunkById(500, function ($rows) use ($csv) { + foreach ($rows as $row) { + $csv->put([ + $row->filename, + $row->annotation_id, + $this->expandLabelName($row->label_id), + $row->shape_name, + $row->points, + $row->attrs + ]); + } + // }, 'annotation_labels.id', 'annotation_labels_id'); + + $csv->close(); + + $this->executeScript('full_report', $this->transect->name); + } + + /** + * Assemble a new DB query for the transect of this report. + * + * @return \Illuminate\Database\Query\Builder + */ + protected function query() + { + return DB::table('annotation_labels') + ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') + ->join('images', 'annotations.image_id', '=', 'images.id') + ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') + ->select( + // 'annotation_labels.id as annotation_labels_id', // required for chunkById + 'images.filename', + 'annotations.id as annotation_id', + 'annotation_labels.label_id', + 'shapes.name as shape_name', + 'annotations.points', + 'images.attrs' + ) + ->where('images.transect_id', $this->transect->id) + ->when($this->isRestricted(), function ($query) { + return $query->whereNotIn('annotations.id', $this->getSkipIds()); + }) + ->orderBy('annotations.id'); + } +} diff --git a/src/Support/Reports/Annotations/AnnotationReport.php b/src/Support/Reports/Transects/Annotations/Report.php similarity index 88% rename from src/Support/Reports/Annotations/AnnotationReport.php rename to src/Support/Reports/Transects/Annotations/Report.php index 1a9c85c16..6f2aa3cc7 100644 --- a/src/Support/Reports/Annotations/AnnotationReport.php +++ b/src/Support/Reports/Transects/Annotations/Report.php @@ -1,13 +1,12 @@ exportArea; + $exportArea = Transect::convert($this->transect)->exportArea; if (!$exportArea) { // take all annotations if no export area is specified @@ -90,7 +87,7 @@ protected function getSkipIds($id) DB::table('annotations') ->join('images', 'annotations.image_id', '=', 'images.id') - ->where('images.transect_id', $id) + ->where('images.transect_id', $this->transect->id) ->select('annotations.id as id', 'annotations.points') ->chunkById(500, $handleChunk, 'annotations.id', 'id'); diff --git a/src/Support/Reports/Transects/ImageLabels/BasicReport.php b/src/Support/Reports/Transects/ImageLabels/BasicReport.php new file mode 100644 index 000000000..d0b528bbb --- /dev/null +++ b/src/Support/Reports/Transects/ImageLabels/BasicReport.php @@ -0,0 +1,78 @@ +tmpFiles[] = $csv; + + $csv->put([$this->transect->name]); + $csv->put(['image_id', 'image_filename', 'label_names']); + + $rows = $this->query()->get()->groupBy('id'); + + foreach ($rows as $imageId => $row) { + $csv->put([ + $row[0]->id, + $row[0]->filename, + $row->map(function ($row) { + return $this->expandLabelName($row->label_id); + })->implode(', '), + ]); + } + + $csv->close(); + + $this->executeScript('extended_report', $this->transect->name); + } + + /** + * Assemble a new DB query for the transect of this report. + * + * @return \Illuminate\Database\Query\Builder + */ + protected function query() + { + return DB::table('image_labels') + ->join('images', 'image_labels.image_id', '=', 'images.id') + ->select('images.id', 'images.filename', 'image_labels.label_id') + ->where('images.transect_id', $this->transect->id) + ->orderBy('images.filename'); + } +} diff --git a/src/Support/Reports/Transects/ImageLabels/CsvReport.php b/src/Support/Reports/Transects/ImageLabels/CsvReport.php new file mode 100644 index 000000000..08c7a148f --- /dev/null +++ b/src/Support/Reports/Transects/ImageLabels/CsvReport.php @@ -0,0 +1,104 @@ +tmpFiles[] = $csv; + + // add column headers + $csv->put([ + 'image_label_id', + 'image_id', + 'filename', + 'user_id', + 'firstname', + 'lastname', + 'label_id', + 'label_name', + ]); + + $rows = $this->query()->get(); + + // CHUNKING IS BROKEN SOMEHOW! + // $query->chunkById(500, function ($rows) use ($csv) { + foreach ($rows as $row) { + $csv->put([ + $row->image_label_id, + $row->image_id, + $row->filename, + $row->user_id, + $row->firstname, + $row->lastname, + $row->label_id, + $this->expandLabelName($row->label_id), + ]); + } + // }, 'image_labels.id', 'image_label_id'); + + $csv->close(); + + $this->makeZip([ + $csv->path => $this->sanitizeFilename("{$this->transect->id}-{$this->transect->name}", 'csv'), + ]); + } + + /** + * Assemble a new DB query for the transect of this report. + * + * @return \Illuminate\Database\Query\Builder + */ + protected function query() + { + return DB::table('image_labels') + ->join('images', 'image_labels.image_id', '=', 'images.id') + ->join('users', 'image_labels.user_id', '=', 'users.id') + ->select([ + 'image_labels.id as image_label_id', + 'image_labels.image_id', + 'images.filename', + 'image_labels.user_id', + 'users.firstname', + 'users.lastname', + 'image_labels.label_id', + ]) + ->where('images.transect_id', $this->transect->id) + ->orderBy('images.filename'); + } +} diff --git a/src/Support/Reports/Transects/Report.php b/src/Support/Reports/Transects/Report.php new file mode 100644 index 000000000..23e35ba9c --- /dev/null +++ b/src/Support/Reports/Transects/Report.php @@ -0,0 +1,88 @@ +transect = $transect; + } + + /** + * Get the ID associated with this report (e.g. project ID) + * + * @return int + */ + public function getId() + { + return $this->transect->id; + } + + /** + * Description of the subject of this report (e.g. `project xyz`). + * + * @return string + */ + public function getSubject() + { + return "transect {$this->transect->name}"; + } + + /** + * Constructs a label name from the names of all parent labels and the label itself. + * + * Example: `Animalia > Annelida > Polychaeta > Buskiella sp` + * + * @param int $id Label ID + * @return string + */ + public function expandLabelName($id) + { + if (is_null($this->labels)) { + // We expect most of the used labels to belong to a label tree currently + // attached to the project. + $this->labels = $this->getTransectLabels()->keyBy('id'); + } + + return parent::expandLabelName($id); + } + + /** + * Get all labels that are attached to the transect of this report (through project label trees). + * + * @return \Illuminate\Support\Collection + */ + protected function getTransectLabels() + { + return Label::select('id', 'name', 'parent_id') + ->whereIn('label_tree_id', function ($query) { + $query->select('label_tree_id') + ->from('label_tree_project') + ->whereIn('project_id', function ($query) { + $query->select('project_id') + ->from('project_transect') + ->where('transect_id', $this->transect->id); + }); + }) + ->get(); + } +} diff --git a/src/config/export.php b/src/config/export.php index 80f3708a8..0f726f99f 100644 --- a/src/config/export.php +++ b/src/config/export.php @@ -14,7 +14,6 @@ 'basic_report' => __DIR__.'/../resources/scripts/basic_report.py', 'extended_report' => __DIR__.'/../resources/scripts/extended_report.py', 'full_report' => __DIR__.'/../resources/scripts/full_report.py', - 'image_labels_standard_report' => __DIR__.'/../resources/scripts/image_label_report.py', ], /* diff --git a/src/resources/scripts/basic_report.py b/src/resources/scripts/basic_report.py index 882be5615..3b328420e 100755 --- a/src/resources/scripts/basic_report.py +++ b/src/resources/scripts/basic_report.py @@ -10,7 +10,7 @@ import numpy as np import csv -project_name = sys.argv[1] +title = sys.argv[1] target_file = sys.argv[2] transect_csvs = sys.argv[3:] @@ -33,7 +33,7 @@ def TitleSlide(text): return fig pdf = PdfPages(target_file) -fig = TitleSlide("BIIGLE DIAS basic report for project\n" + project_name.decode('UTF-8')) +fig = TitleSlide("BIIGLE DIAS basic report for transect\n" + title.decode('UTF-8')) pdf.savefig(fig) width = 1. @@ -65,9 +65,9 @@ def TitleSlide(text): pdf.savefig() d = pdf.infodict() -d['Title'] = "BIIGLE DIAS basic report for project " + project_name.decode('UTF-8') +d['Title'] = "BIIGLE DIAS basic report for transect " + title.decode('UTF-8') d['Author'] = 'Biodata Mining Group, Bielefeld University' -d['Subject'] = 'Histograms of label distribution in all transects of the project' +d['Subject'] = 'Histogram of label distribution of the transect' d['Keywords'] = '' d['CreationDate'] = datetime.datetime.today() d['ModDate'] = datetime.datetime.today() diff --git a/src/resources/scripts/extended_report.py b/src/resources/scripts/extended_report.py index 1bcc79eb6..5a1adfbec 100755 --- a/src/resources/scripts/extended_report.py +++ b/src/resources/scripts/extended_report.py @@ -3,28 +3,29 @@ from pyexcelerate import Workbook, Style, Font import csv -project_name = sys.argv[1] target_file = sys.argv[2] -transect_csvs = sys.argv[3:] +csvs = sys.argv[3:] workbook = Workbook() numSheets = 0 -for path in transect_csvs: +for path in csvs: f = open(path, 'r') - transect_csv = csv.reader(f) - rows = np.array(list(transect_csv)) + rows = np.array(list(csv.reader(f))) f.close() # transect name is the first row - if rows.shape[0] == 1: + # column titles are in the second row + if rows.shape[0] == 2: continue numSheets += 1 # rows have the content: image_filename, label_name, label_count # Excel does not permit worksheet names longer than 31 characters - ws = workbook.new_sheet("transect " + str(numSheets), data=rows) - # first row is transect name + ws = workbook.new_sheet("sheet " + str(numSheets), data=rows) + + # bold font for titles ws.set_row_style(1, Style(font=Font(bold=True))) + ws.set_row_style(2, Style(font=Font(bold=True))) if not numSheets: ws = workbook.new_sheet("No labels found") diff --git a/src/resources/scripts/full_report.py b/src/resources/scripts/full_report.py index fa84e9a49..2dd2b02e1 100755 --- a/src/resources/scripts/full_report.py +++ b/src/resources/scripts/full_report.py @@ -5,9 +5,8 @@ import ast import json -project_name = sys.argv[1] target_file = sys.argv[2] -transect_csvs = sys.argv[3:] +csvs = sys.argv[3:] workbook = Workbook() numSheets = 0 @@ -16,17 +15,17 @@ def addRow(x="", y="", label="", filename="", annotation_id="", shape="", area=""): return [filename, annotation_id, shape, x, y, label, area] -for path in transect_csvs: +for path in csvs: f = open(path, 'r') - transect_csv = csv.reader(f) - transect_name = transect_csv.next()[0] - rows = np.array(list(transect_csv)) + csv_file = csv.reader(f) + csv_title = csv_file.next()[0] + rows = np.array(list(csv_file)) f.close() if rows.shape[0] == 0: continue numSheets += 1 # rows have the content: image_filename, annotation_id, label_name, shape_name, points - celldata = [[transect_name]] + celldata = [[csv_title]] celldata.append(addRow("x/radius", "y", "labels", "filename", "annotation_id", "shape", "area in m^2")) uniqueimages = np.unique(rows[:, 0]) @@ -57,7 +56,7 @@ def addRow(x="", y="", label="", filename="", annotation_id="", shape="", area=" # add radius celldata.append(addRow(points[-1], "")) - ws = workbook.new_sheet("transect " + str(numSheets), data=celldata) + ws = workbook.new_sheet("sheet " + str(numSheets), data=celldata) ws.set_row_style(1, Style(font=Font(bold=True))) ws.set_row_style(2, Style(font=Font(bold=True))) diff --git a/src/resources/scripts/image_label_report.py b/src/resources/scripts/image_label_report.py deleted file mode 100644 index 1bcc79eb6..000000000 --- a/src/resources/scripts/image_label_report.py +++ /dev/null @@ -1,32 +0,0 @@ -import sys -import numpy as np -from pyexcelerate import Workbook, Style, Font -import csv - -project_name = sys.argv[1] -target_file = sys.argv[2] -transect_csvs = sys.argv[3:] - -workbook = Workbook() -numSheets = 0 - -for path in transect_csvs: - f = open(path, 'r') - transect_csv = csv.reader(f) - rows = np.array(list(transect_csv)) - f.close() - # transect name is the first row - if rows.shape[0] == 1: - continue - numSheets += 1 - # rows have the content: image_filename, label_name, label_count - - # Excel does not permit worksheet names longer than 31 characters - ws = workbook.new_sheet("transect " + str(numSheets), data=rows) - # first row is transect name - ws.set_row_style(1, Style(font=Font(bold=True))) - -if not numSheets: - ws = workbook.new_sheet("No labels found") - -workbook.save(target_file) diff --git a/tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsBasicReportControllerTest.php b/tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsBasicReportControllerTest.php deleted file mode 100644 index e2dcf7259..000000000 --- a/tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsBasicReportControllerTest.php +++ /dev/null @@ -1,20 +0,0 @@ -project()->id; - - $this->post("api/v1/projects/{$id}/reports/image-labels/basic") - ->assertResponseStatus(401); - - $this->expectsJobs(GenerateReportJob::class); - $this->beGuest(); - $this->post("api/v1/projects/{$id}/reports/image-labels/basic") - ->assertResponseOk(); - } -} diff --git a/tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsCsvReportControllerTest.php b/tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsCsvReportControllerTest.php deleted file mode 100644 index c48bb554b..000000000 --- a/tests/Http/Controllers/Api/ImageLabels/ExportModuleHttpControllersApiImageLabelsCsvReportControllerTest.php +++ /dev/null @@ -1,20 +0,0 @@ -project()->id; - - $this->post("api/v1/projects/{$id}/reports/image-labels/csv") - ->assertResponseStatus(401); - - $this->expectsJobs(GenerateReportJob::class); - $this->beGuest(); - $this->post("api/v1/projects/{$id}/reports/image-labels/csv") - ->assertResponseOk(); - } -} diff --git a/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsBasicReportControllerTest.php b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsBasicReportControllerTest.php similarity index 52% rename from tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsBasicReportControllerTest.php rename to tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsBasicReportControllerTest.php index 01141c0a2..275f90f90 100644 --- a/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsBasicReportControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsBasicReportControllerTest.php @@ -1,27 +1,27 @@ project()->id; + $id = $this->transect()->id; - $this->post("api/v1/projects/{$id}/reports/annotations/basic") + $this->post("api/v1/transects/{$id}/reports/annotations/basic") ->assertResponseStatus(401); $this->expectsJobs(GenerateReportJob::class); $this->beGuest(); - $this->post("api/v1/projects/{$id}/reports/annotations/basic") + $this->post("api/v1/transects/{$id}/reports/annotations/basic") ->assertResponseOk(); $job = $this->dispatchedJobs[0]; $report = $job->report; $this->assertInstanceOf(BasicReport::class, $report); - $this->assertEquals($id, $report->project->id); + $this->assertEquals($id, $report->transect->id); $this->assertEquals(false, $report->options['restricted']); } } diff --git a/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsCsvReportControllerTest.php b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsCsvReportControllerTest.php similarity index 53% rename from tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsCsvReportControllerTest.php rename to tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsCsvReportControllerTest.php index 1c4dcbc1c..d184299f2 100644 --- a/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsCsvReportControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsCsvReportControllerTest.php @@ -1,27 +1,27 @@ project()->id; + $id = $this->transect()->id; - $this->post("api/v1/projects/{$id}/reports/annotations/csv") + $this->post("api/v1/transects/{$id}/reports/annotations/csv") ->assertResponseStatus(401); $this->expectsJobs(GenerateReportJob::class); $this->beGuest(); - $this->post("api/v1/projects/{$id}/reports/annotations/csv") + $this->post("api/v1/transects/{$id}/reports/annotations/csv") ->assertResponseOk(); $job = $this->dispatchedJobs[0]; $report = $job->report; $this->assertInstanceOf(CsvReport::class, $report); - $this->assertEquals($id, $report->project->id); + $this->assertEquals($id, $report->transect->id); $this->assertEquals(false, $report->options['restricted']); } } diff --git a/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsExtendedReportControllerTest.php b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsExtendedReportControllerTest.php similarity index 52% rename from tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsExtendedReportControllerTest.php rename to tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsExtendedReportControllerTest.php index 5ee5afd23..c69dc3088 100644 --- a/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsExtendedReportControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsExtendedReportControllerTest.php @@ -1,27 +1,27 @@ project()->id; + $id = $this->transect()->id; - $this->post("api/v1/projects/{$id}/reports/annotations/extended") + $this->post("api/v1/transects/{$id}/reports/annotations/extended") ->assertResponseStatus(401); $this->expectsJobs(GenerateReportJob::class); $this->beGuest(); - $this->post("api/v1/projects/{$id}/reports/annotations/extended") + $this->post("api/v1/transects/{$id}/reports/annotations/extended") ->assertResponseOk(); $job = $this->dispatchedJobs[0]; $report = $job->report; $this->assertInstanceOf(ExtendedReport::class, $report); - $this->assertEquals($id, $report->project->id); + $this->assertEquals($id, $report->transect->id); $this->assertEquals(false, $report->options['restricted']); } } diff --git a/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsFullReportControllerTest.php b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsFullReportControllerTest.php similarity index 53% rename from tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsFullReportControllerTest.php rename to tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsFullReportControllerTest.php index 70d350c0b..f10b03de6 100644 --- a/tests/Http/Controllers/Api/Annotations/ExportModuleHttpControllersApiAnnotationsFullReportControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsFullReportControllerTest.php @@ -1,27 +1,27 @@ project()->id; + $id = $this->transect()->id; - $this->post("api/v1/projects/{$id}/reports/annotations/full") + $this->post("api/v1/transects/{$id}/reports/annotations/full") ->assertResponseStatus(401); $this->expectsJobs(GenerateReportJob::class); $this->beGuest(); - $this->post("api/v1/projects/{$id}/reports/annotations/full") + $this->post("api/v1/transects/{$id}/reports/annotations/full") ->assertResponseOk(); $job = $this->dispatchedJobs[0]; $report = $job->report; $this->assertInstanceOf(FullReport::class, $report); - $this->assertEquals($id, $report->project->id); + $this->assertEquals($id, $report->transect->id); $this->assertEquals(false, $report->options['restricted']); } } diff --git a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiTransectExportAreaControllerTest.php b/tests/Http/Controllers/Api/Transects/ExportModuleHttpControllersApiTransectsExportAreaControllerTest.php similarity index 96% rename from tests/Http/Controllers/Api/ExportModuleHttpControllersApiTransectExportAreaControllerTest.php rename to tests/Http/Controllers/Api/Transects/ExportModuleHttpControllersApiTransectsExportAreaControllerTest.php index e0115a42a..b2803f428 100644 --- a/tests/Http/Controllers/Api/ExportModuleHttpControllersApiTransectExportAreaControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/ExportModuleHttpControllersApiTransectsExportAreaControllerTest.php @@ -2,7 +2,7 @@ use Dias\Modules\Export\Transect; -class ExportModuleHttpControllersApiTransectExportAreaControllerTest extends ApiTestCase { +class ExportModuleHttpControllersApiTransectsExportAreaControllerTest extends ApiTestCase { public function testShow() { diff --git a/tests/Http/Controllers/Api/Transects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsBasicReportControllerTest.php b/tests/Http/Controllers/Api/Transects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsBasicReportControllerTest.php new file mode 100644 index 000000000..86b73317d --- /dev/null +++ b/tests/Http/Controllers/Api/Transects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsBasicReportControllerTest.php @@ -0,0 +1,20 @@ +transect()->id; + + $this->post("api/v1/transects/{$id}/reports/image-labels/basic") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateReportJob::class); + $this->beGuest(); + $this->post("api/v1/transects/{$id}/reports/image-labels/basic") + ->assertResponseOk(); + } +} diff --git a/tests/Http/Controllers/Api/Transects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsCsvReportControllerTest.php b/tests/Http/Controllers/Api/Transects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsCsvReportControllerTest.php new file mode 100644 index 000000000..149bcec39 --- /dev/null +++ b/tests/Http/Controllers/Api/Transects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsCsvReportControllerTest.php @@ -0,0 +1,20 @@ +transect()->id; + + $this->post("api/v1/transects/{$id}/reports/image-labels/csv") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateReportJob::class); + $this->beGuest(); + $this->post("api/v1/transects/{$id}/reports/image-labels/csv") + ->assertResponseOk(); + } +} diff --git a/tests/Support/Reports/ExportModuleSupportReportsReportTest.php b/tests/Support/Reports/ExportModuleSupportReportsReportTest.php index 548a554b1..c4f9b4e0f 100644 --- a/tests/Support/Reports/ExportModuleSupportReportsReportTest.php +++ b/tests/Support/Reports/ExportModuleSupportReportsReportTest.php @@ -6,50 +6,30 @@ class ExportModuleSupportReportsReportTest extends TestCase { public function testHandleException() { - $project = ProjectTest::make(); $this->setExpectedException(Exception::class); - with(new ReportThrowExceptionStub($project))->generate(); + with(new ReportThrowExceptionStub())->generate(); } public function testHandleRegular() { - $project = ProjectTest::make(); - with(new ReportThrowNoExceptionStub($project))->generate(); + with(new ReportThrowNoExceptionStub())->generate(); } public function testGetUrl() { - $project = ProjectTest::make(); - $url = with(new ReportThrowNoExceptionStub($project))->getUrl(); + $url = with(new ReportThrowNoExceptionStub())->getUrl(); $this->assertTrue(ends_with($url, 'ab_cd_report.txt')); } - public function testExpandLabelNameOwnTree() + public function testExpandLabelName() { - $project = ProjectTest::create(); $root = LabelTest::create(); $child = LabelTest::create([ 'parent_id' => $root->id, 'label_tree_id' => $root->label_tree_id, ]); - $project->labelTrees()->attach($root->tree); - $report = new Report($project); - - $this->assertEquals("{$root->name} > {$child->name}", $report->expandLabelName($child->id)); - } - - public function testExpandLabelNameOtherTree() - { - $project = ProjectTest::create(); - // these labels do NOT belong to a label tree attached to the project - $root = LabelTest::create(); - $child = LabelTest::create([ - 'parent_id' => $root->id, - 'label_tree_id' => $root->label_tree_id, - ]); - - $report = new Report($project); + $report = new Report(); $this->assertEquals("{$root->name} > {$child->name}", $report->expandLabelName($child->id)); } @@ -71,12 +51,8 @@ public function generateReport() class ReportThrowNoExceptionStub extends Report { - public function __construct($project) - { - parent::__construct($project); - $this->filename = 'ab_cd_report'; - $this->extension = 'txt'; - } + protected $filename = 'ab_cd_report'; + protected $extension = 'txt'; public function generateReport() { diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsBasicReportTest.php similarity index 83% rename from tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php rename to tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsBasicReportTest.php index b6c637af8..0528d31cf 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsBasicReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsBasicReportTest.php @@ -4,14 +4,14 @@ use Dias\Modules\Export\Transect; use Dias\Modules\Export\Support\Exec; use Dias\Modules\Export\Support\CsvFile; -use Dias\Modules\Export\Support\Reports\Annotations\BasicReport; +use Dias\Modules\Export\Support\Reports\Transects\Annotations\BasicReport; -class ExportModuleSupportReportsAnnotationsBasicReportTest extends TestCase +class ExportModuleSupportReportstransectsAnnotationsBasicReportTest extends TestCase { public function testProperties() { - $report = new BasicReport(ProjectTest::make()); + $report = new BasicReport(TransectTest::make()); $this->assertEquals('basic annotation report', $report->getName()); $this->assertEquals('basic_annotation_report', $report->getFilename()); $this->assertEquals('pdf', $report->getExtension()); @@ -19,9 +19,7 @@ public function testProperties() public function testGenerateReport() { - $project = ProjectTest::create(); $transect = TransectTest::create(); - $project->transects()->attach($transect); $user = UserTest::create(); $al = AnnotationLabelTest::create(); @@ -67,6 +65,6 @@ public function testGenerateReport() return $mock; }); - with(new BasicReport($project))->generateReport(); + with(new BasicReport($transect))->generateReport(); } } diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsCsvReportTest.php similarity index 86% rename from tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php rename to tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsCsvReportTest.php index e24c951d3..521735105 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsCsvReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsCsvReportTest.php @@ -1,13 +1,13 @@ assertEquals('CSV annotation report', $report->getName()); $this->assertEquals('csv_annotation_report', $report->getFilename()); $this->assertEquals('zip', $report->getExtension()); @@ -15,11 +15,9 @@ public function testProperties() public function testGenerateReport() { - $project = ProjectTest::create(); $transect = TransectTest::create([ 'name' => 'My Cool Transect', ]); - $project->transects()->attach($transect); $root = LabelTest::create(); $child = LabelTest::create([ @@ -92,7 +90,7 @@ public function testGenerateReport() $mock->shouldReceive('addFile') ->once() - ->with('abc', "{$transect->id}_my-cool-transect.csv"); + ->with('abc', "{$transect->id}-my-cool-transect.csv"); $mock->shouldReceive('close')->once(); @@ -100,6 +98,6 @@ public function testGenerateReport() return $mock; }); - with(new CsvReport($project))->generateReport(); + with(new CsvReport($transect))->generateReport(); } } diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsExtendedReportTest.php similarity index 82% rename from tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php rename to tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsExtendedReportTest.php index a19ec3da9..9b1757bd8 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsExtendedReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsExtendedReportTest.php @@ -4,13 +4,13 @@ use Dias\Modules\Export\Transect; use Dias\Modules\Export\Support\Exec; use Dias\Modules\Export\Support\CsvFile; -use Dias\Modules\Export\Support\Reports\Annotations\ExtendedReport; +use Dias\Modules\Export\Support\Reports\Transects\Annotations\ExtendedReport; -class ExportModuleSupportReportsAnnotationsExtendedReportTest extends TestCase +class ExportModuleSupportReportstransectsAnnotationsExtendedReportTest extends TestCase { public function testProperties() { - $report = new ExtendedReport(ProjectTest::make()); + $report = new ExtendedReport(TransectTest::make()); $this->assertEquals('extended annotation report', $report->getName()); $this->assertEquals('extended_annotation_report', $report->getFilename()); $this->assertEquals('xlsx', $report->getExtension()); @@ -18,9 +18,7 @@ public function testProperties() public function testGenerateReport() { - $project = ProjectTest::create(); $transect = TransectTest::create(); - $project->transects()->attach($transect); $user = UserTest::create(); $root = LabelTest::create(); @@ -54,6 +52,10 @@ public function testGenerateReport() ->once() ->with([$transect->name]); + $mock->shouldReceive('put') + ->once() + ->with(['image_filename', 'label_name', 'annotation_count']); + $mock->shouldReceive('put') ->once() ->with([$al->annotation->image->filename, "{$root->name} > {$child->name}", 2]); @@ -75,6 +77,6 @@ public function testGenerateReport() return $mock; }); - with(new ExtendedReport($project))->generateReport(); + with(new ExtendedReport($transect))->generateReport(); } } diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php similarity index 85% rename from tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php rename to tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php index 1836af17b..c8aa99d93 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsFullReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php @@ -4,13 +4,13 @@ use Dias\Modules\Export\Transect; use Dias\Modules\Export\Support\Exec; use Dias\Modules\Export\Support\CsvFile; -use Dias\Modules\Export\Support\Reports\Annotations\FullReport; +use Dias\Modules\Export\Support\Reports\Transects\Annotations\FullReport; -class ExportModuleSupportReportsAnnotationsFullReportTest extends TestCase +class ExportModuleSupportReportsTransectsAnnotationsFullReportTest extends TestCase { public function testProperties() { - $report = new FullReport(ProjectTest::make()); + $report = new FullReport(TransectTest::make()); $this->assertEquals('full annotation report', $report->getName()); $this->assertEquals('full_annotation_report', $report->getFilename()); $this->assertEquals('xlsx', $report->getExtension()); @@ -18,9 +18,7 @@ public function testProperties() public function testGenerateReport() { - $project = ProjectTest::create(); $transect = TransectTest::create(); - $project->transects()->attach($transect); $user = UserTest::create(); $root = LabelTest::create(); @@ -72,6 +70,6 @@ public function testGenerateReport() return $mock; }); - with(new FullReport($project))->generateReport(); + with(new FullReport($transect))->generateReport(); } } diff --git a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsAnnotationReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsReportTest.php similarity index 50% rename from tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsAnnotationReportTest.php rename to tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsReportTest.php index 3209a9390..181e9bf9d 100644 --- a/tests/Support/Reports/Annotations/ExportModuleSupportReportsAnnotationsAnnotationReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsReportTest.php @@ -4,16 +4,14 @@ use Dias\Modules\Export\Transect; use Dias\Modules\Export\Support\Exec; use Dias\Modules\Export\Support\CsvFile; -use Dias\Modules\Export\Support\Reports\Annotations\BasicReport; +use Dias\Modules\Export\Support\Reports\Transects\Annotations\Report; -class ExportModuleSupportReportsAnnotationsAnnotationReportTest extends TestCase +class ExportModuleSupportReportsTransectsAnnotationsReportTest extends TestCase { public function testGenerateReportRestrict() { - $project = ProjectTest::create(); $transect = Transect::convert(TransectTest::create()); - $project->transects()->attach($transect); $user = UserTest::create(); $transect->exportArea = [100, 100, 200, 200]; @@ -57,48 +55,19 @@ public function testGenerateReportRestrict() ]), ]; - $inside = [ - AnnotationLabelTest::create(['annotation_id' => $annotations[0]->id]), - AnnotationLabelTest::create(['annotation_id' => $annotations[1]->id]), - AnnotationLabelTest::create(['annotation_id' => $annotations[4]->id]), - ]; + $inside = [$annotations[0]->id, $annotations[1]->id, $annotations[4]->id]; + $outside = [$annotations[2]->id, $annotations[3]->id, $annotations[5]->id]; - $outside = [ - AnnotationLabelTest::create(['annotation_id' => $annotations[2]->id]), - AnnotationLabelTest::create(['annotation_id' => $annotations[3]->id]), - AnnotationLabelTest::create(['annotation_id' => $annotations[5]->id]), - ]; + $ids = with(new Report($transect, ['restricted' => true]))->getSkipIds(); + $ids = array_map('intval', $ids); - $mock = Mockery::mock(); - $mock->path = 'abc'; - $mock->shouldReceive('put') - ->once() - ->with([$transect->name]); + sort($outside); + sort($ids); - foreach ($inside as $a) { - $mock->shouldReceive('put') - ->once() - ->with([$a->label->name, $a->label->color, 1]); - } + $this->assertEquals($outside, $ids); - foreach ($outside as $a) { - $mock->shouldReceive('put') - ->never() - ->with([$a->label->name, $a->label->color, 1]); + foreach ($inside as $id) { + $this->assertNotContains($id, $ids); } - - $mock->shouldReceive('close')->once(); - - App::singleton(CsvFile::class, function () use ($mock) { - return $mock; - }); - - $mock = Mockery::mock(); - $mock->code = 0; - App::singleton(Exec::class, function () use ($mock) { - return $mock; - }); - - with(new BasicReport($project, ['restricted' => true]))->generateReport(); } } diff --git a/tests/Support/Reports/Transects/ExportModuleSupportReportsTransectsReportTest.php b/tests/Support/Reports/Transects/ExportModuleSupportReportsTransectsReportTest.php new file mode 100644 index 000000000..aef7d912d --- /dev/null +++ b/tests/Support/Reports/Transects/ExportModuleSupportReportsTransectsReportTest.php @@ -0,0 +1,30 @@ +assertContains($transect->name, $report->getSubject()); + } + + public function testExpandLabelNameOwnTree() + { + $project = ProjectTest::create(); + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + $project->labelTrees()->attach($root->tree); + $transect = TransectTest::create(); + $project->addTransectId($transect->id); + + $report = new Report($transect); + + $this->assertEquals("{$root->name} > {$child->name}", $report->expandLabelName($child->id)); + } +} diff --git a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsBasicReportTest.php b/tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsBasicReportTest.php similarity index 84% rename from tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsBasicReportTest.php rename to tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsBasicReportTest.php index f8d1efe7c..e9b713181 100644 --- a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsBasicReportTest.php +++ b/tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsBasicReportTest.php @@ -2,13 +2,13 @@ use Dias\Modules\Export\Support\Exec; use Dias\Modules\Export\Support\CsvFile; -use Dias\Modules\Export\Support\Reports\ImageLabels\BasicReport; +use Dias\Modules\Export\Support\Reports\Transects\ImageLabels\BasicReport; -class ExportModuleSupportReportsImageLabelsBasicReportTest extends TestCase +class ExportModuleSupportReportsTransectsImageLabelsBasicReportTest extends TestCase { public function testProperties() { - $report = new BasicReport(ProjectTest::make()); + $report = new BasicReport(TransectTest::make()); $this->assertEquals('basic image label report', $report->getName()); $this->assertEquals('basic_image_label_report', $report->getFilename()); $this->assertEquals('xlsx', $report->getExtension()); @@ -16,9 +16,7 @@ public function testProperties() public function testGenerateReport() { - $project = ProjectTest::create(); $transect = TransectTest::create(); - $project->transects()->attach($transect); $user = UserTest::create(); $il = ImageLabelTest::create([ @@ -58,6 +56,10 @@ public function testGenerateReport() ->once() ->with([$transect->name]); + $mock->shouldReceive('put') + ->once() + ->with(['image_id', 'image_filename', 'label_names']); + $mock->shouldReceive('put') ->once() ->with([$il->image->id, $il->image->filename, "{$il->label->name}, {$il2->label->name}"]); @@ -79,6 +81,6 @@ public function testGenerateReport() return $mock; }); - with(new BasicReport($project))->generateReport(); + with(new BasicReport($transect))->generateReport(); } } diff --git a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php b/tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsCsvReportTest.php similarity index 87% rename from tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php rename to tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsCsvReportTest.php index 6834a06a3..e02ab271a 100644 --- a/tests/Support/Reports/ImageLabels/ExportModuleSupportReportsImageLabelsCsvReportTest.php +++ b/tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsCsvReportTest.php @@ -2,13 +2,13 @@ use Dias\Modules\Export\Support\Exec; use Dias\Modules\Export\Support\CsvFile; -use Dias\Modules\Export\Support\Reports\ImageLabels\CsvReport; +use Dias\Modules\Export\Support\Reports\Transects\ImageLabels\CsvReport; -class ExportModuleSupportReportsImageLabelsCsvReportTest extends TestCase +class ExportModuleSupportReportsTransectsImageLabelsCsvReportTest extends TestCase { public function testProperties() { - $report = new CsvReport(ProjectTest::make()); + $report = new CsvReport(TransectTest::make()); $this->assertEquals('CSV image label report', $report->getName()); $this->assertEquals('csv_image_label_report', $report->getFilename()); $this->assertEquals('zip', $report->getExtension()); @@ -16,9 +16,7 @@ public function testProperties() public function testGenerateReport() { - $project = ProjectTest::create(); $transect = TransectTest::create(); - $project->transects()->attach($transect); $user = UserTest::create(); $root = LabelTest::create(); @@ -89,6 +87,6 @@ public function testGenerateReport() return $mock; }); - with(new CsvReport($project))->generateReport(); + with(new CsvReport($transect))->generateReport(); } } From 93ad5061be379347a3d474452cb94f7fbc8eef71 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 27 Sep 2016 16:14:11 +0200 Subject: [PATCH 056/407] WIP Implement request transect report view --- gulpfile.js | 40 ++++--- package.json | 6 +- src/ExportServiceProvider.php | 5 +- .../Annotations/BasicReportController.php | 6 +- .../Annotations/CsvReportController.php | 6 +- .../Annotations/ExtendedReportController.php | 6 +- .../Annotations/FullReportController.php | 6 +- .../Views/Transects/ReportsController.php | 27 +++++ .../{ => Views}/TutorialController.php | 2 +- src/Http/routes.php | 12 +- src/public/assets/scripts/annotations.js | 2 +- src/public/assets/scripts/main.js | 1 + src/public/assets/scripts/projects.js | 1 - .../TransectReportRequestController.js | 78 +++++++++++++ .../factories/TransectReport.js} | 33 +++--- src/resources/assets/js/export/main.js.js | 15 +++ .../projects/controllers/ExportController.js | 77 ------------- src/resources/views/transectReports.blade.php | 104 ++++++++++++++++++ .../views/transectsMenubar.blade.php | 3 + ...lersViewsTransectsReportControllerTest.php | 22 ++++ 20 files changed, 324 insertions(+), 128 deletions(-) create mode 100644 src/Http/Controllers/Views/Transects/ReportsController.php rename src/Http/Controllers/{ => Views}/TutorialController.php (89%) create mode 100644 src/public/assets/scripts/main.js delete mode 100644 src/public/assets/scripts/projects.js create mode 100644 src/resources/assets/js/export/controllers/TransectReportRequestController.js rename src/resources/assets/js/{projects/factories/Report.js => export/factories/TransectReport.js} (53%) create mode 100644 src/resources/assets/js/export/main.js.js delete mode 100644 src/resources/assets/js/projects/controllers/ExportController.js create mode 100644 src/resources/views/transectReports.blade.php create mode 100644 src/resources/views/transectsMenubar.blade.php create mode 100644 tests/Http/Controllers/Views/ExportModuleHttpControllersViewsTransectsReportControllerTest.php diff --git a/gulpfile.js b/gulpfile.js index 78d9a3eb0..67abc9ebb 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,20 +1,32 @@ -"use strict"; -process.env.DISABLE_NOTIFIER = true; +"use strict" -var gulp = require('gulp'); -var elixir = require('laravel-elixir'); -var angular = require('laravel-elixir-angular'); -var shell = require('gulp-shell'); +var gulp = require('gulp'); +var h = require('gulp-helpers'); +var publish = h.publish('Dias\\Modules\\Export\\ExportServiceProvider', 'public'); -elixir(function (mix) { - process.chdir('src'); - // mix.sass('main.scss', 'public/assets/styles/main.css'); - mix.angular('resources/assets/js/projects/', 'public/assets/scripts', 'projects.js'); - mix.angular('resources/assets/js/annotations/', 'public/assets/scripts', 'annotations.js'); +h.paths.sass = 'src/resources/assets/sass/'; +h.paths.js = 'src/resources/assets/js/'; +h.paths.public = 'src/public/assets/'; - mix.task('publish', 'public/assets/**/*'); +gulp.task('sass', function () { + // h.sass('main.scss', 'main.css'); }); -gulp.task('publish', function () { - gulp.src('').pipe(shell('php ../../../../artisan vendor:publish --provider="Dias\\Modules\\Export\\ExportServiceProvider" --tag public --force')); +gulp.task('js-main', function (cb) { + h.angular('export/**/*.js', 'main.js', cb); }); + +gulp.task('js-annotations', function (cb) { + h.angular('annotations/**/*.js', 'annotations.js', cb); +}); + +gulp.task('js', ['js-main', 'js-annotations']); + +gulp.task('watch', function () { + gulp.watch(h.paths.sass + '**/*.scss', ['sass']); + gulp.watch(h.paths.js + 'export/**/*.js', ['js-main']); + gulp.watch(h.paths.js + 'annotations/**/*.js', ['js-annotations']); + gulp.watch(h.paths.public + '**/*', publish); +}); + +gulp.task('default', ['sass', 'js'], publish) diff --git a/package.json b/package.json index 63da3c9fa..b81a41588 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,7 @@ "test": "echo \"Error: no test specified\" && exit 1" }, "devDependencies": { - "gulp-cli": "~0.1.5", - "laravel-elixir-angular": "~1.0.1", - "laravel-elixir": "~3.2.8", - "gulp-shell": "~0.3.0" + "gulp": "^3.9.1", + "gulp-helpers": "git+https://github.com/mzur/gulp-helpers.git" } } diff --git a/src/ExportServiceProvider.php b/src/ExportServiceProvider.php index a7305a07c..ecbc5c7a2 100644 --- a/src/ExportServiceProvider.php +++ b/src/ExportServiceProvider.php @@ -2,9 +2,9 @@ namespace Dias\Modules\Export; -use Illuminate\Support\ServiceProvider; -use Illuminate\Routing\Router; use Dias\Services\Modules; +use Illuminate\Routing\Router; +use Illuminate\Support\ServiceProvider; class ExportServiceProvider extends ServiceProvider { @@ -40,6 +40,7 @@ public function boot(Modules $modules,Router $router) $modules->addMixin('export', 'annotationsSettings'); $modules->addMixin('export', 'annotationsScripts'); $modules->addMixin('export', 'manualTutorial'); + $modules->addMixin('export', 'transectsMenubar'); } /** diff --git a/src/Http/Controllers/Api/Transects/Annotations/BasicReportController.php b/src/Http/Controllers/Api/Transects/Annotations/BasicReportController.php index 36be67b69..01285c3c5 100644 --- a/src/Http/Controllers/Api/Transects/Annotations/BasicReportController.php +++ b/src/Http/Controllers/Api/Transects/Annotations/BasicReportController.php @@ -17,7 +17,7 @@ class BasicReportController extends Controller * @api {post} transects/:id/reports/basic Generate a new basic annotation report * @apiGroup Transects * @apiName GenerateBasicTransectReport - * @apiParam (Optional arguments) {Boolean} restrict If `1`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. @@ -31,9 +31,9 @@ public function store(Request $request, Guard $auth, $id) { $transect = Transect::findOrFail($id); $this->authorize('access', $transect); - $this->validate($request, ['restrict' => 'boolean']); + $this->validate($request, ['exportArea' => 'boolean']); $report = new BasicReport($transect, [ - 'restricted' => (bool) $request->input('restrict', false), + 'restricted' => (bool) $request->input('exportArea', false), ]); $this->dispatch(new GenerateReportJob($report, $auth->user())); } diff --git a/src/Http/Controllers/Api/Transects/Annotations/CsvReportController.php b/src/Http/Controllers/Api/Transects/Annotations/CsvReportController.php index 02f1bc145..8a9024e2a 100644 --- a/src/Http/Controllers/Api/Transects/Annotations/CsvReportController.php +++ b/src/Http/Controllers/Api/Transects/Annotations/CsvReportController.php @@ -17,7 +17,7 @@ class CsvReportController extends Controller * @api {post} transects/:id/reports/annotations/full Generate a machine readable report (CSV) * @apiGroup Transects * @apiName GenerateCsvTransectReport - * @apiParam (Optional arguments) {Boolean} restrict If `1`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. @@ -31,9 +31,9 @@ public function store(Request $request, Guard $auth, $id) { $transect = Transect::findOrFail($id); $this->authorize('access', $transect); - $this->validate($request, ['restrict' => 'boolean']); + $this->validate($request, ['exportArea' => 'boolean']); $report = new CsvReport($transect, [ - 'restricted' => (bool) $request->input('restrict', false), + 'restricted' => (bool) $request->input('exportArea', false), ]); $this->dispatch(new GenerateReportJob($report, $auth->user())); } diff --git a/src/Http/Controllers/Api/Transects/Annotations/ExtendedReportController.php b/src/Http/Controllers/Api/Transects/Annotations/ExtendedReportController.php index 10d703340..8996cddea 100644 --- a/src/Http/Controllers/Api/Transects/Annotations/ExtendedReportController.php +++ b/src/Http/Controllers/Api/Transects/Annotations/ExtendedReportController.php @@ -17,7 +17,7 @@ class ExtendedReportController extends Controller * @api {post} transects/:id/reports/extended Generate a new extended report * @apiGroup Transects * @apiName GenerateExtendedTransectReport - * @apiParam (Optional arguments) {Boolean} restrict If `1`, restrict the report to the export area defined for the individual transects. + * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area defined for the individual transects. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. @@ -31,9 +31,9 @@ public function store(Request $request, Guard $auth, $id) { $transect = Transect::findOrFail($id); $this->authorize('access', $transect); - $this->validate($request, ['restrict' => 'boolean']); + $this->validate($request, ['exportArea' => 'boolean']); $report = new ExtendedReport($transect, [ - 'restricted' => (bool) $request->input('restrict', false), + 'restricted' => (bool) $request->input('exportArea', false), ]); $this->dispatch(new GenerateReportJob($report, $auth->user())); } diff --git a/src/Http/Controllers/Api/Transects/Annotations/FullReportController.php b/src/Http/Controllers/Api/Transects/Annotations/FullReportController.php index 7b1e36295..7fcc2af72 100644 --- a/src/Http/Controllers/Api/Transects/Annotations/FullReportController.php +++ b/src/Http/Controllers/Api/Transects/Annotations/FullReportController.php @@ -17,7 +17,7 @@ class FullReportController extends Controller * @api {post} transects/:id/reports/full Generate a new full report * @apiGroup Transects * @apiName GenerateFullTransectReport - * @apiParam (Optional arguments) {Boolean} restrict If `1`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. @@ -31,9 +31,9 @@ public function store(Request $request, Guard $auth, $id) { $transect = Transect::findOrFail($id); $this->authorize('access', $transect); - $this->validate($request, ['restrict' => 'boolean']); + $this->validate($request, ['exportArea' => 'boolean']); $report = new FullReport($transect, [ - 'restricted' => (bool) $request->input('restrict', false), + 'restricted' => (bool) $request->input('exportArea', false), ]); $this->dispatch(new GenerateReportJob($report, $auth->user())); } diff --git a/src/Http/Controllers/Views/Transects/ReportsController.php b/src/Http/Controllers/Views/Transects/ReportsController.php new file mode 100644 index 000000000..5dff0af4e --- /dev/null +++ b/src/Http/Controllers/Views/Transects/ReportsController.php @@ -0,0 +1,27 @@ +authorize('access', $transect); + + return view('export::transectReports', [ + 'projects' => $transect->projects, + 'transect' => $transect, + 'annotationSessions' => $transect->annotationSessions, + ]); + } +} diff --git a/src/Http/Controllers/TutorialController.php b/src/Http/Controllers/Views/TutorialController.php similarity index 89% rename from src/Http/Controllers/TutorialController.php rename to src/Http/Controllers/Views/TutorialController.php index c00e8351a..6b70d0387 100644 --- a/src/Http/Controllers/TutorialController.php +++ b/src/Http/Controllers/Views/TutorialController.php @@ -1,6 +1,6 @@ group([ + 'namespace' => 'Views', + 'middleware' => 'auth', +], function ($router) { + $router->get('transects/{id}/reports', [ + 'uses' => 'Transects\ReportsController@show', + 'as' => 'transect-reports', + ]); +}); + // this route should be public (is protected by random uids) $router->get('api/v1/reports/{uid}/{filename}', [ 'as' => 'download_report', @@ -59,5 +69,5 @@ $router->get('manual/tutorials/export/{name}', [ 'as' => 'manual-tutorials-export', - 'uses' => 'TutorialController@show', + 'uses' => 'Views\TutorialController@show', ]); diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index 71fd4740f..a9348805f 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1 @@ -angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e["delete"]=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]),angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature})["catch"](function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n["delete"]({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]); \ No newline at end of file +angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature}).catch(function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n.delete({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]),angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e.delete=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]); \ No newline at end of file diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js new file mode 100644 index 000000000..05c25efa7 --- /dev/null +++ b/src/public/assets/scripts/main.js @@ -0,0 +1 @@ +angular.module("dias.export",["dias.api","dias.ui"]),angular.module("dias.export").config(["$compileProvider",function(t){"use strict";t.debugInfoEnabled(!1)}]),angular.module("dias.export").controller("TransectReportRequestController",["$scope","TransectReport","msg","TRANSECT_ID",function(t,a,e,n){"use strict";var r={annotations:["basic","extended","full","csv"],"image-labels":["basic","csv"]},o={annotations:["exportArea","separateLabelTrees","annotationSession"],"image-labels":["annotationSession"]};t.form={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1,annotationSession:null}},t.availableVariants=r[t.form.type],t.selectType=function(a){t.form.type=a},t.wantsType=function(a){return t.form.type===a},t.wantsCombination=function(a,e){return t.wantsType(a)&&t.form.variant===e},t.submit=function(){for(var e={},r=o[t.form.type],s=r.length-1;s>=0;s--)e[r[s]]=t.form.options[r[s]];a.requestGenericReport({transect_id:n,type:t.form.type,variant:t.form.variant},e)},t.$watch("form.type",function(a){t.availableVariants=r[a],t.form.variant=t.availableVariants[0]})}]),angular.module("dias.export").factory("TransectReport",["$resource","URL",function(t,a){"use strict";return t(a+"/api/v1/transects/:transect_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]); \ No newline at end of file diff --git a/src/public/assets/scripts/projects.js b/src/public/assets/scripts/projects.js deleted file mode 100644 index b67721485..000000000 --- a/src/public/assets/scripts/projects.js +++ /dev/null @@ -1 +0,0 @@ -angular.module("dias.projects").controller("ExportController",["$scope","Report","msg","PROJECT",function(e,t,a,n){"use strict";var i=!1,r=["basic annotation","extended annotation","full annotation","annotation CSV","basic image label","image label CSV"],o=[t.getBasic,t.getExtended,t.getFull,t.getCsv,t.getImageLabel,t.getImageLabelCsv],s=[0,1,2,3],c=function(){i=!0},d=function(e){i=!1,a.responseError(e)};e.selected={index:0,option:"0",restrict:!1},e.canBeRestricted=function(){return s.indexOf(e.selected.index)!==-1},e.requestReport=function(){if(void 0!==e.selected.index){var t={};e.canBeRestricted()&&(t.restrict=e.selected.restrict?"1":"0"),o[e.selected.index]({project_id:n.id},t,c,d)}},e.isRequested=function(){return i},e.getSelectedName=function(){return r[e.selected.index]},e.$watch("selected.option",function(t){e.selected.index=parseInt(t)})}]),angular.module("dias.projects").factory("Report",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/projects/:project_id/reports/:type/:variant",{},{getBasic:{method:"POST",params:{type:"annotations",variant:"basic"}},getExtended:{method:"POST",params:{type:"annotations",variant:"extended"}},getFull:{method:"POST",params:{type:"annotations",variant:"full"}},getCsv:{method:"POST",params:{type:"annotations",variant:"csv"}},getImageLabel:{method:"POST",params:{type:"image-labels",variant:"basic"}},getImageLabelCsv:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]); \ No newline at end of file diff --git a/src/resources/assets/js/export/controllers/TransectReportRequestController.js b/src/resources/assets/js/export/controllers/TransectReportRequestController.js new file mode 100644 index 000000000..19744b6e1 --- /dev/null +++ b/src/resources/assets/js/export/controllers/TransectReportRequestController.js @@ -0,0 +1,78 @@ +/** + * @namespace dias.export + * @ngdoc controller + * @name TransectReportRequestController + * @memberOf dias.export + * @description Controller for requesting a new transect report + */ +angular.module('dias.export').controller('TransectReportRequestController', function ($scope, TransectReport, msg, TRANSECT_ID) { + "use strict"; + + var variants = { + 'annotations': [ + 'basic', + 'extended', + 'full', + 'csv' + ], + 'image-labels': [ + 'basic', + 'csv' + ] + }; + + var allowedOptions = { + 'annotations': [ + 'exportArea', + 'separateLabelTrees', + 'annotationSession' + ], + 'image-labels': [ + 'annotationSession' + ] + }; + + $scope.form = { + type: 'annotations', + variant: 'basic', + options: { + exportArea: false, + separateLabelTrees: false, + annotationSession: null + } + }; + + $scope.availableVariants = variants[$scope.form.type]; + + $scope.selectType = function (type) { + $scope.form.type = type; + }; + + $scope.wantsType = function (type) { + return $scope.form.type === type; + }; + + $scope.wantsCombination = function (type, variant) { + return $scope.wantsType(type) && $scope.form.variant === variant; + }; + + $scope.submit = function () { + var options = {}; + var allowed = allowedOptions[$scope.form.type]; + for (var i = allowed.length - 1; i >= 0; i--) { + options[allowed[i]] = $scope.form.options[allowed[i]]; + } + + TransectReport.requestGenericReport({ + transect_id: TRANSECT_ID, + type: $scope.form.type, + variant: $scope.form.variant, + }, options); + }; + + $scope.$watch('form.type', function (type) { + $scope.availableVariants = variants[type]; + $scope.form.variant = $scope.availableVariants[0]; + }); + } +); diff --git a/src/resources/assets/js/projects/factories/Report.js b/src/resources/assets/js/export/factories/TransectReport.js similarity index 53% rename from src/resources/assets/js/projects/factories/Report.js rename to src/resources/assets/js/export/factories/TransectReport.js index bbb5e7bee..d8232ed9d 100644 --- a/src/resources/assets/js/projects/factories/Report.js +++ b/src/resources/assets/js/export/factories/TransectReport.js @@ -1,49 +1,52 @@ /** * @ngdoc factory - * @name Report - * @memberOf dias.projects - * @description Provides the resource for requesting project reports + * @name TransectReport + * @memberOf dias.export + * @description Provides the resource for requesting transect reports * @requires $resource * @returns {Object} A new [ngResource](https://docs.angularjs.org/api/ngResource/service/$resource) object * @example // request a basic report with restricted annotation area -Report.getBasic({project_id: 1}, {restrict: 1}); +TransectReport.requestBasicAnnotationReport({transect_id: 1}, {restrict: 1}); // request a extended report without restricted annotation area -Report.getExtended({project_id: 1}, {restrict: 0}); +TransectReport.requestExtendedAnnotationReport({transect_id: 1}, {restrict: 0}); // request a full report without restricted annotation area -Report.getFull({project_id: 1}, {}); +TransectReport.requestFullAnnotationReport({transect_id: 1}, {}); // request an image label report -Report.getImageLabel({project_id: 1}, {}); +TransectReport.requestBasicImageLabelReport({transect_id: 1}, {}); */ -angular.module('dias.projects').factory('Report', function ($resource, URL) { +angular.module('dias.export').factory('TransectReport', function ($resource, URL) { "use strict"; - return $resource(URL + '/api/v1/projects/:project_id/reports/:type/:variant', {}, { - getBasic: { + return $resource(URL + '/api/v1/transects/:transect_id/reports/:type/:variant', {}, { + requestGenericReport: { + method: 'POST' + }, + requestBasicAnnotationReport: { method: 'POST', params: {type: 'annotations', variant: 'basic'} }, - getExtended: { + requestExtendedAnnotationReport: { method: 'POST', params: {type: 'annotations', variant: 'extended'} }, - getFull: { + requestFullAnnotationReport: { method: 'POST', params: {type: 'annotations', variant: 'full'} }, - getCsv: { + requestCsvAnnotationReport: { method: 'POST', params: {type: 'annotations', variant: 'csv'} }, - getImageLabel: { + requestBasicImageLabelReport: { method: 'POST', params: {type: 'image-labels', variant: 'basic'} }, - getImageLabelCsv: { + requestCsvImageLabelReport: { method: 'POST', params: {type: 'image-labels', variant: 'csv' }} diff --git a/src/resources/assets/js/export/main.js.js b/src/resources/assets/js/export/main.js.js new file mode 100644 index 000000000..7773d15c0 --- /dev/null +++ b/src/resources/assets/js/export/main.js.js @@ -0,0 +1,15 @@ +/** + * @namespace dias.export + * @description The DIAS export module + */ +angular.module('dias.export', ['dias.api', 'dias.ui']); + +/* + * Disable debug info in production for better performance. + * see: https://code.angularjs.org/1.4.7/docs/guide/production + */ +angular.module('dias.export').config(function ($compileProvider) { + "use strict"; + + $compileProvider.debugInfoEnabled(false); +}); diff --git a/src/resources/assets/js/projects/controllers/ExportController.js b/src/resources/assets/js/projects/controllers/ExportController.js deleted file mode 100644 index 0920a4ba3..000000000 --- a/src/resources/assets/js/projects/controllers/ExportController.js +++ /dev/null @@ -1,77 +0,0 @@ -/** - * @namespace dias.projects - * @ngdoc controller - * @name ExportController - * @memberOf dias.projects - * @description Controller for the export feature of the projects page - */ -angular.module('dias.projects').controller('ExportController', function ($scope, Report, msg, PROJECT) { - "use strict"; - - var requested = false; - - var names = [ - 'basic annotation', - 'extended annotation', - 'full annotation', - 'annotation CSV', - 'basic image label', - 'image label CSV' - ]; - - var resources = [ - Report.getBasic, - Report.getExtended, - Report.getFull, - Report.getCsv, - Report.getImageLabel, - Report.getImageLabelCsv - ]; - - // all reports that can have the "restrict to export area" option - var restrictable = [0, 1, 2, 3]; - - var handleSuccess = function () { - requested = true; - }; - - var handleError = function (response) { - requested = false; - msg.responseError(response); - }; - - $scope.selected = { - index: 0, - option: '0', - restrict: false - }; - - $scope.canBeRestricted = function () { - return restrictable.indexOf($scope.selected.index) !== -1; - }; - - $scope.requestReport = function () { - if ($scope.selected.index === undefined) return; - - var data = {}; - - if ($scope.canBeRestricted()) { - data.restrict = $scope.selected.restrict ? '1' : '0'; - } - - resources[$scope.selected.index]({project_id: PROJECT.id}, data, handleSuccess, handleError); - }; - - $scope.isRequested = function () { - return requested; - }; - - $scope.getSelectedName = function () { - return names[$scope.selected.index]; - }; - - $scope.$watch('selected.option', function (option) { - $scope.selected.index = parseInt(option); - }); - } -); diff --git a/src/resources/views/transectReports.blade.php b/src/resources/views/transectReports.blade.php new file mode 100644 index 000000000..c188abe0c --- /dev/null +++ b/src/resources/views/transectReports.blade.php @@ -0,0 +1,104 @@ +@extends('app') + +@section('title')Reports for {{ $transect->name }}@stop + +@push('scripts') + + +@endpush + +@push('styles') + +@endpush + +@section('navbar') + +@endsection + +@section('content') +
    +
    +
    +

    Request report for {{$transect->name}}

    +

    + Request a transect report to consolidate data of the transect into downloadable files. +

    + +
    +
    + +
    + + +
    +
    +
    + + +
    +
    +
    + The basic annotation report contains graphical plots of abundances of the different annotation labels (as PDF). See the manual for the report schema. +
    +
    + The extended annotation report lists the abundances of annotation labels for each image of this transect (as XLSX). See the manual for the report schema. +
    +
    + The full annotation report lists the labels, shape and coordinates of all annotations of this transect (as XLSX). See the manual for the report schema. +
    +
    + The CSV annotation report is intended for subsequent processing and lists the annotation labels of this transect at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. +
    +
    + The basic image label report lists the image labels of all images of this transect (as XLSX). See the manual for the report schema. +
    +
    + The CSV image label report is intended for subsequent processing and lists the image labels of this transect at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. +
    +
    +
    +
    + +
    +
    + +
    +
    +
    + + +
    +
    +
    + Annotations belonging to different label trees will be separated to different files/sheets. +
    +
    +
    + Annotations that are outside of the export area will be discarded for this report. +
    +
    + Only annotations that were created during the selected annotation session will be included in the report. +
    +
    + back + + +
    +
    +
    +@endsection diff --git a/src/resources/views/transectsMenubar.blade.php b/src/resources/views/transectsMenubar.blade.php new file mode 100644 index 000000000..9f0965c7f --- /dev/null +++ b/src/resources/views/transectsMenubar.blade.php @@ -0,0 +1,3 @@ + + + diff --git a/tests/Http/Controllers/Views/ExportModuleHttpControllersViewsTransectsReportControllerTest.php b/tests/Http/Controllers/Views/ExportModuleHttpControllersViewsTransectsReportControllerTest.php new file mode 100644 index 000000000..dfcd13de0 --- /dev/null +++ b/tests/Http/Controllers/Views/ExportModuleHttpControllersViewsTransectsReportControllerTest.php @@ -0,0 +1,22 @@ +transect()->id; + + $this->get("transects/{$id}/reports") + ->assertResponseStatus(302); + + $this->beUser(); + $this->get("transects/{$id}/reports") + ->assertResponseStatus(403); + + $this->beGuest(); + $this->get("transects/{$id}/reports") + ->assertResponseOk(); + } +} From e7b7c9103a634263c1c58adeeb2b977b24e86881 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 28 Sep 2016 09:52:55 +0200 Subject: [PATCH 057/407] Finish transect report view --- src/public/assets/scripts/annotations.js | 2 +- src/public/assets/scripts/main.js | 2 +- .../TransectReportRequestController.js | 31 ++++- src/resources/views/transectReports.blade.php | 116 ++++++++++-------- 4 files changed, 99 insertions(+), 52 deletions(-) diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index a9348805f..ad73688d4 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1 @@ -angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature}).catch(function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n.delete({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]),angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e.delete=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]); \ No newline at end of file +angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e.delete=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]),angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature}).catch(function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n.delete({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]); \ No newline at end of file diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index 05c25efa7..81c45bbe2 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -angular.module("dias.export",["dias.api","dias.ui"]),angular.module("dias.export").config(["$compileProvider",function(t){"use strict";t.debugInfoEnabled(!1)}]),angular.module("dias.export").controller("TransectReportRequestController",["$scope","TransectReport","msg","TRANSECT_ID",function(t,a,e,n){"use strict";var r={annotations:["basic","extended","full","csv"],"image-labels":["basic","csv"]},o={annotations:["exportArea","separateLabelTrees","annotationSession"],"image-labels":["annotationSession"]};t.form={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1,annotationSession:null}},t.availableVariants=r[t.form.type],t.selectType=function(a){t.form.type=a},t.wantsType=function(a){return t.form.type===a},t.wantsCombination=function(a,e){return t.wantsType(a)&&t.form.variant===e},t.submit=function(){for(var e={},r=o[t.form.type],s=r.length-1;s>=0;s--)e[r[s]]=t.form.options[r[s]];a.requestGenericReport({transect_id:n,type:t.form.type,variant:t.form.variant},e)},t.$watch("form.type",function(a){t.availableVariants=r[a],t.form.variant=t.availableVariants[0]})}]),angular.module("dias.export").factory("TransectReport",["$resource","URL",function(t,a){"use strict";return t(a+"/api/v1/transects/:transect_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]); \ No newline at end of file +angular.module("dias.export",["dias.api","dias.ui"]),angular.module("dias.export").config(["$compileProvider",function(t){"use strict";t.debugInfoEnabled(!1)}]),angular.module("dias.export").controller("TransectReportRequestController",["$scope","TransectReport","msg","TRANSECT_ID",function(t,a,e,n){"use strict";var r={annotations:["basic","extended","full","csv"],"image-labels":["basic","csv"]},o={annotations:["exportArea","separateLabelTrees","annotationSession"],"image-labels":["annotationSession"]},s={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1,annotationSession:null}};t.form=angular.copy(s),t.state={success:!1,loading:!1},t.error={},t.availableVariants=r[t.form.type];var i=function(){t.state.success=!0,t.state.loading=!1,t.form=angular.copy(s),t.error={}},p=function(a){t.state.loading=!1,t.success=!1,422===a.status?t.error=a.data:e.responseError(a)};t.selectType=function(a){t.form.type=a},t.wantsType=function(a){return t.form.type===a},t.wantsCombination=function(a,e){return t.wantsType(a)&&t.form.variant===e},t.submit=function(){for(var e={},r=o[t.form.type],s=r.length-1;s>=0;s--)e[r[s]]=t.form.options[r[s]];t.state.loading=!0,a.requestGenericReport({transect_id:n,type:t.form.type,variant:t.form.variant},e,i,p)},t.$watch("form.type",function(a){t.availableVariants=r[a],t.form.variant=t.availableVariants[0]})}]),angular.module("dias.export").factory("TransectReport",["$resource","URL",function(t,a){"use strict";return t(a+"/api/v1/transects/:transect_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]); \ No newline at end of file diff --git a/src/resources/assets/js/export/controllers/TransectReportRequestController.js b/src/resources/assets/js/export/controllers/TransectReportRequestController.js index 19744b6e1..4540880a9 100644 --- a/src/resources/assets/js/export/controllers/TransectReportRequestController.js +++ b/src/resources/assets/js/export/controllers/TransectReportRequestController.js @@ -32,7 +32,7 @@ angular.module('dias.export').controller('TransectReportRequestController', func ] }; - $scope.form = { + var defaultForm = { type: 'annotations', variant: 'basic', options: { @@ -42,8 +42,34 @@ angular.module('dias.export').controller('TransectReportRequestController', func } }; + $scope.form = angular.copy(defaultForm); + + $scope.state = { + success: false, + loading: false + }; + + $scope.error = {}; + $scope.availableVariants = variants[$scope.form.type]; + var handleRequestSuccess = function () { + $scope.state.success = true; + $scope.state.loading = false; + $scope.form = angular.copy(defaultForm); + $scope.error = {}; + }; + + var handleRequestError = function (response) { + $scope.state.loading = false; + $scope.success = false; + if (response.status === 422) { + $scope.error = response.data; + } else { + msg.responseError(response); + } + }; + $scope.selectType = function (type) { $scope.form.type = type; }; @@ -63,11 +89,12 @@ angular.module('dias.export').controller('TransectReportRequestController', func options[allowed[i]] = $scope.form.options[allowed[i]]; } + $scope.state.loading = true; TransectReport.requestGenericReport({ transect_id: TRANSECT_ID, type: $scope.form.type, variant: $scope.form.variant, - }, options); + }, options, handleRequestSuccess, handleRequestError); }; $scope.$watch('form.type', function (type) { diff --git a/src/resources/views/transectReports.blade.php b/src/resources/views/transectReports.blade.php index c188abe0c..8ff9fcdfc 100644 --- a/src/resources/views/transectReports.blade.php +++ b/src/resources/views/transectReports.blade.php @@ -29,74 +29,94 @@

    -
    - -
    - - +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    -
    - - +
    +
    + The basic annotation report contains graphical plots of abundances of the different annotation labels (as PDF). See the manual for the report schema. +
    +
    + The extended annotation report lists the abundances of annotation labels for each image of this transect (as XLSX). See the manual for the report schema. +
    +
    + The full annotation report lists the labels, shape and coordinates of all annotations of this transect (as XLSX). See the manual for the report schema. +
    +
    + The CSV annotation report is intended for subsequent processing and lists the annotation labels of this transect at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. +
    +
    + The basic image label report lists the image labels of all images of this transect (as XLSX). See the manual for the report schema. +
    +
    + The CSV image label report is intended for subsequent processing and lists the image labels of this transect at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. +
    -
    - The basic annotation report contains graphical plots of abundances of the different annotation labels (as PDF). See the manual for the report schema. -
    -
    - The extended annotation report lists the abundances of annotation labels for each image of this transect (as XLSX). See the manual for the report schema. -
    -
    - The full annotation report lists the labels, shape and coordinates of all annotations of this transect (as XLSX). See the manual for the report schema. -
    -
    - The CSV annotation report is intended for subsequent processing and lists the annotation labels of this transect at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. -
    -
    - The basic image label report lists the image labels of all images of this transect (as XLSX). See the manual for the report schema. -
    -
    - The CSV image label report is intended for subsequent processing and lists the image labels of this transect at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. +
    +
    +
    + + +
    +
    +
    +
    + Only annotations that were created during the selected annotation session will be included in the report. +
    -
    +
    -
    +
    +
    +
    + Annotations belonging to different label trees will be separated to different files/sheets. +
    +
    +
    +
    +
    +
    -
    - - -
    -
    -
    - Annotations belonging to different label trees will be separated to different files/sheets. -
    -
    -
    +
    Annotations that are outside of the export area will be discarded for this report.
    -
    - Only annotations that were created during the selected annotation session will be included in the report. -
    +
    +
    + The requested report will be prepared. You will get notified by email when it is ready. Now you can request a new report or go back to the transect.
    back - +
    From 170cf9d609028a2460ebedca43b5560e84829640 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 28 Sep 2016 14:46:26 +0200 Subject: [PATCH 058/407] Implement project reports as wrapper of transect reports --- src/AvailableReport.php | 3 +- src/Contracts/DeletableContract.php | 11 ++ .../Annotations/BasicReportController.php | 26 ++++ .../Annotations/CsvReportController.php | 26 ++++ .../Annotations/ExtendedReportController.php | 26 ++++ .../Annotations/FullReportController.php | 26 ++++ .../ImageLabels/BasicReportController.php | 26 ++++ .../ImageLabels/CsvReportController.php | 26 ++++ .../Api/Projects/ProjectReportController.php | 20 +++ src/Http/Controllers/Api/ReportController.php | 68 ++++++++++ .../Annotations/BasicReportController.php | 34 ++--- .../Annotations/CsvReportController.php | 34 ++--- .../Annotations/ExtendedReportController.php | 36 ++--- .../Annotations/FullReportController.php | 34 ++--- .../ImageLabels/BasicReportController.php | 29 ++-- .../ImageLabels/CsvReportController.php | 29 ++-- .../Transects/TransectReportController.php | 40 ++++++ src/Http/routes.php | 31 +++++ src/Support/CsvFile.php | 3 +- src/Support/Reports/ExecutesPythonScript.php | 35 ----- .../Projects/Annotations/BasicReport.php | 30 +++++ .../Projects/Annotations/CsvReport.php | 30 +++++ .../Projects/Annotations/ExtendedReport.php | 30 +++++ .../Projects/Annotations/FullReport.php | 30 +++++ .../Reports/Projects/Annotations/Report.php | 48 +++++++ .../Projects/ImageLabels/BasicReport.php | 31 +++++ .../Projects/ImageLabels/CsvReport.php | 31 +++++ src/Support/Reports/Projects/Report.php | 126 ++++++++++++++++++ .../Transects/Annotations/BasicReport.php | 5 +- .../Transects/Annotations/ExtendedReport.php | 5 +- .../Transects/Annotations/FullReport.php | 5 +- .../Reports/Transects/Annotations/Report.php | 2 +- .../Transects/ImageLabels/BasicReport.php | 5 +- src/Support/Reports/Transects/Report.php | 29 +++- ...tsAnnotationsBasicReportControllerTest.php | 38 ++++++ ...ectsAnnotationsCsvReportControllerTest.php | 38 ++++++ ...nnotationsExtendedReportControllerTest.php | 38 ++++++ ...ctsAnnotationsFullReportControllerTest.php | 38 ++++++ ...tsImageLabelsBasicReportControllerTest.php | 38 ++++++ ...ectsImageLabelsCsvReportControllerTest.php | 38 ++++++ ...tsAnnotationsBasicReportControllerTest.php | 15 ++- ...ectsAnnotationsCsvReportControllerTest.php | 13 +- ...nnotationsExtendedReportControllerTest.php | 13 +- ...ctsAnnotationsFullReportControllerTest.php | 15 ++- ...ortsProjectsAnnotationsBasicReportTest.php | 14 ++ ...eportsProjectsAnnotationsCsvReportTest.php | 14 ++ ...sProjectsAnnotationsExtendedReportTest.php | 14 ++ ...portsProjectsAnnotationsFullReportTest.php | 14 ++ ...ModuleSupportReportsProjectsReportTest.php | 74 ++++++++++ ...ortsProjectsImageLabelsBasicReportTest.php | 14 ++ ...eportsProjectsImageLabelsCsvReportTest.php | 14 ++ ...rtsTransectsAnnotationsBasicReportTest.php | 2 +- 52 files changed, 1219 insertions(+), 195 deletions(-) create mode 100644 src/Contracts/DeletableContract.php create mode 100644 src/Http/Controllers/Api/Projects/Annotations/BasicReportController.php create mode 100644 src/Http/Controllers/Api/Projects/Annotations/CsvReportController.php create mode 100644 src/Http/Controllers/Api/Projects/Annotations/ExtendedReportController.php create mode 100644 src/Http/Controllers/Api/Projects/Annotations/FullReportController.php create mode 100644 src/Http/Controllers/Api/Projects/ImageLabels/BasicReportController.php create mode 100644 src/Http/Controllers/Api/Projects/ImageLabels/CsvReportController.php create mode 100644 src/Http/Controllers/Api/Projects/ProjectReportController.php create mode 100644 src/Http/Controllers/Api/ReportController.php create mode 100644 src/Http/Controllers/Api/Transects/TransectReportController.php delete mode 100644 src/Support/Reports/ExecutesPythonScript.php create mode 100644 src/Support/Reports/Projects/Annotations/BasicReport.php create mode 100644 src/Support/Reports/Projects/Annotations/CsvReport.php create mode 100644 src/Support/Reports/Projects/Annotations/ExtendedReport.php create mode 100644 src/Support/Reports/Projects/Annotations/FullReport.php create mode 100644 src/Support/Reports/Projects/Annotations/Report.php create mode 100644 src/Support/Reports/Projects/ImageLabels/BasicReport.php create mode 100644 src/Support/Reports/Projects/ImageLabels/CsvReport.php create mode 100644 src/Support/Reports/Projects/Report.php create mode 100644 tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsBasicReportControllerTest.php create mode 100644 tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsCsvReportControllerTest.php create mode 100644 tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsExtendedReportControllerTest.php create mode 100644 tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsFullReportControllerTest.php create mode 100644 tests/Http/Controllers/Api/Projects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsBasicReportControllerTest.php create mode 100644 tests/Http/Controllers/Api/Projects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsCsvReportControllerTest.php create mode 100644 tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsBasicReportTest.php create mode 100644 tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsCsvReportTest.php create mode 100644 tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsExtendedReportTest.php create mode 100644 tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsFullReportTest.php create mode 100644 tests/Support/Reports/Projects/ExportModuleSupportReportsProjectsReportTest.php create mode 100644 tests/Support/Reports/Projects/ImageLabels/ExportModuleSupportReportsProjectsImageLabelsBasicReportTest.php create mode 100644 tests/Support/Reports/Projects/ImageLabels/ExportModuleSupportReportsProjectsImageLabelsCsvReportTest.php diff --git a/src/AvailableReport.php b/src/AvailableReport.php index e518a8e51..386f3d668 100644 --- a/src/AvailableReport.php +++ b/src/AvailableReport.php @@ -3,12 +3,13 @@ namespace Dias\Modules\Export; use File; +use Dias\Modules\Export\Contracts\DeletableContract; use Illuminate\Database\Eloquent\ModelNotFoundException; /** * Represents the file of a generated report */ -class AvailableReport +class AvailableReport implements DeletableContract { /** * The file path of this report diff --git a/src/Contracts/DeletableContract.php b/src/Contracts/DeletableContract.php new file mode 100644 index 000000000..9855b15f6 --- /dev/null +++ b/src/Contracts/DeletableContract.php @@ -0,0 +1,11 @@ +model = $this->getModel($id); + $this->authorize('access', $this->model); + $report = new $this->report($this->model, $this->getOptions($request)); + $this->dispatch(new GenerateReportJob($report, $auth->user())); + } + + /** + * Get the options of the requested report + * + * @param Request $request + * @return array + */ + protected function getOptions(Request $request) + { + $this->validate($request, [ + 'separateLabelTrees' => 'boolean', + 'exportArea' => 'boolean', + ]); + + return [ + 'separateLabelTrees' => (bool) $request->input('separateLabelTrees', false), + 'exportArea' => (bool) $request->input('exportArea', false), + ]; + } + + /** + * Get the model to generate the report for + * + * @param int $id + * @return mixed + */ + abstract protected function getModel($id); +} diff --git a/src/Http/Controllers/Api/Transects/Annotations/BasicReportController.php b/src/Http/Controllers/Api/Transects/Annotations/BasicReportController.php index 01285c3c5..17caf10ac 100644 --- a/src/Http/Controllers/Api/Transects/Annotations/BasicReportController.php +++ b/src/Http/Controllers/Api/Transects/Annotations/BasicReportController.php @@ -2,39 +2,25 @@ namespace Dias\Modules\Export\Http\Controllers\Api\Transects\Annotations; -use Dias\Transect; -use Illuminate\Http\Request; -use Illuminate\Contracts\Auth\Guard; -use Dias\Http\Controllers\Api\Controller; -use Dias\Modules\Export\Jobs\GenerateReportJob; use Dias\Modules\Export\Support\Reports\Transects\Annotations\BasicReport; +use Dias\Modules\Export\Http\Controllers\Api\Transects\TransectReportController; -class BasicReportController extends Controller +class BasicReportController extends TransectReportController { /** - * Generate a basic report + * The report classname * - * @api {post} transects/:id/reports/basic Generate a new basic annotation report + * @var string + */ + protected $report = BasicReport::class; + + /** + * @api {post} transects/:id/reports/annotations/basic Generate a new basic annotation report * @apiGroup Transects - * @apiName GenerateBasicTransectReport + * @apiName GenerateBasicTransectAnnotationReport * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. - * - * @param Request $request - * @param Guard $auth - * @param int $id transect id - * @return \Illuminate\Http\Response */ - public function store(Request $request, Guard $auth, $id) - { - $transect = Transect::findOrFail($id); - $this->authorize('access', $transect); - $this->validate($request, ['exportArea' => 'boolean']); - $report = new BasicReport($transect, [ - 'restricted' => (bool) $request->input('exportArea', false), - ]); - $this->dispatch(new GenerateReportJob($report, $auth->user())); - } } diff --git a/src/Http/Controllers/Api/Transects/Annotations/CsvReportController.php b/src/Http/Controllers/Api/Transects/Annotations/CsvReportController.php index 8a9024e2a..2c1e66a39 100644 --- a/src/Http/Controllers/Api/Transects/Annotations/CsvReportController.php +++ b/src/Http/Controllers/Api/Transects/Annotations/CsvReportController.php @@ -2,39 +2,25 @@ namespace Dias\Modules\Export\Http\Controllers\Api\Transects\Annotations; -use Dias\Transect; -use Illuminate\Http\Request; -use Illuminate\Contracts\Auth\Guard; -use Dias\Http\Controllers\Api\Controller; -use Dias\Modules\Export\Jobs\GenerateReportJob; use Dias\Modules\Export\Support\Reports\Transects\Annotations\CsvReport; +use Dias\Modules\Export\Http\Controllers\Api\Transects\TransectReportController; -class CsvReportController extends Controller +class CsvReportController extends TransectReportController { /** - * Generate a machine readable report in CSV format + * The report classname * - * @api {post} transects/:id/reports/annotations/full Generate a machine readable report (CSV) + * @var string + */ + protected $report = CsvReport::class; + + /** + * @api {post} transects/:id/reports/annotations/csv Generate a new csv annotation report * @apiGroup Transects - * @apiName GenerateCsvTransectReport + * @apiName GenerateCsvTransectAnnotationReport * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. - * - * @param Request $request - * @param Guard $auth - * @param int $id transect id - * @return \Illuminate\Http\Response */ - public function store(Request $request, Guard $auth, $id) - { - $transect = Transect::findOrFail($id); - $this->authorize('access', $transect); - $this->validate($request, ['exportArea' => 'boolean']); - $report = new CsvReport($transect, [ - 'restricted' => (bool) $request->input('exportArea', false), - ]); - $this->dispatch(new GenerateReportJob($report, $auth->user())); - } } diff --git a/src/Http/Controllers/Api/Transects/Annotations/ExtendedReportController.php b/src/Http/Controllers/Api/Transects/Annotations/ExtendedReportController.php index 8996cddea..ff23ae8fa 100644 --- a/src/Http/Controllers/Api/Transects/Annotations/ExtendedReportController.php +++ b/src/Http/Controllers/Api/Transects/Annotations/ExtendedReportController.php @@ -2,39 +2,25 @@ namespace Dias\Modules\Export\Http\Controllers\Api\Transects\Annotations; -use Dias\Transect; -use Illuminate\Http\Request; -use Illuminate\Contracts\Auth\Guard; -use Dias\Http\Controllers\Api\Controller; -use Dias\Modules\Export\Jobs\GenerateReportJob; use Dias\Modules\Export\Support\Reports\Transects\Annotations\ExtendedReport; +use Dias\Modules\Export\Http\Controllers\Api\Transects\TransectReportController; -class ExtendedReportController extends Controller +class ExtendedReportController extends TransectReportController { /** - * Generate an extended report + * The report classname * - * @api {post} transects/:id/reports/extended Generate a new extended report + * @var string + */ + protected $report = ExtendedReport::class; + + /** + * @api {post} transects/:id/reports/annotations/extended Generate a new extended annotation report * @apiGroup Transects - * @apiName GenerateExtendedTransectReport - * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area defined for the individual transects. + * @apiName GenerateExtendedTransectAnnotationReport + * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. - * - * @param Request $request - * @param Guard $auth - * @param int $id transect id - * @return \Illuminate\Http\Response */ - public function store(Request $request, Guard $auth, $id) - { - $transect = Transect::findOrFail($id); - $this->authorize('access', $transect); - $this->validate($request, ['exportArea' => 'boolean']); - $report = new ExtendedReport($transect, [ - 'restricted' => (bool) $request->input('exportArea', false), - ]); - $this->dispatch(new GenerateReportJob($report, $auth->user())); - } } diff --git a/src/Http/Controllers/Api/Transects/Annotations/FullReportController.php b/src/Http/Controllers/Api/Transects/Annotations/FullReportController.php index 7fcc2af72..cf327b804 100644 --- a/src/Http/Controllers/Api/Transects/Annotations/FullReportController.php +++ b/src/Http/Controllers/Api/Transects/Annotations/FullReportController.php @@ -2,39 +2,25 @@ namespace Dias\Modules\Export\Http\Controllers\Api\Transects\Annotations; -use Dias\Transect; -use Illuminate\Http\Request; -use Illuminate\Contracts\Auth\Guard; -use Dias\Http\Controllers\Api\Controller; -use Dias\Modules\Export\Jobs\GenerateReportJob; use Dias\Modules\Export\Support\Reports\Transects\Annotations\FullReport; +use Dias\Modules\Export\Http\Controllers\Api\Transects\TransectReportController; -class FullReportController extends Controller +class FullReportController extends TransectReportController { /** - * Generate a full report + * The report classname * - * @api {post} transects/:id/reports/full Generate a new full report + * @var string + */ + protected $report = FullReport::class; + + /** + * @api {post} transects/:id/reports/annotations/full Generate a new full annotation report * @apiGroup Transects - * @apiName GenerateFullTransectReport + * @apiName GenerateFullTransectAnnotationReport * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. - * - * @param Request $request - * @param Guard $auth - * @param int $id transect id - * @return \Illuminate\Http\Response */ - public function store(Request $request, Guard $auth, $id) - { - $transect = Transect::findOrFail($id); - $this->authorize('access', $transect); - $this->validate($request, ['exportArea' => 'boolean']); - $report = new FullReport($transect, [ - 'restricted' => (bool) $request->input('exportArea', false), - ]); - $this->dispatch(new GenerateReportJob($report, $auth->user())); - } } diff --git a/src/Http/Controllers/Api/Transects/ImageLabels/BasicReportController.php b/src/Http/Controllers/Api/Transects/ImageLabels/BasicReportController.php index 58f129e92..8951d3c17 100644 --- a/src/Http/Controllers/Api/Transects/ImageLabels/BasicReportController.php +++ b/src/Http/Controllers/Api/Transects/ImageLabels/BasicReportController.php @@ -2,32 +2,25 @@ namespace Dias\Modules\Export\Http\Controllers\Api\Transects\ImageLabels; -use Dias\Transect; -use Illuminate\Contracts\Auth\Guard; -use Dias\Http\Controllers\Api\Controller; -use Dias\Modules\Export\Jobs\GenerateReportJob; use Dias\Modules\Export\Support\Reports\Transects\ImageLabels\BasicReport; +use Dias\Modules\Export\Http\Controllers\Api\Transects\TransectReportController; -class BasicReportController extends Controller +class BasicReportController extends TransectReportController { /** - * Generate an image label report + * The report classname * - * @api {post} transects/:id/reports/image-labels Generate a new image label report + * @var string + */ + protected $report = BasicReport::class; + + /** + * @api {post} transects/:id/reports/image-labels/basic Generate a new basic image label report * @apiGroup Transects - * @apiName GenerateImageLabelTransectReport + * @apiName GenerateBasicTransectImageLabelReport + * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. - * - * @param Guard $auth - * @param int $id transect id - * @return \Illuminate\Http\Response */ - public function store(Guard $auth, $id) - { - $transect = Transect::findOrFail($id); - $this->authorize('access', $transect); - $this->dispatch(new GenerateReportJob(new BasicReport($transect), $auth->user())); - } } diff --git a/src/Http/Controllers/Api/Transects/ImageLabels/CsvReportController.php b/src/Http/Controllers/Api/Transects/ImageLabels/CsvReportController.php index 09f7d62ec..330773e1e 100644 --- a/src/Http/Controllers/Api/Transects/ImageLabels/CsvReportController.php +++ b/src/Http/Controllers/Api/Transects/ImageLabels/CsvReportController.php @@ -2,32 +2,25 @@ namespace Dias\Modules\Export\Http\Controllers\Api\Transects\ImageLabels; -use Dias\Transect; -use Illuminate\Contracts\Auth\Guard; -use Dias\Http\Controllers\Api\Controller; -use Dias\Modules\Export\Jobs\GenerateReportJob; use Dias\Modules\Export\Support\Reports\Transects\ImageLabels\CsvReport; +use Dias\Modules\Export\Http\Controllers\Api\Transects\TransectReportController; -class CsvReportController extends Controller +class CsvReportController extends TransectReportController { /** - * Generate an image label report + * The report classname * - * @api {post} transects/:id/reports/image-labels Generate a new image label report + * @var string + */ + protected $report = CsvReport::class; + + /** + * @api {post} transects/:id/reports/image-labels/csv Generate a new csv image label report * @apiGroup Transects - * @apiName GenerateImageLabelTransectReport + * @apiName GenerateCsvTransectImageLabelReport + * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. - * - * @param Guard $auth - * @param int $id transect id - * @return \Illuminate\Http\Response */ - public function store(Guard $auth, $id) - { - $transect = Transect::findOrFail($id); - $this->authorize('access', $transect); - $this->dispatch(new GenerateReportJob(new CsvReport($transect), $auth->user())); - } } diff --git a/src/Http/Controllers/Api/Transects/TransectReportController.php b/src/Http/Controllers/Api/Transects/TransectReportController.php new file mode 100644 index 000000000..ce94ac887 --- /dev/null +++ b/src/Http/Controllers/Api/Transects/TransectReportController.php @@ -0,0 +1,40 @@ +validate($request, [ + 'annotationSession' => "exists:annotation_sessions,id,transect_id,{$this->model->id}" + ]); + + return array_merge($options, [ + 'annotationSession' => $request->input('annotationSession'), + ]); + } + + /** + * Get the model to generate the report for + * + * @param int $id + * @return mixed + */ + protected function getModel($id) + { + return Transect::findOrFail($id); + } +} diff --git a/src/Http/routes.php b/src/Http/routes.php index c66aa291c..693647251 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -49,6 +49,37 @@ }); + $router->group([ + 'namespace' => 'Projects', + 'prefix' => 'projects', + ], function ($router) { + + $router->post('{id}/reports/annotations/basic', [ + 'uses' => 'Annotations\BasicReportController@store', + ]); + + $router->post('{id}/reports/annotations/extended', [ + 'uses' => 'Annotations\ExtendedReportController@store', + ]); + + $router->post('{id}/reports/annotations/full', [ + 'uses' => 'Annotations\FullReportController@store', + ]); + + $router->post('{id}/reports/annotations/csv', [ + 'uses' => 'Annotations\CsvReportController@store', + ]); + + $router->post('{id}/reports/image-labels/basic', [ + 'uses' => 'ImageLabels\BasicReportController@store', + ]); + + $router->post('{id}/reports/image-labels/csv', [ + 'uses' => 'ImageLabels\CsvReportController@store', + ]); + + }); + }); $router->group([ diff --git a/src/Support/CsvFile.php b/src/Support/CsvFile.php index 9db0fad8e..119580b58 100644 --- a/src/Support/CsvFile.php +++ b/src/Support/CsvFile.php @@ -4,8 +4,9 @@ use App; use File; +use Dias\Modules\Export\Contracts\DeletableContract; -class CsvFile +class CsvFile implements DeletableContract { /** * File path diff --git a/src/Support/Reports/ExecutesPythonScript.php b/src/Support/Reports/ExecutesPythonScript.php deleted file mode 100644 index 4da014d40..000000000 --- a/src/Support/Reports/ExecutesPythonScript.php +++ /dev/null @@ -1,35 +0,0 @@ -path; - }, $this->tmpFiles)); - - $exec = App::make(Exec::class, [ - 'command' => "{$python} {$script} \"{$title}\" {$this->availableReport->path} {$csvs}", - ]); - - if ($exec->code !== 0) { - throw new Exception("The report script '{$name}' failed with exit code {$exec->code}:\n".implode("\n", $exec->lines)); - } - } -} diff --git a/src/Support/Reports/Projects/Annotations/BasicReport.php b/src/Support/Reports/Projects/Annotations/BasicReport.php new file mode 100644 index 000000000..1f30dd6c8 --- /dev/null +++ b/src/Support/Reports/Projects/Annotations/BasicReport.php @@ -0,0 +1,30 @@ +isRestricted()) { + return "{$this->name} (restricted to export area)"; + } + + return $this->name; + } + + /** + * Get the filename + * + * @return string + */ + public function getFilename() + { + if ($this->isRestricted()) { + return "{$this->filename}_restricted"; + } + + return $this->filename; + } + + /** + * Should this report be restricted to the export area? + * + * @return boolean + */ + protected function isRestricted() + { + return $this->options->get('exportArea', false); + } +} diff --git a/src/Support/Reports/Projects/ImageLabels/BasicReport.php b/src/Support/Reports/Projects/ImageLabels/BasicReport.php new file mode 100644 index 000000000..b13170a79 --- /dev/null +++ b/src/Support/Reports/Projects/ImageLabels/BasicReport.php @@ -0,0 +1,31 @@ +project = $project; + } + + /** + * Get the ID associated with this report (e.g. project ID) + * + * @return int + */ + public function getId() + { + return $this->project->id; + } + + /** + * Description of the subject of this report (e.g. `project xyz`). + * + * @return string + */ + public function getSubject() + { + return "project {$this->project->name}"; + } + + /** + * Generate the report. + * + * @return void + */ + public function generateReport() + { + $filesForZip = []; + + foreach ($this->project->transects as $transect) { + $report = App::make($this->transectReportClass, [ + 'transect' => $transect, + 'options' => $this->options, + ]); + $report->generate(); + // The individual transect reports should be deleted again after + // the ZIP of this report was created. + $this->tmpFiles[] = $report->availableReport; + $filesForZip[$report->availableReport->path] = $report->getDownloadFilename(); + } + + $this->makeZip($filesForZip); + } + + /** + * Constructs a label name from the names of all parent labels and the label itself. + * + * Example: `Animalia > Annelida > Polychaeta > Buskiella sp` + * + * @param int $id Label ID + * @return string + */ + public function expandLabelName($id) + { + if (is_null($this->labels)) { + // We expect most of the used labels to belong to a label tree currently + // attached to the project. + $this->labels = $this->getProjectLabels()->keyBy('id'); + } + + return parent::expandLabelName($id); + } + + /** + * Get all labels that are attached to the project. + * + * @return \Illuminate\Support\Collection + */ + protected function getProjectLabels() + { + return Label::select('id', 'name', 'parent_id') + ->whereIn('label_tree_id', function ($query) { + $query->select('label_tree_id') + ->from('label_tree_project') + ->where('project_id', $this->project->id); + }) + ->get(); + } +} diff --git a/src/Support/Reports/Transects/Annotations/BasicReport.php b/src/Support/Reports/Transects/Annotations/BasicReport.php index 54f818f93..59ca1cc7a 100644 --- a/src/Support/Reports/Transects/Annotations/BasicReport.php +++ b/src/Support/Reports/Transects/Annotations/BasicReport.php @@ -4,12 +4,9 @@ use DB; use Dias\Modules\Export\Support\CsvFile; -use Dias\Modules\Export\Support\Reports\ExecutesPythonScript; class BasicReport extends Report { - use ExecutesPythonScript; - /** * Name of the report for use in text. * @@ -52,7 +49,7 @@ public function generateReport() $csv->close(); - $this->executeScript('basic_report', $this->transect->name); + $this->executeScript('basic_report'); } /** diff --git a/src/Support/Reports/Transects/Annotations/ExtendedReport.php b/src/Support/Reports/Transects/Annotations/ExtendedReport.php index d69ef90dc..64be51504 100644 --- a/src/Support/Reports/Transects/Annotations/ExtendedReport.php +++ b/src/Support/Reports/Transects/Annotations/ExtendedReport.php @@ -4,12 +4,9 @@ use DB; use Dias\Modules\Export\Support\CsvFile; -use Dias\Modules\Export\Support\Reports\ExecutesPythonScript; class ExtendedReport extends Report { - use ExecutesPythonScript; - /** * Name of the report for use in text. * @@ -57,7 +54,7 @@ public function generateReport() $csv->close(); - $this->executeScript('extended_report', $this->transect->name); + $this->executeScript('extended_report'); } /** diff --git a/src/Support/Reports/Transects/Annotations/FullReport.php b/src/Support/Reports/Transects/Annotations/FullReport.php index f643ac108..bb95264b6 100644 --- a/src/Support/Reports/Transects/Annotations/FullReport.php +++ b/src/Support/Reports/Transects/Annotations/FullReport.php @@ -4,12 +4,9 @@ use DB; use Dias\Modules\Export\Support\CsvFile; -use Dias\Modules\Export\Support\Reports\ExecutesPythonScript; class FullReport extends Report { - use ExecutesPythonScript; - /** * Name of the report for use in text. * @@ -62,7 +59,7 @@ public function generateReport() $csv->close(); - $this->executeScript('full_report', $this->transect->name); + $this->executeScript('full_report'); } /** diff --git a/src/Support/Reports/Transects/Annotations/Report.php b/src/Support/Reports/Transects/Annotations/Report.php index 6f2aa3cc7..572e53e66 100644 --- a/src/Support/Reports/Transects/Annotations/Report.php +++ b/src/Support/Reports/Transects/Annotations/Report.php @@ -101,6 +101,6 @@ public function getSkipIds() */ protected function isRestricted() { - return $this->options->get('restricted', false); + return $this->options->get('exportArea', false); } } diff --git a/src/Support/Reports/Transects/ImageLabels/BasicReport.php b/src/Support/Reports/Transects/ImageLabels/BasicReport.php index d0b528bbb..b17079eb8 100644 --- a/src/Support/Reports/Transects/ImageLabels/BasicReport.php +++ b/src/Support/Reports/Transects/ImageLabels/BasicReport.php @@ -5,12 +5,9 @@ use DB; use Dias\Modules\Export\Support\CsvFile; use Dias\Modules\Export\Support\Reports\Transects\Report; -use Dias\Modules\Export\Support\Reports\ExecutesPythonScript; class BasicReport extends Report { - use ExecutesPythonScript; - /** * Name of the report for use in text. * @@ -59,7 +56,7 @@ public function generateReport() $csv->close(); - $this->executeScript('extended_report', $this->transect->name); + $this->executeScript('extended_report'); } /** diff --git a/src/Support/Reports/Transects/Report.php b/src/Support/Reports/Transects/Report.php index 23e35ba9c..3e791855a 100644 --- a/src/Support/Reports/Transects/Report.php +++ b/src/Support/Reports/Transects/Report.php @@ -2,8 +2,11 @@ namespace Dias\Modules\Export\Support\Reports\Transects; +use App; +use Exception; use Dias\Label; use Dias\Transect; +use Dias\Modules\Export\Support\Exec; use Dias\Modules\Export\Support\Reports\Report as BaseReport; class Report extends BaseReport @@ -59,7 +62,7 @@ public function expandLabelName($id) { if (is_null($this->labels)) { // We expect most of the used labels to belong to a label tree currently - // attached to the project. + // attached to the transect (through its projects). $this->labels = $this->getTransectLabels()->keyBy('id'); } @@ -85,4 +88,28 @@ protected function getTransectLabels() }) ->get(); } + + /** + * Execute the external report parsing Python script + * + * @param string $name Name of the script to execute (in the `export.scripts` config namespace) + * @throws Exception If the script returned an error code. + */ + protected function executeScript($name) + { + $python = config('export.python'); + $script = config("export.scripts.{$name}"); + + $csvs = implode(' ', array_map(function ($csv) { + return $csv->path; + }, $this->tmpFiles)); + + $exec = App::make(Exec::class, [ + 'command' => "{$python} {$script} \"{$this->transect->name}\" {$this->availableReport->path} {$csvs}", + ]); + + if ($exec->code !== 0) { + throw new Exception("The report script '{$name}' failed with exit code {$exec->code}:\n".implode("\n", $exec->lines)); + } + } } diff --git a/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsBasicReportControllerTest.php b/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsBasicReportControllerTest.php new file mode 100644 index 000000000..5b2e39cda --- /dev/null +++ b/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsBasicReportControllerTest.php @@ -0,0 +1,38 @@ +project()->id; + + $this->post("api/v1/projects/{$id}/reports/annotations/basic") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateReportJob::class); + $this->beGuest(); + $this->post("api/v1/projects/{$id}/reports/annotations/basic") + ->assertResponseOk(); + + $job = $this->dispatchedJobs[0]; + $report = $job->report; + $this->assertInstanceOf(BasicReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(false, $report->options['exportArea']); + + $this->post("api/v1/projects/{$id}/reports/annotations/basic", [ + 'exportArea' => true + ]) + ->assertResponseOk(); + + $job = $this->dispatchedJobs[1]; + $report = $job->report; + $this->assertInstanceOf(BasicReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(true, $report->options['exportArea']); + } +} diff --git a/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsCsvReportControllerTest.php b/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsCsvReportControllerTest.php new file mode 100644 index 000000000..d6bb79d86 --- /dev/null +++ b/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsCsvReportControllerTest.php @@ -0,0 +1,38 @@ +project()->id; + + $this->post("api/v1/projects/{$id}/reports/annotations/csv") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateReportJob::class); + $this->beGuest(); + $this->post("api/v1/projects/{$id}/reports/annotations/csv") + ->assertResponseOk(); + + $job = $this->dispatchedJobs[0]; + $report = $job->report; + $this->assertInstanceOf(CsvReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(false, $report->options['exportArea']); + + $this->post("api/v1/projects/{$id}/reports/annotations/csv", [ + 'exportArea' => true + ]) + ->assertResponseOk(); + + $job = $this->dispatchedJobs[1]; + $report = $job->report; + $this->assertInstanceOf(CsvReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(true, $report->options['exportArea']); + } +} diff --git a/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsExtendedReportControllerTest.php b/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsExtendedReportControllerTest.php new file mode 100644 index 000000000..845d2213f --- /dev/null +++ b/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsExtendedReportControllerTest.php @@ -0,0 +1,38 @@ +project()->id; + + $this->post("api/v1/projects/{$id}/reports/annotations/extended") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateReportJob::class); + $this->beGuest(); + $this->post("api/v1/projects/{$id}/reports/annotations/extended") + ->assertResponseOk(); + + $job = $this->dispatchedJobs[0]; + $report = $job->report; + $this->assertInstanceOf(ExtendedReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(false, $report->options['exportArea']); + + $this->post("api/v1/projects/{$id}/reports/annotations/extended", [ + 'exportArea' => true + ]) + ->assertResponseOk(); + + $job = $this->dispatchedJobs[1]; + $report = $job->report; + $this->assertInstanceOf(ExtendedReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(true, $report->options['exportArea']); + } +} diff --git a/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsFullReportControllerTest.php b/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsFullReportControllerTest.php new file mode 100644 index 000000000..cbd7418a5 --- /dev/null +++ b/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsFullReportControllerTest.php @@ -0,0 +1,38 @@ +project()->id; + + $this->post("api/v1/projects/{$id}/reports/annotations/full") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateReportJob::class); + $this->beGuest(); + $this->post("api/v1/projects/{$id}/reports/annotations/full") + ->assertResponseOk(); + + $job = $this->dispatchedJobs[0]; + $report = $job->report; + $this->assertInstanceOf(FullReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(false, $report->options['exportArea']); + + $this->post("api/v1/projects/{$id}/reports/annotations/full", [ + 'exportArea' => true + ]) + ->assertResponseOk(); + + $job = $this->dispatchedJobs[1]; + $report = $job->report; + $this->assertInstanceOf(FullReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(true, $report->options['exportArea']); + } +} diff --git a/tests/Http/Controllers/Api/Projects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsBasicReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsBasicReportControllerTest.php new file mode 100644 index 000000000..e1b42a784 --- /dev/null +++ b/tests/Http/Controllers/Api/Projects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsBasicReportControllerTest.php @@ -0,0 +1,38 @@ +project()->id; + + $this->post("api/v1/projects/{$id}/reports/image-labels/basic") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateReportJob::class); + $this->beGuest(); + $this->post("api/v1/projects/{$id}/reports/image-labels/basic") + ->assertResponseOk(); + + $job = $this->dispatchedJobs[0]; + $report = $job->report; + $this->assertInstanceOf(BasicReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(false, $report->options['exportArea']); + + $this->post("api/v1/projects/{$id}/reports/image-labels/basic", [ + 'exportArea' => true + ]) + ->assertResponseOk(); + + $job = $this->dispatchedJobs[1]; + $report = $job->report; + $this->assertInstanceOf(BasicReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(true, $report->options['exportArea']); + } +} diff --git a/tests/Http/Controllers/Api/Projects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsCsvReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsCsvReportControllerTest.php new file mode 100644 index 000000000..671f41678 --- /dev/null +++ b/tests/Http/Controllers/Api/Projects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsCsvReportControllerTest.php @@ -0,0 +1,38 @@ +project()->id; + + $this->post("api/v1/projects/{$id}/reports/image-labels/csv") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateReportJob::class); + $this->beGuest(); + $this->post("api/v1/projects/{$id}/reports/image-labels/csv") + ->assertResponseOk(); + + $job = $this->dispatchedJobs[0]; + $report = $job->report; + $this->assertInstanceOf(CsvReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(false, $report->options['exportArea']); + + $this->post("api/v1/projects/{$id}/reports/image-labels/csv", [ + 'exportArea' => true + ]) + ->assertResponseOk(); + + $job = $this->dispatchedJobs[1]; + $report = $job->report; + $this->assertInstanceOf(CsvReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(true, $report->options['exportArea']); + } +} diff --git a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsBasicReportControllerTest.php b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsBasicReportControllerTest.php index 275f90f90..a01673b21 100644 --- a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsBasicReportControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsBasicReportControllerTest.php @@ -3,7 +3,7 @@ use Dias\Modules\Export\Jobs\GenerateReportJob; use Dias\Modules\Export\Support\Reports\Transects\Annotations\BasicReport; -class ExportModuleHttpControllersApiProjectsAnnotationsBasicReportControllerTest extends ApiTestCase +class ExportModuleHttpControllersApiTransectsAnnotationsBasicReportControllerTest extends ApiTestCase { public function testStore() @@ -22,6 +22,17 @@ public function testStore() $report = $job->report; $this->assertInstanceOf(BasicReport::class, $report); $this->assertEquals($id, $report->transect->id); - $this->assertEquals(false, $report->options['restricted']); + $this->assertEquals(false, $report->options['exportArea']); + + $this->post("api/v1/transects/{$id}/reports/annotations/basic", [ + 'exportArea' => true + ]) + ->assertResponseOk(); + + $job = $this->dispatchedJobs[1]; + $report = $job->report; + $this->assertInstanceOf(BasicReport::class, $report); + $this->assertEquals($id, $report->transect->id); + $this->assertEquals(true, $report->options['exportArea']); } } diff --git a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsCsvReportControllerTest.php b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsCsvReportControllerTest.php index d184299f2..390f7c885 100644 --- a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsCsvReportControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsCsvReportControllerTest.php @@ -22,6 +22,17 @@ public function testStore() $report = $job->report; $this->assertInstanceOf(CsvReport::class, $report); $this->assertEquals($id, $report->transect->id); - $this->assertEquals(false, $report->options['restricted']); + $this->assertEquals(false, $report->options['exportArea']); + + $this->post("api/v1/transects/{$id}/reports/annotations/csv", [ + 'exportArea' => true + ]) + ->assertResponseOk(); + + $job = $this->dispatchedJobs[1]; + $report = $job->report; + $this->assertInstanceOf(CsvReport::class, $report); + $this->assertEquals($id, $report->transect->id); + $this->assertEquals(true, $report->options['exportArea']); } } diff --git a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsExtendedReportControllerTest.php b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsExtendedReportControllerTest.php index c69dc3088..0d1899ad6 100644 --- a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsExtendedReportControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsExtendedReportControllerTest.php @@ -22,6 +22,17 @@ public function testStore() $report = $job->report; $this->assertInstanceOf(ExtendedReport::class, $report); $this->assertEquals($id, $report->transect->id); - $this->assertEquals(false, $report->options['restricted']); + $this->assertEquals(false, $report->options['exportArea']); + + $this->post("api/v1/transects/{$id}/reports/annotations/extended", [ + 'exportArea' => true + ]) + ->assertResponseOk(); + + $job = $this->dispatchedJobs[1]; + $report = $job->report; + $this->assertInstanceOf(ExtendedReport::class, $report); + $this->assertEquals($id, $report->transect->id); + $this->assertEquals(true, $report->options['exportArea']); } } diff --git a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsFullReportControllerTest.php b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsFullReportControllerTest.php index f10b03de6..ff5776a58 100644 --- a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsFullReportControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsFullReportControllerTest.php @@ -3,7 +3,7 @@ use Dias\Modules\Export\Jobs\GenerateReportJob; use Dias\Modules\Export\Support\Reports\Transects\Annotations\FullReport; -class ExportModuleHttpControllersApiProjectsAnnotationsFullReportControllerTest extends ApiTestCase +class ExportModuleHttpControllersApiTransectsAnnotationsFullReportControllerTest extends ApiTestCase { public function testStore() @@ -22,6 +22,17 @@ public function testStore() $report = $job->report; $this->assertInstanceOf(FullReport::class, $report); $this->assertEquals($id, $report->transect->id); - $this->assertEquals(false, $report->options['restricted']); + $this->assertEquals(false, $report->options['exportArea']); + + $this->post("api/v1/transects/{$id}/reports/annotations/full", [ + 'exportArea' => true + ]) + ->assertResponseOk(); + + $job = $this->dispatchedJobs[1]; + $report = $job->report; + $this->assertInstanceOf(FullReport::class, $report); + $this->assertEquals($id, $report->transect->id); + $this->assertEquals(true, $report->options['exportArea']); } } diff --git a/tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsBasicReportTest.php b/tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsBasicReportTest.php new file mode 100644 index 000000000..c51b88dfe --- /dev/null +++ b/tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsBasicReportTest.php @@ -0,0 +1,14 @@ +assertEquals('basic annotation report', $report->getName()); + $this->assertEquals('basic_annotation_report', $report->getFilename()); + } +} diff --git a/tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsCsvReportTest.php b/tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsCsvReportTest.php new file mode 100644 index 000000000..080f34d6e --- /dev/null +++ b/tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsCsvReportTest.php @@ -0,0 +1,14 @@ +assertEquals('CSV annotation report', $report->getName()); + $this->assertEquals('csv_annotation_report', $report->getFilename()); + } +} diff --git a/tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsExtendedReportTest.php b/tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsExtendedReportTest.php new file mode 100644 index 000000000..f7993cd87 --- /dev/null +++ b/tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsExtendedReportTest.php @@ -0,0 +1,14 @@ +assertEquals('extended annotation report', $report->getName()); + $this->assertEquals('extended_annotation_report', $report->getFilename()); + } +} diff --git a/tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsFullReportTest.php b/tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsFullReportTest.php new file mode 100644 index 000000000..7c476b9bf --- /dev/null +++ b/tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsFullReportTest.php @@ -0,0 +1,14 @@ +assertEquals('full annotation report', $report->getName()); + $this->assertEquals('full_annotation_report', $report->getFilename()); + } +} diff --git a/tests/Support/Reports/Projects/ExportModuleSupportReportsProjectsReportTest.php b/tests/Support/Reports/Projects/ExportModuleSupportReportsProjectsReportTest.php new file mode 100644 index 000000000..bbf29d94b --- /dev/null +++ b/tests/Support/Reports/Projects/ExportModuleSupportReportsProjectsReportTest.php @@ -0,0 +1,74 @@ +assertContains($project->name, $report->getSubject()); + } + + public function testExpandLabelNameOwnTree() + { + $project = ProjectTest::create(); + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + $project->labelTrees()->attach($root->tree); + + $report = new Report($project); + + $this->assertEquals("{$root->name} > {$child->name}", $report->expandLabelName($child->id)); + } + + public function testProperties() + { + $report = new ProjectReportStub(ProjectTest::make()); + $this->assertEquals('zip', $report->getExtension()); + } + + public function testGenerate() + { + $mock = Mockery::mock(); + $mock->shouldReceive('generate')->once(); + $mock->shouldReceive('getDownloadFilename')->once() + ->andReturn('my_download_filename.pdf'); + + $availableReportMock = Mockery::mock(); + $availableReportMock->path = 'my_tmp_file_path'; + $availableReportMock->shouldReceive('delete')->once(); + $mock->availableReport = $availableReportMock; + + App::bind(TransectReport::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + $mock->shouldReceive('open')->once()->andReturn(true); + $mock->shouldReceive('addFile')->once() + ->with('my_tmp_file_path', 'my_download_filename.pdf'); + $mock->shouldReceive('close')->once(); + + App::bind(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $project = ProjectTest::create(); + $transect = TransectTest::create(); + $project->addTransectId($transect->id); + + $report = new ProjectReportStub($project); + $report->generate(); + } +} + +class ProjectReportStub extends Report +{ + protected $transectReportClass = TransectReport::class; +} diff --git a/tests/Support/Reports/Projects/ImageLabels/ExportModuleSupportReportsProjectsImageLabelsBasicReportTest.php b/tests/Support/Reports/Projects/ImageLabels/ExportModuleSupportReportsProjectsImageLabelsBasicReportTest.php new file mode 100644 index 000000000..808122669 --- /dev/null +++ b/tests/Support/Reports/Projects/ImageLabels/ExportModuleSupportReportsProjectsImageLabelsBasicReportTest.php @@ -0,0 +1,14 @@ +assertEquals('basic image label report', $report->getName()); + $this->assertEquals('basic_image_label_report', $report->getFilename()); + } +} diff --git a/tests/Support/Reports/Projects/ImageLabels/ExportModuleSupportReportsProjectsImageLabelsCsvReportTest.php b/tests/Support/Reports/Projects/ImageLabels/ExportModuleSupportReportsProjectsImageLabelsCsvReportTest.php new file mode 100644 index 000000000..b913e85c5 --- /dev/null +++ b/tests/Support/Reports/Projects/ImageLabels/ExportModuleSupportReportsProjectsImageLabelsCsvReportTest.php @@ -0,0 +1,14 @@ +assertEquals('CSV image label report', $report->getName()); + $this->assertEquals('csv_image_label_report', $report->getFilename()); + } +} diff --git a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsBasicReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsBasicReportTest.php index 0528d31cf..3cc24dc56 100644 --- a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsBasicReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsBasicReportTest.php @@ -6,7 +6,7 @@ use Dias\Modules\Export\Support\CsvFile; use Dias\Modules\Export\Support\Reports\Transects\Annotations\BasicReport; -class ExportModuleSupportReportstransectsAnnotationsBasicReportTest extends TestCase +class ExportModuleSupportReportsTransectsAnnotationsBasicReportTest extends TestCase { public function testProperties() From bdf4153961051eb8168a97930fe70fa1bf5ea5fa Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 28 Sep 2016 15:55:33 +0200 Subject: [PATCH 059/407] Implement request project report view --- src/ExportServiceProvider.php | 3 +- src/Http/Controllers/Api/ReportController.php | 4 +- .../Transects/TransectReportController.php | 2 +- .../Views/ProjectReportsController.php | 25 ++++ ...ller.php => TransectReportsController.php} | 4 +- src/Http/routes.php | 7 +- src/Support/Reports/Projects/Report.php | 35 ------ src/public/assets/scripts/annotations.js | 2 +- src/public/assets/scripts/main.js | 2 +- .../ProjectReportRequestController.js | 51 ++++++++ .../TransectReportRequestController.js | 63 +--------- .../js/export/factories/ProjectReport.js | 54 +++++++++ .../assets/js/export/factories/ReportForm.js | 77 ++++++++++++ src/resources/views/projectReports.blade.php | 112 ++++++++++++++++++ src/resources/views/projectsShow.blade.php | 53 --------- .../views/projectsShowScripts.blade.php | 1 - .../views/projectsShowToolbar.blade.php | 3 + src/resources/views/transectReports.blade.php | 59 ++++----- ...llersViewsProjectsReportControllerTest.php | 20 ++++ ...lersViewsTransectsReportControllerTest.php | 2 - 20 files changed, 394 insertions(+), 185 deletions(-) create mode 100644 src/Http/Controllers/Views/ProjectReportsController.php rename src/Http/Controllers/Views/{Transects/ReportsController.php => TransectReportsController.php} (84%) create mode 100644 src/resources/assets/js/export/controllers/ProjectReportRequestController.js create mode 100644 src/resources/assets/js/export/factories/ProjectReport.js create mode 100644 src/resources/assets/js/export/factories/ReportForm.js create mode 100644 src/resources/views/projectReports.blade.php delete mode 100644 src/resources/views/projectsShow.blade.php delete mode 100644 src/resources/views/projectsShowScripts.blade.php create mode 100644 src/resources/views/projectsShowToolbar.blade.php create mode 100644 tests/Http/Controllers/Views/ExportModuleHttpControllersViewsProjectsReportControllerTest.php diff --git a/src/ExportServiceProvider.php b/src/ExportServiceProvider.php index ecbc5c7a2..8f555433f 100644 --- a/src/ExportServiceProvider.php +++ b/src/ExportServiceProvider.php @@ -35,8 +35,7 @@ public function boot(Modules $modules,Router $router) __DIR__.'/config/export.php' => config_path('export.php'), ], 'config'); - $modules->addMixin('export', 'projectsShow'); - $modules->addMixin('export', 'projectsShowScripts'); + $modules->addMixin('export', 'projectsShowToolbar'); $modules->addMixin('export', 'annotationsSettings'); $modules->addMixin('export', 'annotationsScripts'); $modules->addMixin('export', 'manualTutorial'); diff --git a/src/Http/Controllers/Api/ReportController.php b/src/Http/Controllers/Api/ReportController.php index 34d62775a..74fcfea12 100644 --- a/src/Http/Controllers/Api/ReportController.php +++ b/src/Http/Controllers/Api/ReportController.php @@ -48,8 +48,8 @@ public function store(Request $request, Guard $auth, $id) protected function getOptions(Request $request) { $this->validate($request, [ - 'separateLabelTrees' => 'boolean', - 'exportArea' => 'boolean', + 'separateLabelTrees' => 'nullable|boolean', + 'exportArea' => 'nullable|boolean', ]); return [ diff --git a/src/Http/Controllers/Api/Transects/TransectReportController.php b/src/Http/Controllers/Api/Transects/TransectReportController.php index ce94ac887..5f5f2e1af 100644 --- a/src/Http/Controllers/Api/Transects/TransectReportController.php +++ b/src/Http/Controllers/Api/Transects/TransectReportController.php @@ -19,7 +19,7 @@ public function getOptions(Request $request) $options = parent::getOptions($request); $this->validate($request, [ - 'annotationSession' => "exists:annotation_sessions,id,transect_id,{$this->model->id}" + 'annotationSession' => "nullable|exists:annotation_sessions,id,transect_id,{$this->model->id}" ]); return array_merge($options, [ diff --git a/src/Http/Controllers/Views/ProjectReportsController.php b/src/Http/Controllers/Views/ProjectReportsController.php new file mode 100644 index 000000000..a4c425356 --- /dev/null +++ b/src/Http/Controllers/Views/ProjectReportsController.php @@ -0,0 +1,25 @@ +authorize('access', $project); + + return view('export::projectReports', [ + 'project' => $project, + ]); + } +} diff --git a/src/Http/Controllers/Views/Transects/ReportsController.php b/src/Http/Controllers/Views/TransectReportsController.php similarity index 84% rename from src/Http/Controllers/Views/Transects/ReportsController.php rename to src/Http/Controllers/Views/TransectReportsController.php index 5dff0af4e..403f87c85 100644 --- a/src/Http/Controllers/Views/Transects/ReportsController.php +++ b/src/Http/Controllers/Views/TransectReportsController.php @@ -1,11 +1,11 @@ 'auth', ], function ($router) { $router->get('transects/{id}/reports', [ - 'uses' => 'Transects\ReportsController@show', + 'uses' => 'TransectReportsController@show', 'as' => 'transect-reports', ]); + + $router->get('projects/{id}/reports', [ + 'uses' => 'ProjectReportsController@show', + 'as' => 'project-reports', + ]); }); // this route should be public (is protected by random uids) diff --git a/src/Support/Reports/Projects/Report.php b/src/Support/Reports/Projects/Report.php index ec186800b..ed3b7191d 100644 --- a/src/Support/Reports/Projects/Report.php +++ b/src/Support/Reports/Projects/Report.php @@ -88,39 +88,4 @@ public function generateReport() $this->makeZip($filesForZip); } - - /** - * Constructs a label name from the names of all parent labels and the label itself. - * - * Example: `Animalia > Annelida > Polychaeta > Buskiella sp` - * - * @param int $id Label ID - * @return string - */ - public function expandLabelName($id) - { - if (is_null($this->labels)) { - // We expect most of the used labels to belong to a label tree currently - // attached to the project. - $this->labels = $this->getProjectLabels()->keyBy('id'); - } - - return parent::expandLabelName($id); - } - - /** - * Get all labels that are attached to the project. - * - * @return \Illuminate\Support\Collection - */ - protected function getProjectLabels() - { - return Label::select('id', 'name', 'parent_id') - ->whereIn('label_tree_id', function ($query) { - $query->select('label_tree_id') - ->from('label_tree_project') - ->where('project_id', $this->project->id); - }) - ->get(); - } } diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index ad73688d4..a9348805f 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1 @@ -angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e.delete=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]),angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature}).catch(function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n.delete({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]); \ No newline at end of file +angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature}).catch(function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n.delete({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]),angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e.delete=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]); \ No newline at end of file diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index 81c45bbe2..440d46537 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -angular.module("dias.export",["dias.api","dias.ui"]),angular.module("dias.export").config(["$compileProvider",function(t){"use strict";t.debugInfoEnabled(!1)}]),angular.module("dias.export").controller("TransectReportRequestController",["$scope","TransectReport","msg","TRANSECT_ID",function(t,a,e,n){"use strict";var r={annotations:["basic","extended","full","csv"],"image-labels":["basic","csv"]},o={annotations:["exportArea","separateLabelTrees","annotationSession"],"image-labels":["annotationSession"]},s={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1,annotationSession:null}};t.form=angular.copy(s),t.state={success:!1,loading:!1},t.error={},t.availableVariants=r[t.form.type];var i=function(){t.state.success=!0,t.state.loading=!1,t.form=angular.copy(s),t.error={}},p=function(a){t.state.loading=!1,t.success=!1,422===a.status?t.error=a.data:e.responseError(a)};t.selectType=function(a){t.form.type=a},t.wantsType=function(a){return t.form.type===a},t.wantsCombination=function(a,e){return t.wantsType(a)&&t.form.variant===e},t.submit=function(){for(var e={},r=o[t.form.type],s=r.length-1;s>=0;s--)e[r[s]]=t.form.options[r[s]];t.state.loading=!0,a.requestGenericReport({transect_id:n,type:t.form.type,variant:t.form.variant},e,i,p)},t.$watch("form.type",function(a){t.availableVariants=r[a],t.form.variant=t.availableVariants[0]})}]),angular.module("dias.export").factory("TransectReport",["$resource","URL",function(t,a){"use strict";return t(a+"/api/v1/transects/:transect_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]); \ No newline at end of file +angular.module("dias.export",["dias.api","dias.ui"]),angular.module("dias.export").config(["$compileProvider",function(t){"use strict";t.debugInfoEnabled(!1)}]),angular.module("dias.export").controller("ProjectReportRequestController",["$scope","ProjectReport","ReportForm","PROJECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","full","csv"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees"],"image-labels":["separateLabelTrees"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{project_id:s})}}]),angular.module("dias.export").controller("TransectReportRequestController",["$scope","TransectReport","ReportForm","TRANSECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","full","csv"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees","annotationSession"],"image-labels":["separateLabelTrees","annotationSession"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1,annotationSession:null}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{transect_id:s})}}]),angular.module("dias.export").factory("ProjectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/projects/:project_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]),angular.module("dias.export").factory("ReportForm",["msg",function(t){"use strict";function e(t,e,a){this.variants=t,this.allowedOptions=e,this.defaultForm=a,this.data=angular.copy(this.defaultForm),this.state={success:!1,loading:!1},this.availableVariants=this.variants[this.data.type]}return e.prototype.handleRequestSuccess=function(){this.state.success=!0,this.state.loading=!1,this.error={}},e.prototype.handleRequestError=function(e){this.state.loading=!1,this.success=!1,422===e.status?this.error=e.data:t.responseError(e)},e.prototype.selectType=function(t){this.data.type=t,this.availableVariants=this.variants[t],this.data.variant=this.availableVariants[0]},e.prototype.wantsType=function(t){return this.data.type===t},e.prototype.wantsCombination=function(t,e){return this.wantsType(t)&&this.data.variant===e},e.prototype.submit=function(t,e){for(var a=this,s={},r=this.allowedOptions[this.data.type],n=r.length-1;n>=0;n--)s[r[n]]=this.data.options[r[n]];this.state.loading=!0,this.state.success=!1,e=angular.extend(e,{type:this.data.type,variant:this.data.variant}),t.requestGenericReport(e,s,function(){a.handleRequestSuccess()},function(t){a.handleRequestError(t)})},e}]),angular.module("dias.export").factory("TransectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/transects/:transect_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]); \ No newline at end of file diff --git a/src/resources/assets/js/export/controllers/ProjectReportRequestController.js b/src/resources/assets/js/export/controllers/ProjectReportRequestController.js new file mode 100644 index 000000000..587cffdb6 --- /dev/null +++ b/src/resources/assets/js/export/controllers/ProjectReportRequestController.js @@ -0,0 +1,51 @@ +/** + * @namespace dias.export + * @ngdoc controller + * @name ProjectReportRequestController + * @memberOf dias.export + * @description Controller for requesting a new transect report + */ +angular.module('dias.export').controller('ProjectReportRequestController', function ($scope, ProjectReport, ReportForm, PROJECT_ID) { + "use strict"; + + var variants = { + 'annotations': [ + 'basic', + 'extended', + 'full', + 'csv' + ], + 'image-labels': [ + 'basic', + 'csv' + ] + }; + + var allowedOptions = { + 'annotations': [ + 'exportArea', + 'separateLabelTrees' + ], + 'image-labels': [ + 'separateLabelTrees' + ] + }; + + var defaultForm = { + type: 'annotations', + variant: 'basic', + options: { + exportArea: false, + separateLabelTrees: false + } + }; + + $scope.form = new ReportForm(variants, allowedOptions, defaultForm); + + $scope.submit = function () { + $scope.form.submit(ProjectReport, { + project_id: PROJECT_ID + }); + }; + } +); diff --git a/src/resources/assets/js/export/controllers/TransectReportRequestController.js b/src/resources/assets/js/export/controllers/TransectReportRequestController.js index 4540880a9..af22947bc 100644 --- a/src/resources/assets/js/export/controllers/TransectReportRequestController.js +++ b/src/resources/assets/js/export/controllers/TransectReportRequestController.js @@ -5,7 +5,7 @@ * @memberOf dias.export * @description Controller for requesting a new transect report */ -angular.module('dias.export').controller('TransectReportRequestController', function ($scope, TransectReport, msg, TRANSECT_ID) { +angular.module('dias.export').controller('TransectReportRequestController', function ($scope, TransectReport, ReportForm, TRANSECT_ID) { "use strict"; var variants = { @@ -28,6 +28,7 @@ angular.module('dias.export').controller('TransectReportRequestController', func 'annotationSession' ], 'image-labels': [ + 'separateLabelTrees', 'annotationSession' ] }; @@ -42,64 +43,12 @@ angular.module('dias.export').controller('TransectReportRequestController', func } }; - $scope.form = angular.copy(defaultForm); - - $scope.state = { - success: false, - loading: false - }; - - $scope.error = {}; - - $scope.availableVariants = variants[$scope.form.type]; - - var handleRequestSuccess = function () { - $scope.state.success = true; - $scope.state.loading = false; - $scope.form = angular.copy(defaultForm); - $scope.error = {}; - }; - - var handleRequestError = function (response) { - $scope.state.loading = false; - $scope.success = false; - if (response.status === 422) { - $scope.error = response.data; - } else { - msg.responseError(response); - } - }; - - $scope.selectType = function (type) { - $scope.form.type = type; - }; - - $scope.wantsType = function (type) { - return $scope.form.type === type; - }; - - $scope.wantsCombination = function (type, variant) { - return $scope.wantsType(type) && $scope.form.variant === variant; - }; + $scope.form = new ReportForm(variants, allowedOptions, defaultForm); $scope.submit = function () { - var options = {}; - var allowed = allowedOptions[$scope.form.type]; - for (var i = allowed.length - 1; i >= 0; i--) { - options[allowed[i]] = $scope.form.options[allowed[i]]; - } - - $scope.state.loading = true; - TransectReport.requestGenericReport({ - transect_id: TRANSECT_ID, - type: $scope.form.type, - variant: $scope.form.variant, - }, options, handleRequestSuccess, handleRequestError); + $scope.form.submit(TransectReport, { + transect_id: TRANSECT_ID + }); }; - - $scope.$watch('form.type', function (type) { - $scope.availableVariants = variants[type]; - $scope.form.variant = $scope.availableVariants[0]; - }); } ); diff --git a/src/resources/assets/js/export/factories/ProjectReport.js b/src/resources/assets/js/export/factories/ProjectReport.js new file mode 100644 index 000000000..dabe2076b --- /dev/null +++ b/src/resources/assets/js/export/factories/ProjectReport.js @@ -0,0 +1,54 @@ +/** + * @ngdoc factory + * @name ProjectReport + * @memberOf dias.export + * @description Provides the resource for requesting project reports + * @requires $resource + * @returns {Object} A new [ngResource](https://docs.angularjs.org/api/ngResource/service/$resource) object + * @example +// request a basic report with restricted annotation area +ProjectReport.requestBasicAnnotationReport({project_id: 1}, {restrict: 1}); + +// request a extended report without restricted annotation area +ProjectReport.requestExtendedAnnotationReport({project_id: 1}, {restrict: 0}); + +// request a full report without restricted annotation area +ProjectReport.requestFullAnnotationReport({project_id: 1}, {}); + +// request an image label report +ProjectReport.requestBasicImageLabelReport({project_id: 1}, {}); + + */ +angular.module('dias.export').factory('ProjectReport', function ($resource, URL) { + "use strict"; + + return $resource(URL + '/api/v1/projects/:project_id/reports/:type/:variant', {}, { + requestGenericReport: { + method: 'POST' + }, + requestBasicAnnotationReport: { + method: 'POST', + params: {type: 'annotations', variant: 'basic'} + }, + requestExtendedAnnotationReport: { + method: 'POST', + params: {type: 'annotations', variant: 'extended'} + }, + requestFullAnnotationReport: { + method: 'POST', + params: {type: 'annotations', variant: 'full'} + }, + requestCsvAnnotationReport: { + method: 'POST', + params: {type: 'annotations', variant: 'csv'} + }, + requestBasicImageLabelReport: { + method: 'POST', + params: {type: 'image-labels', variant: 'basic'} + }, + requestCsvImageLabelReport: { + method: 'POST', + params: {type: 'image-labels', variant: 'csv' + }} + }); +}); diff --git a/src/resources/assets/js/export/factories/ReportForm.js b/src/resources/assets/js/export/factories/ReportForm.js new file mode 100644 index 000000000..205562d14 --- /dev/null +++ b/src/resources/assets/js/export/factories/ReportForm.js @@ -0,0 +1,77 @@ +/** + * @namespace dias.export + * @ngdoc factory + * @name ReportForm + * @memberOf dias.export + * @description Service to help with request report forms + */ +angular.module('dias.export').factory('ReportForm', function (msg) { + "use strict"; + + function ReportForm(variants, allowedOptions, defaultForm) { + this.variants = variants; + this.allowedOptions = allowedOptions; + this.defaultForm = defaultForm; + this.data = angular.copy(this.defaultForm); + this.state = { + success: false, + loading: false + }; + this.availableVariants = this.variants[this.data.type]; + } + + ReportForm.prototype.handleRequestSuccess = function () { + this.state.success = true; + this.state.loading = false; + this.error = {}; + }; + + ReportForm.prototype.handleRequestError = function (response) { + this.state.loading = false; + this.success = false; + if (response.status === 422) { + this.error = response.data; + } else { + msg.responseError(response); + } + }; + + ReportForm.prototype.selectType = function (type) { + this.data.type = type; + this.availableVariants = this.variants[type]; + this.data.variant = this.availableVariants[0]; + }; + + ReportForm.prototype.wantsType = function (type) { + return this.data.type === type; + }; + + ReportForm.prototype.wantsCombination = function (type, variant) { + return this.wantsType(type) && this.data.variant === variant; + }; + + ReportForm.prototype.submit = function (factory, params) { + var _this = this; + var options = {}; + var allowed = this.allowedOptions[this.data.type]; + for (var i = allowed.length - 1; i >= 0; i--) { + options[allowed[i]] = this.data.options[allowed[i]]; + } + + this.state.loading = true; + this.state.success = false; + + params = angular.extend(params, { + type: this.data.type, + variant: this.data.variant, + }); + + factory.requestGenericReport(params, options, function () { + _this.handleRequestSuccess(); + }, function (response) { + _this.handleRequestError(response); + }); + }; + + return ReportForm; +}); diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php new file mode 100644 index 000000000..9c0d5348c --- /dev/null +++ b/src/resources/views/projectReports.blade.php @@ -0,0 +1,112 @@ +@extends('app') + +@section('title')Reports for {{ $project->name }}@stop + +@push('scripts') + + +@endpush + +@push('styles') + +@endpush + +@section('navbar') + +@endsection + +@section('content') +
    +
    +
    +

    Request report for {{$project->name}}

    +

    + Request a project report to consolidate data of all transects of the project into downloadable files. +

    +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    + + +
    +
    +
    +
    + The basic annotation report contains graphical plots of abundances of the different annotation labels (as PDF for each transect). See the manual for the report schema. +
    +
    + The extended annotation report lists the abundances of annotation labels for each image of this transect (as XLSX for each transect). See the manual for the report schema. +
    +
    + The full annotation report lists the labels, shape and coordinates of all annotations of this transect (as XLSX for each transect). See the manual for the report schema. +
    +
    + The CSV annotation report is intended for subsequent processing and lists the annotation labels of this transect at the highest possible resolution (as CSV files in a ZIP archive for each transect). See the manual for the report schema. +
    +
    + The basic image label report lists the image labels of all images of this transect (as XLSX for each transect). See the manual for the report schema. +
    +
    + The CSV image label report is intended for subsequent processing and lists the image labels of this transect at the highest possible resolution (as CSV files in a ZIP archive for each transect). See the manual for the report schema. +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + Annotations belonging to different label trees will be separated to different files/sheets. +
    +
    +
    +
    +
    + +
    +
    +
    +
    + Annotations that are outside of the export area will be discarded for this report. +
    +
    +
    + The requested report will be prepared. You will get notified by email when it is ready. Now you can request a new report or go back to the project. +
    +
    + back + +
    +
    +

    + ProTip: You can request reports for individual transects from the transect overview page. +

    +
    +
    +
    +@endsection diff --git a/src/resources/views/projectsShow.blade.php b/src/resources/views/projectsShow.blade.php deleted file mode 100644 index 07ad2d926..000000000 --- a/src/resources/views/projectsShow.blade.php +++ /dev/null @@ -1,53 +0,0 @@ -
    -
    - Reports -
    -
    -
    - The report will be prepared for you. You will get notified by email when it is ready. -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    - The basic annotation report contains graphical plots of abundances of the different annotation labels for each transect of this project (as PDF). See the manual for the report schema. -
    -
    - The extended annotation report lists the abundances of annotation labels for each image in all transects of this project (as XLSX). See the manual for the report schema. -
    -
    - The full annotation report lists the labels, shape and coordinates of all annotations in all transects of this project (as XLSX). See the manual for the report schema. -
    -
    - The CSV annotation report is intended for subsequent processing and lists the annotation labels of all transects of this project at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. -
    -
    - The basic image label report lists the image labels of all images of all transects of this project (as XLSX). See the manual for the report schema. -
    -
    - The CSV image label report is intended for subsequent processing and lists the image labels of all transects of this project at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. -
    -
    -
    - Annotations that are outside of the export area will be discarded for this report. -
    -
    -
    -
    diff --git a/src/resources/views/projectsShowScripts.blade.php b/src/resources/views/projectsShowScripts.blade.php deleted file mode 100644 index c07c3c588..000000000 --- a/src/resources/views/projectsShowScripts.blade.php +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/resources/views/projectsShowToolbar.blade.php b/src/resources/views/projectsShowToolbar.blade.php new file mode 100644 index 000000000..a11169bbc --- /dev/null +++ b/src/resources/views/projectsShowToolbar.blade.php @@ -0,0 +1,3 @@ + + Request reports + diff --git a/src/resources/views/transectReports.blade.php b/src/resources/views/transectReports.blade.php index 8ff9fcdfc..919266199 100644 --- a/src/resources/views/transectReports.blade.php +++ b/src/resources/views/transectReports.blade.php @@ -34,90 +34,95 @@
    - +
    - +
    - +
    -
    +
    The basic annotation report contains graphical plots of abundances of the different annotation labels (as PDF). See the manual for the report schema.
    -
    +
    The extended annotation report lists the abundances of annotation labels for each image of this transect (as XLSX). See the manual for the report schema.
    -
    +
    The full annotation report lists the labels, shape and coordinates of all annotations of this transect (as XLSX). See the manual for the report schema.
    -
    +
    The CSV annotation report is intended for subsequent processing and lists the annotation labels of this transect at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema.
    -
    +
    The basic image label report lists the image labels of all images of this transect (as XLSX). See the manual for the report schema.
    -
    +
    The CSV image label report is intended for subsequent processing and lists the image labels of this transect at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema.
    -
    +
    -
    +
    - @foreach ($annotationSessions as $session) @endforeach -
    +
    -
    +
    Only annotations that were created during the selected annotation session will be included in the report.
    -
    +
    -
    +
    -
    +
    Annotations belonging to different label trees will be separated to different files/sheets.
    -
    -
    +
    +
    -
    +
    -
    +
    Annotations that are outside of the export area will be discarded for this report.
    -
    +
    The requested report will be prepared. You will get notified by email when it is ready. Now you can request a new report or go back to the transect.
    - back - +
    + back + +
    +

    + ProTip: You can request reports for a whole project from the project overview page. +

    diff --git a/tests/Http/Controllers/Views/ExportModuleHttpControllersViewsProjectsReportControllerTest.php b/tests/Http/Controllers/Views/ExportModuleHttpControllersViewsProjectsReportControllerTest.php new file mode 100644 index 000000000..350e92fcb --- /dev/null +++ b/tests/Http/Controllers/Views/ExportModuleHttpControllersViewsProjectsReportControllerTest.php @@ -0,0 +1,20 @@ +project()->id; + + $this->get("projects/{$id}/reports") + ->assertResponseStatus(302); + + $this->beUser(); + $this->get("projects/{$id}/reports") + ->assertResponseStatus(403); + + $this->beGuest(); + $this->get("projects/{$id}/reports") + ->assertResponseOk(); + } +} diff --git a/tests/Http/Controllers/Views/ExportModuleHttpControllersViewsTransectsReportControllerTest.php b/tests/Http/Controllers/Views/ExportModuleHttpControllersViewsTransectsReportControllerTest.php index dfcd13de0..cca0711ac 100644 --- a/tests/Http/Controllers/Views/ExportModuleHttpControllersViewsTransectsReportControllerTest.php +++ b/tests/Http/Controllers/Views/ExportModuleHttpControllersViewsTransectsReportControllerTest.php @@ -1,7 +1,5 @@ Date: Tue, 4 Oct 2016 16:22:41 +0200 Subject: [PATCH 060/407] Implement option to separate reports by label trees Closes #12 --- src/Support/CsvFile.php | 20 ++- src/Support/Reports/Report.php | 12 +- .../Transects/Annotations/BasicReport.php | 42 ++++-- .../Transects/Annotations/CsvReport.php | 113 +++++++++------ .../Transects/Annotations/ExtendedReport.php | 66 ++++++--- .../Transects/Annotations/FullReport.php | 67 ++++++--- .../Transects/ImageLabels/BasicReport.php | 62 +++++--- .../Transects/ImageLabels/CsvReport.php | 97 ++++++++----- src/Support/Reports/Transects/Report.php | 2 +- src/resources/scripts/basic_report.py | 16 +-- src/resources/scripts/extended_report.py | 2 +- src/resources/views/projectReports.blade.php | 26 ++-- src/resources/views/transectReports.blade.php | 24 ++-- ...rtsTransectsAnnotationsBasicReportTest.php | 72 +++++++++- ...portsTransectsAnnotationsCsvReportTest.php | 136 ++++++++++++++++-- ...TransectsAnnotationsExtendedReportTest.php | 76 +++++++++- ...ortsTransectsAnnotationsFullReportTest.php | 83 ++++++++++- ...tReportsTransectsAnnotationsReportTest.php | 1 - ...rtsTransectsImageLabelsBasicReportTest.php | 72 +++++++++- ...portsTransectsImageLabelsCsvReportTest.php | 117 +++++++++++++-- 20 files changed, 886 insertions(+), 220 deletions(-) diff --git a/src/Support/CsvFile.php b/src/Support/CsvFile.php index 119580b58..48d3ed7cf 100644 --- a/src/Support/CsvFile.php +++ b/src/Support/CsvFile.php @@ -13,35 +13,35 @@ class CsvFile implements DeletableContract * * @var string */ - public $path; + protected $path; /** * File handle for the CSV file * * @var resource */ - private $handle; + protected $handle; /** * Field delimiter * * @var string */ - private $delimiter; + protected $delimiter; /** * String enclosure character * * @var string */ - private $enclosure; + protected $enclosure; /** * Escape character * * @var string */ - private $escape_char; + protected $escape_char; /** * Create a new CSV file @@ -110,4 +110,14 @@ public function close() // } } + + /** + * Returns the path of the CSV file + * + * @return string + */ + public function getPath() + { + return $this->path; + } } diff --git a/src/Support/Reports/Report.php b/src/Support/Reports/Report.php index 03ed87f10..ff1908c2c 100644 --- a/src/Support/Reports/Report.php +++ b/src/Support/Reports/Report.php @@ -187,7 +187,7 @@ public function expandLabelName($id) } if (!$this->labels->has($id)) { - // If another label tree was used, fetch it separately. + // Fetch the whole label tree for each label that wasn't already loaded. $labels = $this->getSiblingLabels($id); $this->labels = $this->labels->merge($labels)->keyBy('id'); } @@ -221,4 +221,14 @@ protected function getSiblingLabels($id) }) ->get(); } + + /** + * Should this report separate the output files for different label trees? + * + * @return boolean + */ + protected function shouldSeparateLabelTrees() + { + return $this->options->get('separateLabelTrees', false); + } } diff --git a/src/Support/Reports/Transects/Annotations/BasicReport.php b/src/Support/Reports/Transects/Annotations/BasicReport.php index 59ca1cc7a..b31debffe 100644 --- a/src/Support/Reports/Transects/Annotations/BasicReport.php +++ b/src/Support/Reports/Transects/Annotations/BasicReport.php @@ -3,6 +3,7 @@ namespace Dias\Modules\Export\Support\Reports\Transects\Annotations; use DB; +use Dias\LabelTree; use Dias\Modules\Export\Support\CsvFile; class BasicReport extends Report @@ -35,20 +36,20 @@ class BasicReport extends Report */ public function generateReport() { - $csv = CsvFile::makeTmp(); - $this->tmpFiles[] = $csv; + $labels = $this->query()->get(); - // put transect name to first line - $csv->put([$this->transect->name]); + if ($this->shouldSeparateLabelTrees()) { + $labels = $labels->groupBy('label_tree_id'); + $trees = LabelTree::whereIn('id', $labels->keys())->pluck('name', 'id'); - $rows = $this->query()->get(); + foreach ($trees as $id => $name) { + $this->tmpFiles[] = $this->createCsv($labels->get($id), $name); + } - foreach ($rows as $row) { - $csv->put([$row->name, $row->color, $row->count]); + } else { + $this->tmpFiles[] = $this->createCsv($labels); } - $csv->close(); - $this->executeScript('basic_report'); } @@ -67,8 +68,29 @@ protected function query() ->when($this->isRestricted(), function ($query) { return $query->whereNotIn('annotations.id', $this->getSkipIds()); }) - ->select(DB::raw('labels.name, labels.color, count(labels.id) as count')) + ->select(DB::raw('labels.name, labels.color, count(labels.id) as count, labels.label_tree_id')) ->groupBy('labels.id') ->orderBy('labels.id'); } + + /** + * Create a CSV file for a single plot of this report + * + * @param \Illuminate\Support\Collection $labels The labels/rows for the CSV + * @param string $title The title to put in the first row of the CSV + * @return CsvFile + */ + protected function createCsv($labels, $title = '') + { + $csv = CsvFile::makeTmp(); + $csv->put([$title]); + + foreach ($labels as $label) { + $csv->put([$label->name, $label->color, $label->count]); + } + + $csv->close(); + + return $csv; + } } diff --git a/src/Support/Reports/Transects/Annotations/CsvReport.php b/src/Support/Reports/Transects/Annotations/CsvReport.php index 471b4a692..704f817e6 100644 --- a/src/Support/Reports/Transects/Annotations/CsvReport.php +++ b/src/Support/Reports/Transects/Annotations/CsvReport.php @@ -3,6 +3,7 @@ namespace Dias\Modules\Export\Support\Reports\Transects\Annotations; use DB; +use Dias\LabelTree; use Dias\Modules\Export\Support\CsvFile; use Dias\Modules\Export\Support\Reports\MakesZipArchives; @@ -38,52 +39,26 @@ class CsvReport extends Report */ public function generateReport() { - $csv = CsvFile::makeTmp(); - $this->tmpFiles[] = $csv; - - // add column headers - $csv->put([ - 'annotation_label_id', - 'label_id', - 'label_name', - 'user_id', - 'firstname', - 'lastname', - 'image_id', - 'filename', - 'shape_id', - 'shape_name', - 'points', - 'attributes', - ]); - $rows = $this->query()->get(); + $toZip = []; + + if ($this->shouldSeparateLabelTrees()) { + $rows = $rows->groupBy('label_tree_id'); + $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); - // CHUNKING IS BROKEN SOMEHOW! - // $query->chunkById(500, function ($rows) use ($csv) { - foreach ($rows as $row) { - $csv->put([ - $row->annotation_label_id, - $row->label_id, - $this->expandLabelName($row->label_id), - $row->user_id, - $row->firstname, - $row->lastname, - $row->image_id, - $row->filename, - $row->shape_id, - $row->shape_name, - $row->points, - $row->attrs, - ]); + foreach ($trees as $id => $name) { + $csv = $this->createCsv($rows->get($id)); + $this->tmpFiles[] = $csv; + $toZip[$csv->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'csv'); } - // }, 'annotation_labels.id', 'annotation_label_id'); - $csv->close(); + } else { + $csv = $this->createCsv($rows); + $this->tmpFiles[] = $csv; + $toZip[$csv->getPath()] = $this->sanitizeFilename("{$this->transect->id}-{$this->transect->name}", 'csv'); + } - $this->makeZip([ - $csv->path => $this->sanitizeFilename("{$this->transect->id}-{$this->transect->name}", 'csv'), - ]); + $this->makeZip($toZip); } /** @@ -93,7 +68,7 @@ public function generateReport() */ protected function query() { - return DB::table('annotation_labels') + $query = DB::table('annotation_labels') ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') ->join('images', 'annotations.image_id', '=', 'images.id') ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') @@ -116,5 +91,59 @@ protected function query() return $query->whereNotIn('annotations.id', $this->getSkipIds()); }) ->orderBy('annotation_labels.id'); + + if ($this->shouldSeparateLabelTrees()) { + $query->join('labels', 'annotation_labels.label_id', '=', 'labels.id') + ->addSelect(['labels.label_tree_id']); + } + + return $query; + } + + /** + * Create a CSV file for this report + * + * @param \Illuminate\Support\Collection $rows The rows for the CSV + * @return CsvFile + */ + protected function createCsv($rows) + { + $csv = CsvFile::makeTmp(); + // column headers + $csv->put([ + 'annotation_label_id', + 'label_id', + 'label_name', + 'user_id', + 'firstname', + 'lastname', + 'image_id', + 'filename', + 'shape_id', + 'shape_name', + 'points', + 'attributes', + ]); + + foreach ($rows as $row) { + $csv->put([ + $row->annotation_label_id, + $row->label_id, + $this->expandLabelName($row->label_id), + $row->user_id, + $row->firstname, + $row->lastname, + $row->image_id, + $row->filename, + $row->shape_id, + $row->shape_name, + $row->points, + $row->attrs, + ]); + } + + $csv->close(); + + return $csv; } } diff --git a/src/Support/Reports/Transects/Annotations/ExtendedReport.php b/src/Support/Reports/Transects/Annotations/ExtendedReport.php index 64be51504..eede483e6 100644 --- a/src/Support/Reports/Transects/Annotations/ExtendedReport.php +++ b/src/Support/Reports/Transects/Annotations/ExtendedReport.php @@ -3,6 +3,7 @@ namespace Dias\Modules\Export\Support\Reports\Transects\Annotations; use DB; +use Dias\LabelTree; use Dias\Modules\Export\Support\CsvFile; class ExtendedReport extends Report @@ -35,25 +36,20 @@ class ExtendedReport extends Report */ public function generateReport() { - $csv = CsvFile::makeTmp(); - $this->tmpFiles[] = $csv; + $rows = $this->query()->get(); - $csv->put([$this->transect->name]); - $csv->put(['image_filename', 'label_name', 'annotation_count']); + if ($this->shouldSeparateLabelTrees()) { + $rows = $rows->groupBy('label_tree_id'); + $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); - $rows = $this->query()->get(); + foreach ($trees as $id => $name) { + $this->tmpFiles[] = $this->createCsv($rows->get($id), $name); + } - // DO NOT USE CHUNK BECAUSE IT DESTROYS groupBy! - foreach ($rows as $row) { - $csv->put([ - $row->filename, - $this->expandLabelName($row->label_id), - $row->count, - ]); + } else { + $this->tmpFiles[] = $this->createCsv($rows, $this->transect->name); } - $csv->close(); - $this->executeScript('extended_report'); } @@ -64,15 +60,51 @@ public function generateReport() */ protected function query() { - return DB::table('images') + $query = DB::table('images') ->join('annotations', 'annotations.image_id', '=', 'images.id') ->join('annotation_labels', 'annotation_labels.annotation_id', '=', 'annotations.id') - ->select(DB::raw('images.filename, annotation_labels.label_id, count(annotation_labels.label_id) as count')) - ->groupBy('annotation_labels.label_id', 'images.id') ->where('images.transect_id', $this->transect->id) ->when($this->isRestricted(), function ($query) { return $query->whereNotIn('annotations.id', $this->getSkipIds()); }) ->orderBy('images.filename'); + + if ($this->shouldSeparateLabelTrees()) { + $query->join('labels', 'labels.id', '=', 'annotation_labels.label_id') + ->select(DB::raw('images.filename, annotation_labels.label_id, count(annotation_labels.label_id) as count, labels.label_tree_id')) + ->groupBy('annotation_labels.label_id', 'images.id', 'labels.label_tree_id'); + } else { + $query->select(DB::raw('images.filename, annotation_labels.label_id, count(annotation_labels.label_id) as count')) + ->groupBy('annotation_labels.label_id', 'images.id'); + } + + return $query; } + + /** + * Create a CSV file for a single sheet of the spreadsheet of this report + * + * @param \Illuminate\Support\Collection $rows The rows for the CSV + * @param string $title The title to put in the first row of the CSV + * @return CsvFile + */ + protected function createCsv($rows, $title = '') + { + $csv = CsvFile::makeTmp(); + $csv->put([$title]); + $csv->put(['image_filename', 'label_name', 'annotation_count']); + + foreach ($rows as $row) { + $csv->put([ + $row->filename, + $this->expandLabelName($row->label_id), + $row->count, + ]); + } + + $csv->close(); + + return $csv; + } + } diff --git a/src/Support/Reports/Transects/Annotations/FullReport.php b/src/Support/Reports/Transects/Annotations/FullReport.php index bb95264b6..aa6c13f18 100644 --- a/src/Support/Reports/Transects/Annotations/FullReport.php +++ b/src/Support/Reports/Transects/Annotations/FullReport.php @@ -3,6 +3,7 @@ namespace Dias\Modules\Export\Support\Reports\Transects\Annotations; use DB; +use Dias\LabelTree; use Dias\Modules\Export\Support\CsvFile; class FullReport extends Report @@ -35,29 +36,19 @@ class FullReport extends Report */ public function generateReport() { - $csv = CsvFile::makeTmp(); - $this->tmpFiles[] = $csv; - - // put transect name to first line - $csv->put([$this->transect->name]); - $rows = $this->query()->get(); - // CHUNKING IS BROKEN SOMEHOW! - // $query->chunkById(500, function ($rows) use ($csv) { - foreach ($rows as $row) { - $csv->put([ - $row->filename, - $row->annotation_id, - $this->expandLabelName($row->label_id), - $row->shape_name, - $row->points, - $row->attrs - ]); + if ($this->shouldSeparateLabelTrees()) { + $rows = $rows->groupBy('label_tree_id'); + $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); + + foreach ($trees as $id => $name) { + $this->tmpFiles[] = $this->createCsv($rows->get($id), $name); } - // }, 'annotation_labels.id', 'annotation_labels_id'); - $csv->close(); + } else { + $this->tmpFiles[] = $this->createCsv($rows, $this->transect->name); + } $this->executeScript('full_report'); } @@ -69,12 +60,11 @@ public function generateReport() */ protected function query() { - return DB::table('annotation_labels') + $query = DB::table('annotation_labels') ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') ->join('images', 'annotations.image_id', '=', 'images.id') ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') ->select( - // 'annotation_labels.id as annotation_labels_id', // required for chunkById 'images.filename', 'annotations.id as annotation_id', 'annotation_labels.label_id', @@ -87,5 +77,40 @@ protected function query() return $query->whereNotIn('annotations.id', $this->getSkipIds()); }) ->orderBy('annotations.id'); + + if ($this->shouldSeparateLabelTrees()) { + $query->join('labels', 'annotation_labels.label_id', '=', 'labels.id') + ->addSelect('labels.label_tree_id'); + } + + return $query; + } + + /** + * Create a CSV file for a single sheet of the spreadsheet of this report + * + * @param \Illuminate\Support\Collection $rows The rows for the CSV + * @param string $title The title to put in the first row of the CSV + * @return CsvFile + */ + protected function createCsv($rows, $title = '') + { + $csv = CsvFile::makeTmp(); + $csv->put([$title]); + + foreach ($rows as $row) { + $csv->put([ + $row->filename, + $row->annotation_id, + $this->expandLabelName($row->label_id), + $row->shape_name, + $row->points, + $row->attrs + ]); + } + + $csv->close(); + + return $csv; } } diff --git a/src/Support/Reports/Transects/ImageLabels/BasicReport.php b/src/Support/Reports/Transects/ImageLabels/BasicReport.php index b17079eb8..fdd67bd24 100644 --- a/src/Support/Reports/Transects/ImageLabels/BasicReport.php +++ b/src/Support/Reports/Transects/ImageLabels/BasicReport.php @@ -3,6 +3,7 @@ namespace Dias\Modules\Export\Support\Reports\Transects\ImageLabels; use DB; +use Dias\LabelTree; use Dias\Modules\Export\Support\CsvFile; use Dias\Modules\Export\Support\Reports\Transects\Report; @@ -36,26 +37,20 @@ class BasicReport extends Report */ public function generateReport() { - $csv = CsvFile::makeTmp(); - $this->tmpFiles[] = $csv; + $rows = $this->query()->get(); - $csv->put([$this->transect->name]); - $csv->put(['image_id', 'image_filename', 'label_names']); + if ($this->shouldSeparateLabelTrees()) { + $rows = $rows->groupBy('label_tree_id'); + $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); - $rows = $this->query()->get()->groupBy('id'); + foreach ($trees as $id => $name) { + $this->tmpFiles[] = $this->createCsv($rows->get($id), $name); + } - foreach ($rows as $imageId => $row) { - $csv->put([ - $row[0]->id, - $row[0]->filename, - $row->map(function ($row) { - return $this->expandLabelName($row->label_id); - })->implode(', '), - ]); + } else { + $this->tmpFiles[] = $this->createCsv($rows, $this->transect->name); } - $csv->close(); - $this->executeScript('extended_report'); } @@ -66,10 +61,45 @@ public function generateReport() */ protected function query() { - return DB::table('image_labels') + $query = DB::table('image_labels') ->join('images', 'image_labels.image_id', '=', 'images.id') ->select('images.id', 'images.filename', 'image_labels.label_id') ->where('images.transect_id', $this->transect->id) ->orderBy('images.filename'); + + if ($this->shouldSeparateLabelTrees()) { + $query->join('labels', 'labels.id', '=', 'image_labels.label_id') + ->addSelect('labels.label_tree_id'); + } + + return $query; + } + + /** + * Create a CSV file for a single sheet of the spreadsheet of this report + * + * @param \Illuminate\Support\Collection $rows The rows for the CSV + * @param string $title The title to put in the first row of the CSV + * @return CsvFile + */ + protected function createCsv($rows, $title = '') + { + $csv = CsvFile::makeTmp(); + $csv->put([$title]); + $csv->put(['image_id', 'image_filename', 'label_names']); + + foreach ($rows->groupBy('id') as $row) { + $csv->put([ + $row[0]->id, + $row[0]->filename, + $row->map(function ($row) { + return $this->expandLabelName($row->label_id); + })->implode(', '), + ]); + } + + $csv->close(); + + return $csv; } } diff --git a/src/Support/Reports/Transects/ImageLabels/CsvReport.php b/src/Support/Reports/Transects/ImageLabels/CsvReport.php index 08c7a148f..d6c362d89 100644 --- a/src/Support/Reports/Transects/ImageLabels/CsvReport.php +++ b/src/Support/Reports/Transects/ImageLabels/CsvReport.php @@ -3,6 +3,7 @@ namespace Dias\Modules\Export\Support\Reports\Transects\ImageLabels; use DB; +use Dias\LabelTree; use Dias\Modules\Export\Support\CsvFile; use Dias\Modules\Export\Support\Reports\Transects\Report; use Dias\Modules\Export\Support\Reports\MakesZipArchives; @@ -39,44 +40,26 @@ class CsvReport extends Report */ public function generateReport() { - $csv = CsvFile::makeTmp(); - $this->tmpFiles[] = $csv; - - // add column headers - $csv->put([ - 'image_label_id', - 'image_id', - 'filename', - 'user_id', - 'firstname', - 'lastname', - 'label_id', - 'label_name', - ]); - $rows = $this->query()->get(); + $toZip = []; - // CHUNKING IS BROKEN SOMEHOW! - // $query->chunkById(500, function ($rows) use ($csv) { - foreach ($rows as $row) { - $csv->put([ - $row->image_label_id, - $row->image_id, - $row->filename, - $row->user_id, - $row->firstname, - $row->lastname, - $row->label_id, - $this->expandLabelName($row->label_id), - ]); + if ($this->shouldSeparateLabelTrees()) { + $rows = $rows->groupBy('label_tree_id'); + $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); + + foreach ($trees as $id => $name) { + $csv = $this->createCsv($rows->get($id)); + $this->tmpFiles[] = $csv; + $toZip[$csv->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'csv'); } - // }, 'image_labels.id', 'image_label_id'); - $csv->close(); + } else { + $csv = $this->createCsv($rows); + $this->tmpFiles[] = $csv; + $toZip[$csv->getPath()] = $this->sanitizeFilename("{$this->transect->id}-{$this->transect->name}", 'csv'); + } - $this->makeZip([ - $csv->path => $this->sanitizeFilename("{$this->transect->id}-{$this->transect->name}", 'csv'), - ]); + $this->makeZip($toZip); } /** @@ -86,7 +69,7 @@ public function generateReport() */ protected function query() { - return DB::table('image_labels') + $query = DB::table('image_labels') ->join('images', 'image_labels.image_id', '=', 'images.id') ->join('users', 'image_labels.user_id', '=', 'users.id') ->select([ @@ -100,5 +83,51 @@ protected function query() ]) ->where('images.transect_id', $this->transect->id) ->orderBy('images.filename'); + + if ($this->shouldSeparateLabelTrees()) { + $query->join('labels', 'labels.id', '=', 'image_labels.label_id') + ->addSelect('labels.label_tree_id'); + } + + return $query; + } + + /** + * Create a CSV file for this report + * + * @param \Illuminate\Support\Collection $rows The rows for the CSV + * @return CsvFile + */ + protected function createCsv($rows) + { + $csv = CsvFile::makeTmp(); + // column headers + $csv->put([ + 'image_label_id', + 'image_id', + 'filename', + 'user_id', + 'firstname', + 'lastname', + 'label_id', + 'label_name', + ]); + + foreach ($rows as $row) { + $csv->put([ + $row->image_label_id, + $row->image_id, + $row->filename, + $row->user_id, + $row->firstname, + $row->lastname, + $row->label_id, + $this->expandLabelName($row->label_id), + ]); + } + + $csv->close(); + + return $csv; } } diff --git a/src/Support/Reports/Transects/Report.php b/src/Support/Reports/Transects/Report.php index 3e791855a..77ff4e273 100644 --- a/src/Support/Reports/Transects/Report.php +++ b/src/Support/Reports/Transects/Report.php @@ -101,7 +101,7 @@ protected function executeScript($name) $script = config("export.scripts.{$name}"); $csvs = implode(' ', array_map(function ($csv) { - return $csv->path; + return $csv->getPath(); }, $this->tmpFiles)); $exec = App::make(Exec::class, [ diff --git a/src/resources/scripts/basic_report.py b/src/resources/scripts/basic_report.py index 3b328420e..0b8886f87 100755 --- a/src/resources/scripts/basic_report.py +++ b/src/resources/scripts/basic_report.py @@ -12,8 +12,7 @@ title = sys.argv[1] target_file = sys.argv[2] -transect_csvs = sys.argv[3:] - +data_csvs = sys.argv[3:] def TitleSlide(text): fig = plt.figure(figsize=(10, 4)) @@ -37,11 +36,11 @@ def TitleSlide(text): pdf.savefig(fig) width = 1. -for path in transect_csvs: +for path in data_csvs: f = open(path, 'r') - transect_csv = csv.reader(f) - transect_name = transect_csv.next()[0] - rows = np.array(list(transect_csv)) + data_csv = csv.reader(f) + plot_title = data_csv.next() + rows = np.array(list(data_csv)) f.close() if rows.shape[0] == 0: continue @@ -59,8 +58,9 @@ def TitleSlide(text): ax.bar(ind, counts, width, color=np.core.defchararray.add(hashes, rows[:, 1]), log=counts.max() > 100) ax.set_xticks(ind + width / 2) - ax.set_xticklabels(rows[:, 0], rotation=45, fontsize=8) - plt.title(transect_name.decode('UTF-8')) + ax.set_xticklabels(rows[:, 0], rotation=45, fontsize=8, ha = 'right') + if plot_title: + plt.title(plot_title[0].decode('UTF-8')) plt.xlim([0, ind.size]) pdf.savefig() diff --git a/src/resources/scripts/extended_report.py b/src/resources/scripts/extended_report.py index 5a1adfbec..e2678c0ea 100755 --- a/src/resources/scripts/extended_report.py +++ b/src/resources/scripts/extended_report.py @@ -28,6 +28,6 @@ ws.set_row_style(2, Style(font=Font(bold=True))) if not numSheets: - ws = workbook.new_sheet("No labels found") + ws = workbook.new_sheet("No labels found", data=[['No labels found']]) workbook.save(target_file) diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index 9c0d5348c..84cd9a17d 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -69,30 +69,30 @@
    -
    -
    +
    +
    -
    +
    -
    - Annotations belonging to different label trees will be separated to different files/sheets. +
    + Annotations that are outside of the export area will be discarded for this report.
    -
    -
    +
    +
    -
    +
    -
    - Annotations that are outside of the export area will be discarded for this report. +
    + Annotations belonging to different label trees will be separated to different files/sheets.
    @@ -104,7 +104,7 @@

    - ProTip: You can request reports for individual transects from the transect overview page. + ProTip: You can request reports for individual transects (and with more options) from the transect overview page.

    diff --git a/src/resources/views/transectReports.blade.php b/src/resources/views/transectReports.blade.php index 919266199..6c421295f 100644 --- a/src/resources/views/transectReports.blade.php +++ b/src/resources/views/transectReports.blade.php @@ -86,30 +86,30 @@ Only annotations that were created during the selected annotation session will be included in the report.
    -
    -
    +
    +
    -
    +
    -
    - Annotations belonging to different label trees will be separated to different files/sheets. +
    + Annotations that are outside of the export area will be discarded for this report.
    -
    -
    +
    +
    -
    +
    -
    - Annotations that are outside of the export area will be discarded for this report. +
    + Annotations belonging to different label trees will be separated to different files/sheets.
    diff --git a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsBasicReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsBasicReportTest.php index 3cc24dc56..d30c19b02 100644 --- a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsBasicReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsBasicReportTest.php @@ -20,7 +20,6 @@ public function testProperties() public function testGenerateReport() { $transect = TransectTest::create(); - $user = UserTest::create(); $al = AnnotationLabelTest::create(); $al->annotation->image->transect_id = $transect->id; @@ -38,11 +37,14 @@ public function testGenerateReport() ->andReturn(false); $mock = Mockery::mock(); - $mock->path = 'abc'; + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); $mock->shouldReceive('put') ->once() - ->with([$transect->name]); + ->with(['']); $mock->shouldReceive('put') ->once() @@ -67,4 +69,68 @@ public function testGenerateReport() with(new BasicReport($transect))->generateReport(); } + + public function testGenerateReportSeparateLabelTrees() + { + // have different label trees + $label1 = LabelTest::create(); + $label2 = LabelTest::create(); + + $image = ImageTest::create(); + + $annotation = AnnotationTest::create([ + 'image_id' => $image->id, + ]); + + $al1 = AnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'label_id' => $label1->id, + ]); + $al2 = AnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'label_id' => $label2->id, + ]); + + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc'); + + $mock->shouldReceive('put') + ->once() + ->with([$label1->tree->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$label1->name, $label1->color, 1]); + + $mock->shouldReceive('put') + ->once() + ->with([$label2->tree->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$label2->name, $label2->color, 1]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + $mock->code = 0; + App::singleton(Exec::class, function () use ($mock) { + return $mock; + }); + + $report = new BasicReport($image->transect, ['separateLabelTrees' => true]); + $report->generateReport(); + } } diff --git a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsCsvReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsCsvReportTest.php index 521735105..74f3b8d12 100644 --- a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsCsvReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsCsvReportTest.php @@ -5,6 +5,21 @@ class ExportModuleSupportReportsTransectsAnnotationsCsvReportTest extends TestCase { + private $columns = [ + 'annotation_label_id', + 'label_id', + 'label_name', + 'user_id', + 'firstname', + 'lastname', + 'image_id', + 'filename', + 'shape_id', + 'shape_name', + 'points', + 'attributes', + ]; + public function testProperties() { $report = new CsvReport(TransectTest::make()); @@ -39,24 +54,14 @@ public function testGenerateReport() ->andReturn(false); $mock = Mockery::mock(); - $mock->path = 'abc'; + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); $mock->shouldReceive('put') ->once() - ->with([ - 'annotation_label_id', - 'label_id', - 'label_name', - 'user_id', - 'firstname', - 'lastname', - 'image_id', - 'filename', - 'shape_id', - 'shape_name', - 'points', - 'attributes', - ]); + ->with($this->columns); $mock->shouldReceive('put') ->once() @@ -100,4 +105,105 @@ public function testGenerateReport() with(new CsvReport($transect))->generateReport(); } + + public function testGenerateReportSeparateLabelTrees() + { + $tree1 = LabelTreeTest::create(['name' => 'tree1']); + $tree2 = LabelTreeTest::create(['name' => 'tree2']); + + $label1 = LabelTest::create(['label_tree_id' => $tree1->id]); + $label2 = LabelTest::create(['label_tree_id' => $tree2->id]); + + $image = ImageTest::create(); + + $annotation = AnnotationTest::create([ + 'image_id' => $image->id, + ]); + + $al1 = AnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'label_id' => $label1->id, + ]); + $al2 = AnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'label_id' => $label2->id, + ]); + + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $mock->shouldReceive('put') + ->twice() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([ + $al1->id, + $label1->id, + $label1->name, + $al1->user_id, + $al1->user->firstname, + $al1->user->lastname, + $annotation->image_id, + $annotation->image->filename, + $annotation->shape->id, + $annotation->shape->name, + json_encode($annotation->points), + null, + ]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $al2->id, + $label2->id, + $label2->name, + $al2->user_id, + $al2->user->firstname, + $al2->user->lastname, + $annotation->image_id, + $annotation->image->filename, + $annotation->shape->id, + $annotation->shape->name, + json_encode($annotation->points), + null, + ]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$tree1->id}-{$tree1->name}.csv"); + + $mock->shouldReceive('addFile') + ->once() + ->with('def', "{$tree2->id}-{$tree2->name}.csv"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $report = new CsvReport($image->transect, ['separateLabelTrees' => true]); + $report->generateReport(); + } } diff --git a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsExtendedReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsExtendedReportTest.php index 9b1757bd8..8cdf76e06 100644 --- a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsExtendedReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsExtendedReportTest.php @@ -8,6 +8,8 @@ class ExportModuleSupportReportstransectsAnnotationsExtendedReportTest extends TestCase { + private $columns = ['image_filename', 'label_name', 'annotation_count']; + public function testProperties() { $report = new ExtendedReport(TransectTest::make()); @@ -19,7 +21,6 @@ public function testProperties() public function testGenerateReport() { $transect = TransectTest::create(); - $user = UserTest::create(); $root = LabelTest::create(); $child = LabelTest::create([ @@ -46,7 +47,10 @@ public function testGenerateReport() ->andReturn(false); $mock = Mockery::mock(); - $mock->path = 'abc'; + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); $mock->shouldReceive('put') ->once() @@ -54,7 +58,7 @@ public function testGenerateReport() $mock->shouldReceive('put') ->once() - ->with(['image_filename', 'label_name', 'annotation_count']); + ->with($this->columns); $mock->shouldReceive('put') ->once() @@ -79,4 +83,70 @@ public function testGenerateReport() with(new ExtendedReport($transect))->generateReport(); } + + public function testGenerateReportSeparateLabelTrees() + { + $label1 = LabelTest::create(); + $label2 = LabelTest::create(); + + $image = ImageTest::create(); + + $annotation = AnnotationTest::create([ + 'image_id' => $image->id, + ]); + + $al1 = AnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'label_id' => $label1->id, + ]); + $al2 = AnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'label_id' => $label2->id, + ]); + + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $mock->shouldReceive('put') + ->once() + ->with([$label1->tree->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$label2->tree->name]); + + $mock->shouldReceive('put') + ->twice() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([$image->filename, $label1->name, 1]); + + $mock->shouldReceive('put') + ->once() + ->with([$image->filename, $label2->name, 1]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + $mock->code = 0; + App::singleton(Exec::class, function () use ($mock) { + return $mock; + }); + + $report = new ExtendedReport($image->transect, ['separateLabelTrees' => true]); + $report->generateReport(); + } } diff --git a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php index c8aa99d93..fce217207 100644 --- a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php @@ -19,7 +19,6 @@ public function testProperties() public function testGenerateReport() { $transect = TransectTest::create(); - $user = UserTest::create(); $root = LabelTest::create(); $child = LabelTest::create([ @@ -40,7 +39,10 @@ public function testGenerateReport() ->andReturn(false); $mock = Mockery::mock(); - $mock->path = 'abc'; + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); $mock->shouldReceive('put') ->once() @@ -72,4 +74,81 @@ public function testGenerateReport() with(new FullReport($transect))->generateReport(); } + + public function testGenerateReportSeparateLabelTrees() + { + $label1 = LabelTest::create(); + $label2 = LabelTest::create(); + + $image = ImageTest::create(); + + $annotation = AnnotationTest::create([ + 'image_id' => $image->id, + ]); + + $al1 = AnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'label_id' => $label1->id, + ]); + $al2 = AnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'label_id' => $label2->id, + ]); + + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $mock->shouldReceive('put') + ->once() + ->with([$label1->tree->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$label2->tree->name]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $image->filename, + $annotation->id, + $label1->name, + $annotation->shape->name, + json_encode($annotation->points), + null, + ]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $image->filename, + $annotation->id, + $label2->name, + $annotation->shape->name, + json_encode($annotation->points), + null, + ]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + $mock->code = 0; + App::singleton(Exec::class, function () use ($mock) { + return $mock; + }); + + $report = new FullReport($image->transect, ['separateLabelTrees' => true]); + $report->generateReport(); + } + } diff --git a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsReportTest.php index 181e9bf9d..6621069e6 100644 --- a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsReportTest.php @@ -12,7 +12,6 @@ class ExportModuleSupportReportsTransectsAnnotationsReportTest extends TestCase public function testGenerateReportRestrict() { $transect = Transect::convert(TransectTest::create()); - $user = UserTest::create(); $transect->exportArea = [100, 100, 200, 200]; $transect->save(); diff --git a/tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsBasicReportTest.php b/tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsBasicReportTest.php index e9b713181..1bea58e89 100644 --- a/tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsBasicReportTest.php +++ b/tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsBasicReportTest.php @@ -6,6 +6,8 @@ class ExportModuleSupportReportsTransectsImageLabelsBasicReportTest extends TestCase { + private $columns = ['image_id', 'image_filename', 'label_names']; + public function testProperties() { $report = new BasicReport(TransectTest::make()); @@ -17,7 +19,6 @@ public function testProperties() public function testGenerateReport() { $transect = TransectTest::create(); - $user = UserTest::create(); $il = ImageLabelTest::create([ 'image_id' => ImageTest::create([ @@ -50,7 +51,10 @@ public function testGenerateReport() ->andReturn(false); $mock = Mockery::mock(); - $mock->path = 'abc'; + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); $mock->shouldReceive('put') ->once() @@ -58,7 +62,7 @@ public function testGenerateReport() $mock->shouldReceive('put') ->once() - ->with(['image_id', 'image_filename', 'label_names']); + ->with($this->columns); $mock->shouldReceive('put') ->once() @@ -83,4 +87,66 @@ public function testGenerateReport() with(new BasicReport($transect))->generateReport(); } + + public function testGenerateReportSeparateLabelTrees() + { + $label1 = LabelTest::create(); + $label2 = LabelTest::create(); + + $image = ImageTest::create(); + + ImageLabelTest::create([ + 'image_id' => $image->id, + 'label_id' => $label1->id, + ]); + ImageLabelTest::create([ + 'image_id' => $image->id, + 'label_id' => $label2->id, + ]); + + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $mock->shouldReceive('put') + ->once() + ->with([$label1->tree->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$label2->tree->name]); + + $mock->shouldReceive('put') + ->twice() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([$image->id, $image->filename, $label1->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$image->id, $image->filename, $label2->name]);; + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + $mock->code = 0; + App::singleton(Exec::class, function () use ($mock) { + return $mock; + }); + + $report = new BasicReport($image->transect, ['separateLabelTrees' => true]); + $report->generateReport(); + } } diff --git a/tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsCsvReportTest.php b/tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsCsvReportTest.php index e02ab271a..faaed9cab 100644 --- a/tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsCsvReportTest.php +++ b/tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsCsvReportTest.php @@ -6,6 +6,17 @@ class ExportModuleSupportReportsTransectsImageLabelsCsvReportTest extends TestCase { + private $columns = [ + 'image_label_id', + 'image_id', + 'filename', + 'user_id', + 'firstname', + 'lastname', + 'label_id', + 'label_name', + ]; + public function testProperties() { $report = new CsvReport(TransectTest::make()); @@ -17,7 +28,6 @@ public function testProperties() public function testGenerateReport() { $transect = TransectTest::create(); - $user = UserTest::create(); $root = LabelTest::create(); $child = LabelTest::create([ @@ -39,20 +49,14 @@ public function testGenerateReport() ->andReturn(false); $mock = Mockery::mock(); - $mock->path = 'abc'; + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); $mock->shouldReceive('put') ->once() - ->with([ - 'image_label_id', - 'image_id', - 'filename', - 'user_id', - 'firstname', - 'lastname', - 'label_id', - 'label_name', - ]); + ->with($this->columns); $mock->shouldReceive('put') ->once() @@ -89,4 +93,93 @@ public function testGenerateReport() with(new CsvReport($transect))->generateReport(); } + + public function testGenerateReportSeparateLabelTrees() + { + $tree1 = LabelTreeTest::create(['name' => 'tree1']); + $tree2 = LabelTreeTest::create(['name' => 'tree2']); + + $label1 = LabelTest::create(['label_tree_id' => $tree1->id]); + $label2 = LabelTest::create(['label_tree_id' => $tree2->id]); + + $image = ImageTest::create(); + + $il1 = ImageLabelTest::create([ + 'image_id' => $image->id, + 'label_id' => $label1->id, + ]); + $il2 = ImageLabelTest::create([ + 'image_id' => $image->id, + 'label_id' => $label2->id, + ]); + + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $mock->shouldReceive('put') + ->twice() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([ + $il1->id, + $image->id, + $image->filename, + $il1->user_id, + $il1->user->firstname, + $il1->user->lastname, + $label1->id, + $label1->name, + ]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $il2->id, + $image->id, + $image->filename, + $il2->user_id, + $il2->user->firstname, + $il2->user->lastname, + $label2->id, + $label2->name, + ]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$tree1->id}-{$tree1->name}.csv"); + + $mock->shouldReceive('addFile') + ->once() + ->with('def', "{$tree2->id}-{$tree2->name}.csv"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $report = new CsvReport($image->transect, ['separateLabelTrees' => true]); + $report->generateReport(); + } } From 4be63d74fd866fbb1980edd4ee5eb9b031a89159 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 5 Oct 2016 10:42:14 +0200 Subject: [PATCH 061/407] Add restricting transect annotation reports to annotation session References BiodataMiningGroup/dias-transects#12 --- .../Annotations/BasicReportController.php | 3 +- .../Annotations/CsvReportController.php | 3 +- .../Annotations/ExtendedReportController.php | 3 +- .../Annotations/FullReportController.php | 3 +- .../ImageLabels/BasicReportController.php | 3 +- .../ImageLabels/CsvReportController.php | 3 +- .../Annotations/BasicReportController.php | 4 +- .../Annotations/CsvReportController.php | 4 +- .../Annotations/ExtendedReportController.php | 4 +- .../Annotations/FullReportController.php | 4 +- .../ImageLabels/BasicReportController.php | 3 +- .../ImageLabels/CsvReportController.php | 3 +- .../Views/TransectReportsController.php | 3 +- .../Reports/Projects/Annotations/Report.php | 8 +- .../Transects/Annotations/BasicReport.php | 5 +- .../Transects/Annotations/CsvReport.php | 5 +- .../Transects/Annotations/ExtendedReport.php | 5 +- .../Transects/Annotations/FullReport.php | 5 +- .../Reports/Transects/Annotations/Report.php | 97 ++++++++++++++++++- ...tReportsTransectsAnnotationsReportTest.php | 73 ++++++++++++-- 20 files changed, 201 insertions(+), 40 deletions(-) diff --git a/src/Http/Controllers/Api/Projects/Annotations/BasicReportController.php b/src/Http/Controllers/Api/Projects/Annotations/BasicReportController.php index 1d2758d39..f216855e4 100644 --- a/src/Http/Controllers/Api/Projects/Annotations/BasicReportController.php +++ b/src/Http/Controllers/Api/Projects/Annotations/BasicReportController.php @@ -18,7 +18,8 @@ class BasicReportController extends ProjectReportController * @api {post} projects/:id/reports/annotations/basic Generate a new basic annotation report * @apiGroup Projects * @apiName GenerateBasicProjectAnnotationReport - * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the individual transects of the project. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the individual transects of the project. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different plots for each transect. * @apiPermission projectMember * * @apiParam {Number} id The project ID. diff --git a/src/Http/Controllers/Api/Projects/Annotations/CsvReportController.php b/src/Http/Controllers/Api/Projects/Annotations/CsvReportController.php index fe25d40f4..b70291444 100644 --- a/src/Http/Controllers/Api/Projects/Annotations/CsvReportController.php +++ b/src/Http/Controllers/Api/Projects/Annotations/CsvReportController.php @@ -18,7 +18,8 @@ class CsvReportController extends ProjectReportController * @api {post} projects/:id/reports/annotations/csv Generate a new csv annotation report * @apiGroup Projects * @apiName GenerateCsvProjectAnnotationReport - * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the individual transects of the project. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the individual transects of the project. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different CSV files for each transect. * @apiPermission projectMember * * @apiParam {Number} id The project ID. diff --git a/src/Http/Controllers/Api/Projects/Annotations/ExtendedReportController.php b/src/Http/Controllers/Api/Projects/Annotations/ExtendedReportController.php index c73917f4c..a68dfba32 100644 --- a/src/Http/Controllers/Api/Projects/Annotations/ExtendedReportController.php +++ b/src/Http/Controllers/Api/Projects/Annotations/ExtendedReportController.php @@ -18,7 +18,8 @@ class ExtendedReportController extends ProjectReportController * @api {post} projects/:id/reports/annotations/extended Generate a new extended annotation report * @apiGroup Projects * @apiName GenerateExtendedProjectAnnotationReport - * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the individual transects of the project. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the individual transects of the project. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet for each transect. * @apiPermission projectMember * * @apiParam {Number} id The project ID. diff --git a/src/Http/Controllers/Api/Projects/Annotations/FullReportController.php b/src/Http/Controllers/Api/Projects/Annotations/FullReportController.php index 2ca472c2b..d1e36e47b 100644 --- a/src/Http/Controllers/Api/Projects/Annotations/FullReportController.php +++ b/src/Http/Controllers/Api/Projects/Annotations/FullReportController.php @@ -18,7 +18,8 @@ class FullReportController extends ProjectReportController * @api {post} projects/:id/reports/annotations/full Generate a new full annotation report * @apiGroup Projects * @apiName GenerateFullProjectAnnotationReport - * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the individual transects of the project. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the individual transects of the project. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet for each transect. * @apiPermission projectMember * * @apiParam {Number} id The project ID. diff --git a/src/Http/Controllers/Api/Projects/ImageLabels/BasicReportController.php b/src/Http/Controllers/Api/Projects/ImageLabels/BasicReportController.php index d35f92dd2..7ce259947 100644 --- a/src/Http/Controllers/Api/Projects/ImageLabels/BasicReportController.php +++ b/src/Http/Controllers/Api/Projects/ImageLabels/BasicReportController.php @@ -18,7 +18,8 @@ class BasicReportController extends ProjectReportController * @api {post} projects/:id/reports/image-labels/basic Generate a new basic image label report * @apiGroup Projects * @apiName GenerateBasicTransectImageLabelReport - * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate image labels of different label trees to different sheets of the spreadsheet for each transect. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. diff --git a/src/Http/Controllers/Api/Projects/ImageLabels/CsvReportController.php b/src/Http/Controllers/Api/Projects/ImageLabels/CsvReportController.php index 500169161..0eb6f4041 100644 --- a/src/Http/Controllers/Api/Projects/ImageLabels/CsvReportController.php +++ b/src/Http/Controllers/Api/Projects/ImageLabels/CsvReportController.php @@ -18,7 +18,8 @@ class CsvReportController extends ProjectReportController * @api {post} projects/:id/reports/image-labels/csv Generate a new csv image label report * @apiGroup Projects * @apiName GenerateCsvTransectImageLabelReport - * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate image labels of different label trees to different CSV files for each transect. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. diff --git a/src/Http/Controllers/Api/Transects/Annotations/BasicReportController.php b/src/Http/Controllers/Api/Transects/Annotations/BasicReportController.php index 17caf10ac..58d0a75ec 100644 --- a/src/Http/Controllers/Api/Transects/Annotations/BasicReportController.php +++ b/src/Http/Controllers/Api/Transects/Annotations/BasicReportController.php @@ -18,7 +18,9 @@ class BasicReportController extends TransectReportController * @api {post} transects/:id/reports/annotations/basic Generate a new basic annotation report * @apiGroup Transects * @apiName GenerateBasicTransectAnnotationReport - * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different plots. + * @apiParam (Optional arguments) {Number} annotationSession ID of an annotation session of the transect. If given, only annotations belonging to the annotation session are included in the report. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. diff --git a/src/Http/Controllers/Api/Transects/Annotations/CsvReportController.php b/src/Http/Controllers/Api/Transects/Annotations/CsvReportController.php index 2c1e66a39..b9c6f2cf9 100644 --- a/src/Http/Controllers/Api/Transects/Annotations/CsvReportController.php +++ b/src/Http/Controllers/Api/Transects/Annotations/CsvReportController.php @@ -18,7 +18,9 @@ class CsvReportController extends TransectReportController * @api {post} transects/:id/reports/annotations/csv Generate a new csv annotation report * @apiGroup Transects * @apiName GenerateCsvTransectAnnotationReport - * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different CSV files. + * @apiParam (Optional arguments) {Number} annotationSession ID of an annotation session of the transect. If given, only annotations belonging to the annotation session are included in the report. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. diff --git a/src/Http/Controllers/Api/Transects/Annotations/ExtendedReportController.php b/src/Http/Controllers/Api/Transects/Annotations/ExtendedReportController.php index ff23ae8fa..547b56dda 100644 --- a/src/Http/Controllers/Api/Transects/Annotations/ExtendedReportController.php +++ b/src/Http/Controllers/Api/Transects/Annotations/ExtendedReportController.php @@ -18,7 +18,9 @@ class ExtendedReportController extends TransectReportController * @api {post} transects/:id/reports/annotations/extended Generate a new extended annotation report * @apiGroup Transects * @apiName GenerateExtendedTransectAnnotationReport - * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet. + * @apiParam (Optional arguments) {Number} annotationSession ID of an annotation session of the transect. If given, only annotations belonging to the annotation session are included in the report. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. diff --git a/src/Http/Controllers/Api/Transects/Annotations/FullReportController.php b/src/Http/Controllers/Api/Transects/Annotations/FullReportController.php index cf327b804..b274bcb46 100644 --- a/src/Http/Controllers/Api/Transects/Annotations/FullReportController.php +++ b/src/Http/Controllers/Api/Transects/Annotations/FullReportController.php @@ -18,7 +18,9 @@ class FullReportController extends TransectReportController * @api {post} transects/:id/reports/annotations/full Generate a new full annotation report * @apiGroup Transects * @apiName GenerateFullTransectAnnotationReport - * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet. + * @apiParam (Optional arguments) {Number} annotationSession ID of an annotation session of the transect. If given, only annotations belonging to the annotation session are included in the report. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. diff --git a/src/Http/Controllers/Api/Transects/ImageLabels/BasicReportController.php b/src/Http/Controllers/Api/Transects/ImageLabels/BasicReportController.php index 8951d3c17..d40e48708 100644 --- a/src/Http/Controllers/Api/Transects/ImageLabels/BasicReportController.php +++ b/src/Http/Controllers/Api/Transects/ImageLabels/BasicReportController.php @@ -18,7 +18,8 @@ class BasicReportController extends TransectReportController * @api {post} transects/:id/reports/image-labels/basic Generate a new basic image label report * @apiGroup Transects * @apiName GenerateBasicTransectImageLabelReport - * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate image labels of different label trees to different sheets of the spreadsheet. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. diff --git a/src/Http/Controllers/Api/Transects/ImageLabels/CsvReportController.php b/src/Http/Controllers/Api/Transects/ImageLabels/CsvReportController.php index 330773e1e..a0dfa352a 100644 --- a/src/Http/Controllers/Api/Transects/ImageLabels/CsvReportController.php +++ b/src/Http/Controllers/Api/Transects/ImageLabels/CsvReportController.php @@ -18,7 +18,8 @@ class CsvReportController extends TransectReportController * @api {post} transects/:id/reports/image-labels/csv Generate a new csv image label report * @apiGroup Transects * @apiName GenerateCsvTransectImageLabelReport - * @apiParam (Optional arguments) {Boolean} exportArea If `1`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the transect. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate image labels of different label trees to different CSV files. * @apiPermission projectMember * * @apiParam {Number} id The transect ID. diff --git a/src/Http/Controllers/Views/TransectReportsController.php b/src/Http/Controllers/Views/TransectReportsController.php index 403f87c85..f45098fa4 100644 --- a/src/Http/Controllers/Views/TransectReportsController.php +++ b/src/Http/Controllers/Views/TransectReportsController.php @@ -17,11 +17,12 @@ public function show($id) { $transect = Transect::findOrFail($id); $this->authorize('access', $transect); + $sessions = $transect->annotationSessions()->orderBy('starts_at', 'desc')->get(); return view('export::transectReports', [ 'projects' => $transect->projects, 'transect' => $transect, - 'annotationSessions' => $transect->annotationSessions, + 'annotationSessions' => $sessions, ]); } } diff --git a/src/Support/Reports/Projects/Annotations/Report.php b/src/Support/Reports/Projects/Annotations/Report.php index 5b56f0574..780963424 100644 --- a/src/Support/Reports/Projects/Annotations/Report.php +++ b/src/Support/Reports/Projects/Annotations/Report.php @@ -15,7 +15,7 @@ class Report extends BaseReport */ public function getName() { - if ($this->isRestricted()) { + if ($this->isRestrictedToExportArea()) { return "{$this->name} (restricted to export area)"; } @@ -29,8 +29,8 @@ public function getName() */ public function getFilename() { - if ($this->isRestricted()) { - return "{$this->filename}_restricted"; + if ($this->isRestrictedToExportArea()) { + return "{$this->filename}_restricted_to_export_area"; } return $this->filename; @@ -41,7 +41,7 @@ public function getFilename() * * @return boolean */ - protected function isRestricted() + protected function isRestrictedToExportArea() { return $this->options->get('exportArea', false); } diff --git a/src/Support/Reports/Transects/Annotations/BasicReport.php b/src/Support/Reports/Transects/Annotations/BasicReport.php index b31debffe..a1f95f173 100644 --- a/src/Support/Reports/Transects/Annotations/BasicReport.php +++ b/src/Support/Reports/Transects/Annotations/BasicReport.php @@ -65,9 +65,8 @@ protected function query() ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') ->join('images', 'annotations.image_id', '=', 'images.id') ->where('images.transect_id', $this->transect->id) - ->when($this->isRestricted(), function ($query) { - return $query->whereNotIn('annotations.id', $this->getSkipIds()); - }) + ->when($this->isRestrictedToExportArea(), [$this, 'restrictToExportAreaQuery']) + ->when($this->isRestrictedToAnnotationSession(), [$this, 'restrictToAnnotationSessionQuery']) ->select(DB::raw('labels.name, labels.color, count(labels.id) as count, labels.label_tree_id')) ->groupBy('labels.id') ->orderBy('labels.id'); diff --git a/src/Support/Reports/Transects/Annotations/CsvReport.php b/src/Support/Reports/Transects/Annotations/CsvReport.php index 704f817e6..da36ad91b 100644 --- a/src/Support/Reports/Transects/Annotations/CsvReport.php +++ b/src/Support/Reports/Transects/Annotations/CsvReport.php @@ -87,9 +87,8 @@ protected function query() 'images.attrs', ]) ->where('images.transect_id', $this->transect->id) - ->when($this->isRestricted(), function ($query) { - return $query->whereNotIn('annotations.id', $this->getSkipIds()); - }) + ->when($this->isRestrictedToExportArea(), [$this, 'restrictToExportAreaQuery']) + ->when($this->isRestrictedToAnnotationSession(), [$this, 'restrictToAnnotationSessionQuery']) ->orderBy('annotation_labels.id'); if ($this->shouldSeparateLabelTrees()) { diff --git a/src/Support/Reports/Transects/Annotations/ExtendedReport.php b/src/Support/Reports/Transects/Annotations/ExtendedReport.php index eede483e6..f54058d60 100644 --- a/src/Support/Reports/Transects/Annotations/ExtendedReport.php +++ b/src/Support/Reports/Transects/Annotations/ExtendedReport.php @@ -64,9 +64,8 @@ protected function query() ->join('annotations', 'annotations.image_id', '=', 'images.id') ->join('annotation_labels', 'annotation_labels.annotation_id', '=', 'annotations.id') ->where('images.transect_id', $this->transect->id) - ->when($this->isRestricted(), function ($query) { - return $query->whereNotIn('annotations.id', $this->getSkipIds()); - }) + ->when($this->isRestrictedToExportArea(), [$this, 'restrictToExportAreaQuery']) + ->when($this->isRestrictedToAnnotationSession(), [$this, 'restrictToAnnotationSessionQuery']) ->orderBy('images.filename'); if ($this->shouldSeparateLabelTrees()) { diff --git a/src/Support/Reports/Transects/Annotations/FullReport.php b/src/Support/Reports/Transects/Annotations/FullReport.php index aa6c13f18..d372ebf2c 100644 --- a/src/Support/Reports/Transects/Annotations/FullReport.php +++ b/src/Support/Reports/Transects/Annotations/FullReport.php @@ -73,9 +73,8 @@ protected function query() 'images.attrs' ) ->where('images.transect_id', $this->transect->id) - ->when($this->isRestricted(), function ($query) { - return $query->whereNotIn('annotations.id', $this->getSkipIds()); - }) + ->when($this->isRestrictedToExportArea(), [$this, 'restrictToExportAreaQuery']) + ->when($this->isRestrictedToAnnotationSession(), [$this, 'restrictToAnnotationSessionQuery']) ->orderBy('annotations.id'); if ($this->shouldSeparateLabelTrees()) { diff --git a/src/Support/Reports/Transects/Annotations/Report.php b/src/Support/Reports/Transects/Annotations/Report.php index 572e53e66..6fea1e92f 100644 --- a/src/Support/Reports/Transects/Annotations/Report.php +++ b/src/Support/Reports/Transects/Annotations/Report.php @@ -3,11 +3,19 @@ namespace Dias\Modules\Export\Support\Reports\Transects\Annotations; use DB; +use Illuminate\Support\Str; use Dias\Modules\Export\Transect; use Dias\Modules\Export\Support\Reports\Transects\Report as BaseReport; class Report extends BaseReport { + /** + * Cache for the annotation session this report may be restricted to + * + * @var Dias\AnnotationSession + */ + protected $annotationSession; + /** * Get the report name * @@ -15,8 +23,14 @@ class Report extends BaseReport */ public function getName() { - if ($this->isRestricted()) { + if ($this->isRestrictedToExportArea() && $this->isRestrictedToAnnotationSession()) { + $name = $this->getAnnotationSession()->name; + return "{$this->name} (restricted to export area and annotation session {$name})"; + } else if ($this->isRestrictedToExportArea()) { return "{$this->name} (restricted to export area)"; + } else if ($this->isRestrictedToAnnotationSession()) { + $name = $this->getAnnotationSession()->name; + return "{$this->name} (restricted to annotation session {$name})"; } return $this->name; @@ -29,13 +43,50 @@ public function getName() */ public function getFilename() { - if ($this->isRestricted()) { - return "{$this->filename}_restricted"; + if ($this->hasRestriction()) { + $suffix = '_restricted_to'; + + if ($this->isRestrictedToExportArea()) { + $suffix .= "_export_area"; + } + + if ($this->isRestrictedToAnnotationSession()) { + $name = Str::slug($this->getAnnotationSession()->name); + $suffix .= "_annotation_session_{$name}"; + } + + return "{$this->filename}{$suffix}"; } return $this->filename; } + /** + * Callback to be used in a `when` query statement that restricts the resulting annotations to the export area of the reansect of this report (if there is any). + * + * @param \Illuminate\Database\Query\Builder $query + * @return \Illuminate\Database\Query\Builder + */ + public function restrictToExportAreaQuery($query) + { + return $query->whereNotIn('annotations.id', $this->getSkipIds()); + } + + /** + * Callback to be used in a `when` query statement that restricts the resulting annotation labels to the annotation session of this report. + * + * @param \Illuminate\Database\Query\Builder $query + * @return \Illuminate\Database\Query\Builder + */ + public function restrictToAnnotationSessionQuery($query) + { + $session = $this->getAnnotationSession(); + return $query->where([ + ['annotation_labels.created_at', '>=', $session->starts_at], + ['annotation_labels.created_at', '<', $session->ends_at], + ]); + } + /** * Returns the annotation IDs to skip as outside of the transect export area * @@ -44,7 +95,7 @@ public function getFilename() * * @return array Annotation IDs */ - public function getSkipIds() + protected function getSkipIds() { $skip = []; $exportArea = Transect::convert($this->transect)->exportArea; @@ -94,13 +145,49 @@ public function getSkipIds() return $skip; } + /** + * Is this report restricted in any way? + * + * @return boolean + */ + protected function hasRestriction() + { + return $this->isRestrictedToExportArea() || $this->isRestrictedToAnnotationSession(); + } + /** * Should this report be restricted to the export area? * * @return boolean */ - protected function isRestricted() + protected function isRestrictedToExportArea() { return $this->options->get('exportArea', false); } + + /** + * Should this report be restricted an annotation session? + * + * @return boolean + */ + protected function isRestrictedToAnnotationSession() + { + return !is_null($this->options->get('annotationSession', null)); + } + + /** + * Returns the annotation session this report should be restricted to + * + * @return Dias\AnnotationSession|null + */ + protected function getAnnotationSession() + { + if (!$this->annotationSession) { + $this->annotationSession = $this->transect + ->annotationSessions() + ->find($this->options->get('annotationSession', null)); + } + + return $this->annotationSession; + } } diff --git a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsReportTest.php index 6621069e6..fd2c32d79 100644 --- a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsReportTest.php @@ -1,6 +1,8 @@ id, $annotations[1]->id, $annotations[4]->id]; $outside = [$annotations[2]->id, $annotations[3]->id, $annotations[5]->id]; - $ids = with(new Report($transect, ['restricted' => true]))->getSkipIds(); + $report = new Report($transect); + + $ids = Annotation::when(true, [$report, 'restrictToExportAreaQuery'])->pluck('id')->toArray(); $ids = array_map('intval', $ids); - sort($outside); + sort($inside); sort($ids); - $this->assertEquals($outside, $ids); + $this->assertEquals($inside, $ids); - foreach ($inside as $id) { + foreach ($outside as $id) { $this->assertNotContains($id, $ids); } } + + public function testGetName() + { + $session = AnnotationSessionTest::create(); + + $report = new Report($session->transect, [ + 'exportArea' => true, + ]); + + $this->assertContains('restricted to export area', $report->getName()); + $this->assertContains('restricted_to_export_area', $report->getFilename()); + + $report = new Report($session->transect, [ + 'annotationSession' => $session->id, + ]); + + $this->assertContains('restricted to annotation session', $report->getName()); + $this->assertContains($session->name, $report->getName()); + $this->assertContains('restricted_to_annotation_session', $report->getFilename()); + + $report = new Report($session->transect, [ + 'exportArea' => true, + 'annotationSession' => $session->id, + ]); + + $this->assertContains('export area', $report->getName()); + $this->assertContains('export_area', $report->getFilename()); + $this->assertContains('annotation session', $report->getName()); + $this->assertContains($session->name, $report->getName()); + $this->assertContains('annotation_session', $report->getFilename()); + } + + public function testRestrictToAnnotationSessionQuery() + { + $session = AnnotationSessionTest::create([ + 'starts_at' => '2016-10-05', + 'ends_at' => '2016-10-06', + ]); + + $a = AnnotationTest::create(); + $a->image->transect_id = $session->transect_id; + + $al1 = AnnotationLabelTest::create([ + 'created_at' => '2016-10-04', + 'annotation_id' => $a->id, + ]); + + $al2 = AnnotationLabelTest::create([ + 'created_at' => '2016-10-05', + 'annotation_id' => $a->id, + ]); + + $report = new Report($session->transect, ['annotationSession' => $session->id]); + $results = AnnotationLabel::when(true, [$report, 'restrictToAnnotationSessionQuery'])->get(); + + $this->assertEquals(1, count($results)); + $this->assertEquals($al2->id, $results[0]->id); + } } From 6120d07560f21afdab372f51e30e0b705b26c7af Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 5 Oct 2016 11:16:06 +0200 Subject: [PATCH 062/407] Update manual entry for reports schema --- .../manual/tutorials/reports-schema.blade.php | 29 ++++++++++++------- src/resources/views/manualTutorial.blade.php | 2 +- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index 8455bb230..bf4915594 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -1,17 +1,24 @@ @extends('manual.base') -@section('manual-title') Schema of exported reports @stop +@section('manual-title') Reports schema @stop @section('manual-content')

    A description of the file formats of the different available reports.

    +

    Project and transect reports

    +

    + Most report types can be requested for a whole project as well as for individual transects. A project report is a convenience feature which requests reports for all individual transects of the project at once and provides a ZIP file containing the transect reports for download. However, not all configuration options may be available for project reports. +

    +

    + The following sections describe the different types of transect reports but, per definition, apply for project reports as well. +

    Annotation reports

    Basic

    - The basic annotation report contains graphical plots of abundances of the different annotation labels (annotations can have multiple different labels by different users). The report is generated as a single PDF file, containing one page and plot for each transect of the project. + The basic annotation report contains a graphical plot of abundances of the different annotation labels (annotations can have multiple labels by different users). If the annotations should be separated by label tree, there will be one plot for each label tree that was used.

    Example plot: @@ -22,16 +29,16 @@

    - The bars of the plot are color-coded based on the colors of the labels they represent. If any label occurs more than a hundred times, a logarithmic scale is applied for the transect. + The bars of the plot are color-coded based on the colors of the labels they represent. If any label occurs more than a hundred times, a logarithmic scale is applied.

    Extended

    - The extended annotation report is an XLSX spreadsheet with one sheet for every transect of the project. Transects without annotations are ommitted. The report contains a list of the abundances of each label per image. + The extended annotation report is an XLSX spreadsheet which contains a list of the abundances of each label and image. If the annotations should be separated by label tree, there will be one worksheet for each label tree that was used.

    - Each sheet contains the name of the transect as the first line. The columns are as follows: + For a single worksheet (not separated by label tree) the first line contains the transect name. For multiple worksheets the first lines contain the name of the respective label tree. The second line always contains the column headers. The columns are as follows:

    1. Image filename
    2. @@ -54,10 +61,10 @@

      Full

      - The full annotation report is an XLSX spreadsheet similar to the extended report. It contains a list of all annotations and their labels for each transect. + The full annotation report is an XLSX spreadsheet similar to the extended report. It contains a list of all annotations and their labels.

      - Each sheet contains the name of the transect as the first line. The columns are as follows: + The columns are as follows:

      1. Image filename
      2. @@ -91,10 +98,10 @@

        CSV

        - The CSV report is intended for subsequent processing. If you want the data in a machine readable format, choose this report. The report is a ZIP archive, containing a CSV file for each transect of the project. Each CSV file name consists of the transect ID and the transect name (cleaned up so it can be a file name) separated by an underscore. + The CSV report is intended for subsequent processing. If you want the data in a machine readable format, choose this report. The report is a ZIP archive, containing a CSV file. The CSV file name consists of the transect ID and the transect name (cleaned up so it can be a file name) separated by an underscore. If the annotations should be separated by label tree, there will be one CSV file for each label tree and the CSV file name will consist of the label tree ID and name instead.

        - The CSV files contains one row for each annotation label. Since an annotation can have multiple labels, there may be multiple rows for a single annotation. The columns are as follows: + Each CSV file contains one row for each annotation label. Since an annotation can have multiple labels, there may be multiple rows for a single annotation. The first row always contains the column headers. The columns are as follows:

        1. Annotation label ID (not the annotation ID)
        2. @@ -124,7 +131,7 @@

          Image label reports

          Basic

          - The basic image label report is an XLSX spreadsheet similar to the extended annotation report. It contains a list of all labels attached to each image of a transect. The columns are as follows: + The basic image label report is an XLSX spreadsheet similar to the extended annotation report. It contains a list of all labels attached to each image of the transect. The columns are as follows:

          1. Image ID
          2. @@ -137,7 +144,7 @@ The CSV report is similar to the annotation CSV report. If you want the data in a machine readable format, choose this report.

            - The CSV files contains one row for each image label. Since an image can have multiple different labels, there may be multiple rows for a single image. The columns are as follows: + Each CSV file contains one row for each image label. Since an image can have multiple different labels, there may be multiple rows for a single image. The columns are as follows:

            1. Image label ID
            2. diff --git a/src/resources/views/manualTutorial.blade.php b/src/resources/views/manualTutorial.blade.php index 31f6f2438..4b775a8c3 100644 --- a/src/resources/views/manualTutorial.blade.php +++ b/src/resources/views/manualTutorial.blade.php @@ -1,5 +1,5 @@

              - Schema of exported reports + Reports schema

              From bfa96d2cd82b6ef87f3063d9a09aa99cb3c07cba Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 13 Oct 2016 15:20:54 +0200 Subject: [PATCH 063/407] Implement annotation session users for reports restricted to an a/s --- .../Reports/Transects/Annotations/Report.php | 16 ++++++++++++---- ...portReportsTransectsAnnotationsReportTest.php | 11 +++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/Support/Reports/Transects/Annotations/Report.php b/src/Support/Reports/Transects/Annotations/Report.php index 6fea1e92f..d3cb89e03 100644 --- a/src/Support/Reports/Transects/Annotations/Report.php +++ b/src/Support/Reports/Transects/Annotations/Report.php @@ -81,10 +81,18 @@ public function restrictToExportAreaQuery($query) public function restrictToAnnotationSessionQuery($query) { $session = $this->getAnnotationSession(); - return $query->where([ - ['annotation_labels.created_at', '>=', $session->starts_at], - ['annotation_labels.created_at', '<', $session->ends_at], - ]); + return $query->where(function ($query) use ($session) { + // take only annotation labels that belong to the time span... + $query->where('annotation_labels.created_at', '>=', $session->starts_at) + ->where('annotation_labels.created_at', '<', $session->ends_at) + // ...and to the users of the session + ->whereIn('annotation_labels.user_id', function ($query) use ($session) { + $query->select('user_id') + ->from('annotation_session_user') + ->where('annotation_session_id', $session->id); + }); + }); + } /** diff --git a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsReportTest.php index fd2c32d79..b8f7462b7 100644 --- a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsReportTest.php @@ -106,22 +106,33 @@ public function testGetName() public function testRestrictToAnnotationSessionQuery() { + $user = UserTest::create(); + $session = AnnotationSessionTest::create([ 'starts_at' => '2016-10-05', 'ends_at' => '2016-10-06', ]); + $session->users()->attach($user); + $a = AnnotationTest::create(); $a->image->transect_id = $session->transect_id; $al1 = AnnotationLabelTest::create([ 'created_at' => '2016-10-04', 'annotation_id' => $a->id, + 'user_id' => $user->id, ]); $al2 = AnnotationLabelTest::create([ 'created_at' => '2016-10-05', 'annotation_id' => $a->id, + 'user_id' => $user->id, + ]); + + $al3 = AnnotationLabelTest::create([ + 'created_at' => '2016-10-05', + 'annotation_id' => $a->id, ]); $report = new Report($session->transect, ['annotationSession' => $session->id]); From 27412c85fbfa1da284f6103352714a0f2ceade2c Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 19 Oct 2016 14:51:19 +0200 Subject: [PATCH 064/407] Use generic manual tutorials controller --- .../Controllers/Views/TutorialController.php | 23 ------------------- src/Http/routes.php | 5 ---- src/resources/views/manualTutorial.blade.php | 2 +- src/resources/views/projectReports.blade.php | 12 +++++----- src/resources/views/transectReports.blade.php | 12 +++++----- 5 files changed, 13 insertions(+), 41 deletions(-) delete mode 100644 src/Http/Controllers/Views/TutorialController.php diff --git a/src/Http/Controllers/Views/TutorialController.php b/src/Http/Controllers/Views/TutorialController.php deleted file mode 100644 index 6b70d0387..000000000 --- a/src/Http/Controllers/Views/TutorialController.php +++ /dev/null @@ -1,23 +0,0 @@ -exists('export::manual.tutorials.'.$name)) { - return view('export::manual.tutorials.'.$name); - } else { - abort(404); - } - } -} diff --git a/src/Http/routes.php b/src/Http/routes.php index 747bee61e..c0829e7aa 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -102,8 +102,3 @@ 'as' => 'download_report', 'uses' => 'Api\AvailableReportController@show', ]); - -$router->get('manual/tutorials/export/{name}', [ - 'as' => 'manual-tutorials-export', - 'uses' => 'Views\TutorialController@show', -]); diff --git a/src/resources/views/manualTutorial.blade.php b/src/resources/views/manualTutorial.blade.php index 4b775a8c3..d3d5a2e38 100644 --- a/src/resources/views/manualTutorial.blade.php +++ b/src/resources/views/manualTutorial.blade.php @@ -1,5 +1,5 @@

              - Reports schema + Reports schema

              diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index 84cd9a17d..7cf4e9a67 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -50,22 +50,22 @@

    - The basic annotation report contains graphical plots of abundances of the different annotation labels (as PDF for each transect). See the manual for the report schema. + The basic annotation report contains graphical plots of abundances of the different annotation labels (as PDF for each transect). See the manual for the report schema.
    - The extended annotation report lists the abundances of annotation labels for each image of this transect (as XLSX for each transect). See the manual for the report schema. + The extended annotation report lists the abundances of annotation labels for each image of this transect (as XLSX for each transect). See the manual for the report schema.
    - The full annotation report lists the labels, shape and coordinates of all annotations of this transect (as XLSX for each transect). See the manual for the report schema. + The full annotation report lists the labels, shape and coordinates of all annotations of this transect (as XLSX for each transect). See the manual for the report schema.
    - The CSV annotation report is intended for subsequent processing and lists the annotation labels of this transect at the highest possible resolution (as CSV files in a ZIP archive for each transect). See the manual for the report schema. + The CSV annotation report is intended for subsequent processing and lists the annotation labels of this transect at the highest possible resolution (as CSV files in a ZIP archive for each transect). See the manual for the report schema.
    - The basic image label report lists the image labels of all images of this transect (as XLSX for each transect). See the manual for the report schema. + The basic image label report lists the image labels of all images of this transect (as XLSX for each transect). See the manual for the report schema.
    - The CSV image label report is intended for subsequent processing and lists the image labels of this transect at the highest possible resolution (as CSV files in a ZIP archive for each transect). See the manual for the report schema. + The CSV image label report is intended for subsequent processing and lists the image labels of this transect at the highest possible resolution (as CSV files in a ZIP archive for each transect). See the manual for the report schema.
    diff --git a/src/resources/views/transectReports.blade.php b/src/resources/views/transectReports.blade.php index 6c421295f..be0eb9afc 100644 --- a/src/resources/views/transectReports.blade.php +++ b/src/resources/views/transectReports.blade.php @@ -50,22 +50,22 @@
    - The basic annotation report contains graphical plots of abundances of the different annotation labels (as PDF). See the manual for the report schema. + The basic annotation report contains graphical plots of abundances of the different annotation labels (as PDF). See the manual for the report schema.
    - The extended annotation report lists the abundances of annotation labels for each image of this transect (as XLSX). See the manual for the report schema. + The extended annotation report lists the abundances of annotation labels for each image of this transect (as XLSX). See the manual for the report schema.
    - The full annotation report lists the labels, shape and coordinates of all annotations of this transect (as XLSX). See the manual for the report schema. + The full annotation report lists the labels, shape and coordinates of all annotations of this transect (as XLSX). See the manual for the report schema.
    - The CSV annotation report is intended for subsequent processing and lists the annotation labels of this transect at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. + The CSV annotation report is intended for subsequent processing and lists the annotation labels of this transect at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema.
    - The basic image label report lists the image labels of all images of this transect (as XLSX). See the manual for the report schema. + The basic image label report lists the image labels of all images of this transect (as XLSX). See the manual for the report schema.
    - The CSV image label report is intended for subsequent processing and lists the image labels of this transect at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. + The CSV image label report is intended for subsequent processing and lists the image labels of this transect at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema.
    From 39ddbee56e9d7379288e932f7857b85fede9e039 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 20 Oct 2016 15:02:40 +0200 Subject: [PATCH 065/407] Update required version of dias/projects --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index b0ef91955..2498c3aec 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "dias/export", "require": { "ext-zip": "*", - "dias/projects": "~1.0" + "dias/projects": "~1.1" }, "require-dev": { }, From 5304b953325b9086ef2541c4f885bc08022d4897 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 26 Oct 2016 14:27:37 +0200 Subject: [PATCH 066/407] Add missing class to transect menubar item --- src/resources/views/transectsMenubar.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/resources/views/transectsMenubar.blade.php b/src/resources/views/transectsMenubar.blade.php index 9f0965c7f..84fd1f775 100644 --- a/src/resources/views/transectsMenubar.blade.php +++ b/src/resources/views/transectsMenubar.blade.php @@ -1,3 +1,3 @@ - + From 911d5e33703a2cda43ea9b28742eb3c7059c6cb8 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 28 Oct 2016 12:37:04 +0200 Subject: [PATCH 067/407] Simplify and streamline full report generation Closes #15 --- .../Transects/Annotations/FullReport.php | 19 ++++++++++++++++++- src/resources/scripts/full_report.py | 13 +++---------- ...ortsTransectsAnnotationsFullReportTest.php | 16 +++++++++++++--- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/src/Support/Reports/Transects/Annotations/FullReport.php b/src/Support/Reports/Transects/Annotations/FullReport.php index d372ebf2c..7658bd90a 100644 --- a/src/Support/Reports/Transects/Annotations/FullReport.php +++ b/src/Support/Reports/Transects/Annotations/FullReport.php @@ -96,6 +96,7 @@ protected function createCsv($rows, $title = '') { $csv = CsvFile::makeTmp(); $csv->put([$title]); + $csv->put(['image_filename', 'annotation_id', 'annotation_shape', 'x/radius', 'y', 'labels', 'image_area_qm']); foreach ($rows as $row) { $csv->put([ @@ -104,7 +105,7 @@ protected function createCsv($rows, $title = '') $this->expandLabelName($row->label_id), $row->shape_name, $row->points, - $row->attrs + $this->getArea($row->attrs) ]); } @@ -112,4 +113,20 @@ protected function createCsv($rows, $title = '') return $csv; } + + /** + * Parses the image attrs JSON object to retrieve the computed area of the laserpoint detection. + * + * @param string $attrs Image attrs JSON as string + * @return mixed The number or `null` + */ + protected function getArea($attrs) + { + $attrs = json_decode($attrs, true); + if (is_array($attrs)) { + return array_get($attrs, 'laserpoints.area'); + } + + return null; + } } diff --git a/src/resources/scripts/full_report.py b/src/resources/scripts/full_report.py index 2dd2b02e1..b4ff71dbd 100755 --- a/src/resources/scripts/full_report.py +++ b/src/resources/scripts/full_report.py @@ -19,14 +19,14 @@ def addRow(x="", y="", label="", filename="", annotation_id="", shape="", area=" f = open(path, 'r') csv_file = csv.reader(f) csv_title = csv_file.next()[0] + csv_column_labels = csv_file.next() rows = np.array(list(csv_file)) f.close() if rows.shape[0] == 0: continue numSheets += 1 # rows have the content: image_filename, annotation_id, label_name, shape_name, points - celldata = [[csv_title]] - celldata.append(addRow("x/radius", "y", "labels", "filename", "annotation_id", "shape", "area in m^2")) + celldata = [[csv_title], csv_column_labels] uniqueimages = np.unique(rows[:, 0]) @@ -39,14 +39,7 @@ def addRow(x="", y="", label="", filename="", annotation_id="", shape="", area=" labels = ", ".join(curAnnotationData[:, 2]) points = ast.literal_eval(curAnnotationData[:, 4][0]) it = iter(points) - lp = "" - if (curAnnotationData[0, 5]): - js = json.loads(curAnnotationData[0, 5]) - try: - lp = js['laserpoints']['area'] - except KeyError: - pass - celldata.append(addRow(it.next(), it.next(), labels, img, annotation, curAnnotationData[0, 3], lp)) + celldata.append(addRow(it.next(), it.next(), labels, img, annotation, curAnnotationData[0, 3], curAnnotationData[0, 5])) try: for x in it: celldata.append(addRow(x, next(it))) diff --git a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php index fce217207..e3040ff27 100644 --- a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php @@ -30,7 +30,7 @@ public function testGenerateReport() 'label_id' => $child->id, ]); $al->annotation->image->transect_id = $transect->id; - $al->annotation->image->attrs = ['image' => 'attrs']; + $al->annotation->image->attrs = ['laserpoints' => ['area' => 3.1415]]; $al->annotation->image->save(); // for the AvailableReport @@ -48,6 +48,10 @@ public function testGenerateReport() ->once() ->with([$transect->name]); + $mock->shouldReceive('put') + ->once() + ->with(['image_filename', 'annotation_id', 'annotation_shape', 'x/radius', 'y', 'labels', 'image_area_qm']); + $mock->shouldReceive('put') ->once() ->with([ @@ -56,7 +60,7 @@ public function testGenerateReport() "{$root->name} > {$child->name}", $al->annotation->shape->name, json_encode($al->annotation->points), - json_encode(['image' => 'attrs']), + 3.1415, ]); $mock->shouldReceive('close') @@ -80,7 +84,9 @@ public function testGenerateReportSeparateLabelTrees() $label1 = LabelTest::create(); $label2 = LabelTest::create(); - $image = ImageTest::create(); + $image = ImageTest::create([ + 'attrs' => ['some' => 'attrs'], + ]); $annotation = AnnotationTest::create([ 'image_id' => $image->id, @@ -112,6 +118,10 @@ public function testGenerateReportSeparateLabelTrees() ->once() ->with([$label2->tree->name]); + $mock->shouldReceive('put') + ->twice() + ->with(['image_filename', 'annotation_id', 'annotation_shape', 'x/radius', 'y', 'labels', 'image_area_qm']); + $mock->shouldReceive('put') ->once() ->with([ From 081e345c7f28a2fd31bf76a5042bbf8e2683c883 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 28 Oct 2016 14:12:28 +0200 Subject: [PATCH 068/407] Revert column labels for full report --- src/Support/Reports/Transects/Annotations/FullReport.php | 2 +- ...ModuleSupportReportsTransectsAnnotationsFullReportTest.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Support/Reports/Transects/Annotations/FullReport.php b/src/Support/Reports/Transects/Annotations/FullReport.php index 7658bd90a..59fc545a2 100644 --- a/src/Support/Reports/Transects/Annotations/FullReport.php +++ b/src/Support/Reports/Transects/Annotations/FullReport.php @@ -96,7 +96,7 @@ protected function createCsv($rows, $title = '') { $csv = CsvFile::makeTmp(); $csv->put([$title]); - $csv->put(['image_filename', 'annotation_id', 'annotation_shape', 'x/radius', 'y', 'labels', 'image_area_qm']); + $csv->put(['image filename', 'annotation id', 'annotation shape', 'x/radius', 'y', 'labels', 'image area in m²']); foreach ($rows as $row) { $csv->put([ diff --git a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php index e3040ff27..bb1a509e5 100644 --- a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php @@ -50,7 +50,7 @@ public function testGenerateReport() $mock->shouldReceive('put') ->once() - ->with(['image_filename', 'annotation_id', 'annotation_shape', 'x/radius', 'y', 'labels', 'image_area_qm']); + ->with(['image filename', 'annotation id', 'annotation shape', 'x/radius', 'y', 'labels', 'image area in m²']); $mock->shouldReceive('put') ->once() @@ -120,7 +120,7 @@ public function testGenerateReportSeparateLabelTrees() $mock->shouldReceive('put') ->twice() - ->with(['image_filename', 'annotation_id', 'annotation_shape', 'x/radius', 'y', 'labels', 'image_area_qm']); + ->with(['image filename', 'annotation id', 'annotation shape', 'x/radius', 'y', 'labels', 'image area in m²']); $mock->shouldReceive('put') ->once() From f32b8591706d105c7ea9c45c1197cc009e5411b4 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 2 Nov 2016 17:08:39 +0100 Subject: [PATCH 069/407] WIP: Implement area report class References #18 --- .../Transects/Annotations/AreaReport.php | 306 ++++++++++++++++++ ...ortsTransectsAnnotationsAreaReportTest.php | 306 ++++++++++++++++++ 2 files changed, 612 insertions(+) create mode 100644 src/Support/Reports/Transects/Annotations/AreaReport.php create mode 100644 tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsAreaReportTest.php diff --git a/src/Support/Reports/Transects/Annotations/AreaReport.php b/src/Support/Reports/Transects/Annotations/AreaReport.php new file mode 100644 index 000000000..48605f58b --- /dev/null +++ b/src/Support/Reports/Transects/Annotations/AreaReport.php @@ -0,0 +1,306 @@ +query()->get(); + + $this->images = Image::whereIn('id', $rows->pluck('image_id')->unique()) + ->select('id', 'filename', 'attrs') + ->get() + ->keyBy('id'); + // Manually assign the transect model to the images so there is no DB query for + // each single image when we require the full image URL later on. + $this->images->each(function ($image) { + $image->transect = $this->transect; + }); + + if ($this->shouldSeparateLabelTrees()) { + $rows = $rows->groupBy('label_tree_id'); + $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); + + foreach ($trees as $id => $name) { + $this->tmpFiles[] = $this->createCsv($rows->get($id), $name); + } + + } else { + $this->tmpFiles[] = $this->createCsv($rows, $this->transect->name); + } + + $this->executeScript('extended_report'); + } + + /** + * Assemble a new DB query for the transect of this report. + * + * @return \Illuminate\Database\Query\Builder + */ + protected function query() + { + $query = DB::table('annotation_labels') + ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') + ->join('labels', 'annotation_labels.label_id', '=', 'labels.id') + ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') + ->join('images', 'annotations.image_id', '=', 'images.id') + ->select([ + 'annotations.id as annotation_id', + 'shapes.id as shape_id', + 'shapes.name as shape_name', + 'annotation_labels.label_id', + 'labels.name as label_name', + 'annotations.image_id', + 'annotations.points', + ]) + ->where('images.transect_id', $this->transect->id) + // We can only compute the area from annotations that have and area. + ->whereIn('shapes.id', [ + Shape::$circleId, + Shape::$rectangleId, + Shape::$polygonId, + ]) + ->when($this->isRestrictedToExportArea(), [$this, 'restrictToExportAreaQuery']) + ->when($this->isRestrictedToAnnotationSession(), [$this, 'restrictToAnnotationSessionQuery']) + ->orderBy('annotation_labels.id'); + + if ($this->shouldSeparateLabelTrees()) { + $query->addSelect(['labels.label_tree_id']); + } + + return $query; + } + + /** + * Create a CSV file for a single sheet of the spreadsheet of this report + * + * @param \Illuminate\Support\Collection $rows The rows for the CSV + * @param string $title The title to put in the first row of the CSV + * @return CsvFile + */ + protected function createCsv($rows, $title = '') + { + $rows = $this->parseRows($rows); + $csv = CsvFile::makeTmp(); + $csv->put([$title]); + $csv->put([ + 'annotation_id', + 'shape_id', + 'shape_name', + 'label_ids', + 'label_names', + 'image_id', + 'image_filename', + 'annotation_width_m', + 'annotation_height_m', + 'annotation_area_sqm', + 'annotation_width_px', + 'annotation_height_px', + 'annotation_area_px', + ]); + + foreach ($rows as $row) { + $csv->put([ + $row->id, + $row->shape_id, + $row->shape_name, + implode(', ', $row->label_ids), + implode(', ', $row->label_names), + $row->image_id, + $row->image_filename, + $row->width_sqm, + $row->height_sqm, + $row->area_sqm, + $row->width_px, + $row->height_px, + $row->area_px, + ]); + } + + $csv->close(); + + return $csv; + } + + /** + * Creates the array of annotations that is inserted into the CSV file + * + * @param Illuminate\Support\Collection $rows + * @return array + */ + protected function parseRows($rows) + { + $annotations = []; + + foreach ($rows as $row) { + if (array_key_exists($row->annotation_id, $annotations)) { + $annotations[$row->annotation_id]->label_ids[] = $row->label_id; + $annotations[$row->annotation_id]->label_names[] = $row->label_name; + } else { + $annotation = new StdClass(); + $annotation->id = $row->annotation_id; + $annotation->shape_id = $row->shape_id; + $annotation->shape_name = $row->shape_name; + $annotation->label_ids = [$row->label_id]; + $annotation->label_names = [$row->label_name]; + $annotation->image_id = $row->image_id; + $annotation->image_filename = $this->images[$row->image_id]->filename; + + $this->setSize($annotation, $row); + + $annotations[$row->annotation_id] = $annotation; + } + } + + return $annotations; + } + + /** + * Calculate the pixel/sqm size and dimensions for an annotation. + * + * @param StdClass $annotation The annotation object to set the size of. + * @param StdClass $row Object containing information on the annotation from + * the DB. + */ + protected function setSize($annotation, $row) + { + $points = json_decode($row->points); + + // If we can't compute the dimensions or area, leave them blank. + $annotation->width_px = ''; + $annotation->height_px = ''; + $annotation->area_px = ''; + $annotation->width_sqm = ''; + $annotation->height_sqm = ''; + $annotation->area_sqm = ''; + + switch ($annotation->shape_id) { + case Shape::$circleId: + // width and height are the diameter + $annotation->width_px = 2 * $points[2]; + $annotation->height_px = $annotation->width_px; + $annotation->area_px = pow($points[2], 2) * M_PI; + break; + + case Shape::$rectangleId: + // A --- B + // | | + // D --- C + // + // dim1 is the distance from A to B, dim2 from B to C + + $dim1 = sqrt(pow($points[0] - $points[2], 2) + pow($points[1] - $points[3], 2)); + $dim2 = sqrt(pow($points[2] - $points[4], 2) + pow($points[3] - $points[5], 2)); + $annotation->width_px = max($dim1, $dim2); + $annotation->height_px = min($dim1, $dim2); + $annotation->area_px = $dim1 * $dim2; + break; + + case Shape::$polygonId: + // See: http://www.mathopenref.com/coordpolygonarea.html and + // http://www.mathopenref.com/coordpolygonarea2.html + // For a description of the polygon area algorithm. + $min = [INF, INF]; + $max = [-INF, -INF]; + $area = 0; + $count = count($points); + // The last vertex is the 'previous' one to the first. + // -1 to get the last element and -1 to get the x coordinate. + $j = $count - 2; + + for ($i = 0; $i < $count; $i += 2) { + $area += ($points[$j] + $points[$i]) * ($points[$j + 1] - $points[$i + 1]); + // $j is the previous vertex to $i + $j = $i; + + // Find the minimal and maximal coordinates, too. + $min[0] = min($min[0], $points[$i]); + $min[1] = min($min[1], $points[$i + 1]); + $max[0] = max($max[0], $points[$i]); + $max[1] = max($max[1], $points[$i + 1]); + } + + $annotation->width_px = $max[0] - $min[0]; + $annotation->height_px = $max[1] - $min[1]; + $annotation->area_px = abs($area / 2); + break; + + default: + // We can't compute the area for this shape. + return; + } + + // If the laserpoint detection module exists and the laserpoint detection was + // performed for the image of the annotation, compute the dimensions and area + // in m (m²) as well. + if (class_exists(LImage::class)) { + $image = $this->images[$row->image_id]; + + // Cache the area and number of pixels in the original image object so we + // don't have to convert the object and fetch the values again for each + // annotation. + if (!property_exists($image, 'area') || !property_exists($image, 'px')) { + $laserpointsImage = LImage::convert($image); + $image->area = $laserpointsImage->area; + $image->px = $laserpointsImage->px; + } + + $imageArea = $image->area; + $imagePx = $image->px; + + if (!is_null($imageArea) && !is_null($imagePx)) { + // If we assume a pixel is a little square then this is the area of a + // single pixel. + $area = $imageArea / $imagePx; + // And this is the width/height of a single pixel. + $widthHeight = sqrt($area); + + $annotation->width_sqm = $widthHeight * $annotation->width_px; + $annotation->height_sqm = $widthHeight * $annotation->height_px; + $annotation->area_sqm = $area * $annotation->area_px; + } + } + } +} diff --git a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsAreaReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsAreaReportTest.php new file mode 100644 index 000000000..810e2d775 --- /dev/null +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsAreaReportTest.php @@ -0,0 +1,306 @@ +assertEquals('annotation area report', $report->getName()); + $this->assertEquals('annotation_area_report', $report->getFilename()); + $this->assertEquals('xlsx', $report->getExtension()); + } + + public function testGenerateReportShapes() + { + $transect = TransectTest::create([ + 'name' => 'My Cool Transect', + ]); + + $image = ImageTest::create([ + 'transect_id' => $transect->id, + ]); + + $a1 = AnnotationTest::create([ + 'shape_id' => Shape::$circleId, + 'image_id' => $image->id, + 'points' => [100, 100, 100], + ]); + + $al11 = AnnotationLabelTest::create([ + 'annotation_id' => $a1->id, + ]); + $al12 = AnnotationLabelTest::create([ + 'annotation_id' => $a1->id, + ]); + + $a2 = AnnotationTest::create([ + 'shape_id' => Shape::$rectangleId, + 'image_id' => $image->id, + 'points' => [100, 100, 100, 300, 200, 300, 200, 100], + ]); + + $al2 = AnnotationLabelTest::create([ + 'annotation_id' => $a2->id, + ]); + + // It's a simple parallelogram so the area can be easily calculated manually. + $a3 = AnnotationTest::create([ + 'shape_id' => Shape::$polygonId, + 'image_id' => $image->id, + 'points' => [100, 100, 100, 200, 200, 100, 200, 0], + ]); + + $al3 = AnnotationLabelTest::create([ + 'annotation_id' => $a3->id, + ]); + + // Should not be included. + $a4 = AnnotationTest::create([ + 'shape_id' => Shape::$pointId, + 'image_id' => $image->id, + 'points' => [100, 100], + ]); + + $al4 = AnnotationLabelTest::create([ + 'annotation_id' => $a4->id, + ]); + + // for the AvailableReport + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); + + $mock->shouldReceive('put') + ->once() + ->with([$transect->name]); + + $mock->shouldReceive('put') + ->once() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([ + $a1->id, + Shape::$circleId, 'Circle', + "{$al11->label_id}, {$al12->label_id}", + "{$al11->label->name}, {$al12->label->name}", + $image->id, $image->filename, + '', '', '', + 200, 200, 10000*M_PI + ]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $a2->id, + Shape::$rectangleId, 'Rectangle', + $al2->id, $al2->label->name, + $image->id, $image->filename, + '', '', '', + 200, 100, 20000 + ]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $a3->id, + Shape::$polygonId, 'Polygon', + $al3->id, $al3->label->name, + $image->id, $image->filename, + '', '', '', + 100, 200, 10000 + ]); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + $mock->code = 0; + App::singleton(Exec::class, function () use ($mock) { + return $mock; + }); + + with(new AreaReport($transect))->generateReport(); + } + + public function testGenerateReportSqm() + { + $transect = TransectTest::create([ + 'name' => 'My Cool Transect', + ]); + + $image = ImageTest::create([ + 'transect_id' => $transect->id, + 'attrs' => ['laserpoints' => ['area' => 1, 'px' => 1000*1000]], + ]); + + $a = AnnotationTest::create([ + 'shape_id' => Shape::$rectangleId, + 'image_id' => $image->id, + 'points' => [100, 100, 100, 300, 200, 300, 200, 100], + ]); + + $al = AnnotationLabelTest::create([ + 'annotation_id' => $a->id, + ]); + + // for the AvailableReport + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); + + $mock->shouldReceive('put') + ->once() + ->with([$transect->name]); + + $mock->shouldReceive('put') + ->once() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([ + $a->id, + Shape::$rectangleId, 'Rectangle', + $al->id, $al->label->name, + $image->id, $image->filename, + 0.2, 0.1, 0.02, + 200, 100, 20000 + ]); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + $mock->code = 0; + App::singleton(Exec::class, function () use ($mock) { + return $mock; + }); + + with(new AreaReport($transect))->generateReport(); + } + + public function testGenerateReportSeparateLabelTrees() + { + $label1 = LabelTest::create(); + $label2 = LabelTest::create(); + + $image = ImageTest::create(); + + $annotation = AnnotationTest::create([ + 'shape_id' => Shape::$rectangleId, + 'image_id' => $image->id, + 'points' => [100, 100, 100, 300, 200, 300, 200, 100], + ]); + + $al1 = AnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'label_id' => $label1->id, + ]); + $al2 = AnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'label_id' => $label2->id, + ]); + + File::shouldReceive('exists') + ->once() + ->andReturn(false); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $mock->shouldReceive('put') + ->once() + ->with([$label1->tree->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$label2->tree->name]); + + $mock->shouldReceive('put') + ->twice() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([ + $annotation->id, + Shape::$rectangleId, 'Rectangle', + $al1->id, $al1->label->name, + $image->id, $image->filename, + '', '', '', + 200, 100, 20000 + ]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $annotation->id, + Shape::$rectangleId, 'Rectangle', + $al2->id, $al2->label->name, + $image->id, $image->filename, + '', '', '', + 200, 100, 20000 + ]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + $mock->code = 0; + App::singleton(Exec::class, function () use ($mock) { + return $mock; + }); + + $report = new AreaReport($image->transect, ['separateLabelTrees' => true]); + $report->generateReport(); + } +} From cd2ece7dcd5fd2191dd4207d1e3d32c0b284a709 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 3 Nov 2016 09:44:15 +0100 Subject: [PATCH 070/407] Simplify query for transect annotation reports --- .../Transects/Annotations/AreaReport.php | 43 ++++++++----------- .../Transects/Annotations/BasicReport.php | 18 ++++---- .../Transects/Annotations/CsvReport.php | 17 ++------ .../Transects/Annotations/ExtendedReport.php | 10 +---- .../Transects/Annotations/FullReport.php | 19 ++------ .../Reports/Transects/Annotations/Report.php | 24 +++++++++++ ...ortsTransectsAnnotationsAreaReportTest.php | 2 +- 7 files changed, 62 insertions(+), 71 deletions(-) diff --git a/src/Support/Reports/Transects/Annotations/AreaReport.php b/src/Support/Reports/Transects/Annotations/AreaReport.php index 48605f58b..a8238aa8c 100644 --- a/src/Support/Reports/Transects/Annotations/AreaReport.php +++ b/src/Support/Reports/Transects/Annotations/AreaReport.php @@ -7,8 +7,8 @@ use Dias\Image; use Dias\Shape; use Dias\LabelTree; -use Dias\Modules\Laserpoints\Image as LImage; use Dias\Modules\Export\Support\CsvFile; +use Dias\Modules\Laserpoints\Image as LImage; class AreaReport extends Report { @@ -81,12 +81,7 @@ public function generateReport() */ protected function query() { - $query = DB::table('annotation_labels') - ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') - ->join('labels', 'annotation_labels.label_id', '=', 'labels.id') - ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') - ->join('images', 'annotations.image_id', '=', 'images.id') - ->select([ + $query = $this->initQuery([ 'annotations.id as annotation_id', 'shapes.id as shape_id', 'shapes.name as shape_name', @@ -95,19 +90,17 @@ protected function query() 'annotations.image_id', 'annotations.points', ]) - ->where('images.transect_id', $this->transect->id) + ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') // We can only compute the area from annotations that have and area. ->whereIn('shapes.id', [ Shape::$circleId, Shape::$rectangleId, Shape::$polygonId, ]) - ->when($this->isRestrictedToExportArea(), [$this, 'restrictToExportAreaQuery']) - ->when($this->isRestrictedToAnnotationSession(), [$this, 'restrictToAnnotationSessionQuery']) ->orderBy('annotation_labels.id'); - if ($this->shouldSeparateLabelTrees()) { - $query->addSelect(['labels.label_tree_id']); + if (!$this->shouldSeparateLabelTrees()) { + $query->join('labels', 'annotation_labels.label_id', '=', 'labels.id'); } return $query; @@ -138,7 +131,7 @@ protected function createCsv($rows, $title = '') 'annotation_area_sqm', 'annotation_width_px', 'annotation_height_px', - 'annotation_area_px', + 'annotation_area_sqpx', ]); foreach ($rows as $row) { @@ -150,12 +143,12 @@ protected function createCsv($rows, $title = '') implode(', ', $row->label_names), $row->image_id, $row->image_filename, - $row->width_sqm, - $row->height_sqm, + $row->width_m, + $row->height_m, $row->area_sqm, $row->width_px, $row->height_px, - $row->area_px, + $row->area_sqpx, ]); } @@ -211,9 +204,9 @@ protected function setSize($annotation, $row) // If we can't compute the dimensions or area, leave them blank. $annotation->width_px = ''; $annotation->height_px = ''; - $annotation->area_px = ''; - $annotation->width_sqm = ''; - $annotation->height_sqm = ''; + $annotation->area_sqpx = ''; + $annotation->width_m = ''; + $annotation->height_m = ''; $annotation->area_sqm = ''; switch ($annotation->shape_id) { @@ -221,7 +214,7 @@ protected function setSize($annotation, $row) // width and height are the diameter $annotation->width_px = 2 * $points[2]; $annotation->height_px = $annotation->width_px; - $annotation->area_px = pow($points[2], 2) * M_PI; + $annotation->area_sqpx = pow($points[2], 2) * M_PI; break; case Shape::$rectangleId: @@ -235,7 +228,7 @@ protected function setSize($annotation, $row) $dim2 = sqrt(pow($points[2] - $points[4], 2) + pow($points[3] - $points[5], 2)); $annotation->width_px = max($dim1, $dim2); $annotation->height_px = min($dim1, $dim2); - $annotation->area_px = $dim1 * $dim2; + $annotation->area_sqpx = $dim1 * $dim2; break; case Shape::$polygonId: @@ -264,7 +257,7 @@ protected function setSize($annotation, $row) $annotation->width_px = $max[0] - $min[0]; $annotation->height_px = $max[1] - $min[1]; - $annotation->area_px = abs($area / 2); + $annotation->area_sqpx = abs($area / 2); break; default: @@ -297,9 +290,9 @@ protected function setSize($annotation, $row) // And this is the width/height of a single pixel. $widthHeight = sqrt($area); - $annotation->width_sqm = $widthHeight * $annotation->width_px; - $annotation->height_sqm = $widthHeight * $annotation->height_px; - $annotation->area_sqm = $area * $annotation->area_px; + $annotation->width_m = $widthHeight * $annotation->width_px; + $annotation->height_m = $widthHeight * $annotation->height_px; + $annotation->area_sqm = $area * $annotation->area_sqpx; } } } diff --git a/src/Support/Reports/Transects/Annotations/BasicReport.php b/src/Support/Reports/Transects/Annotations/BasicReport.php index a1f95f173..45f46ecad 100644 --- a/src/Support/Reports/Transects/Annotations/BasicReport.php +++ b/src/Support/Reports/Transects/Annotations/BasicReport.php @@ -60,16 +60,18 @@ public function generateReport() */ protected function query() { - return DB::table('labels') - ->join('annotation_labels', 'annotation_labels.label_id', '=', 'labels.id') - ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') - ->join('images', 'annotations.image_id', '=', 'images.id') - ->where('images.transect_id', $this->transect->id) - ->when($this->isRestrictedToExportArea(), [$this, 'restrictToExportAreaQuery']) - ->when($this->isRestrictedToAnnotationSession(), [$this, 'restrictToAnnotationSessionQuery']) - ->select(DB::raw('labels.name, labels.color, count(labels.id) as count, labels.label_tree_id')) + $query = $this->initQuery(DB::raw('labels.name, labels.color, count(labels.id) as count')) ->groupBy('labels.id') ->orderBy('labels.id'); + + // We want this every time not only if the report should be separated by label + // trees as defined in initQuery(). + if (!$this->shouldSeparateLabelTrees()) { + $query->join('labels', 'annotation_labels.label_id', '=', 'labels.id') + ->addSelect('labels.label_tree_id'); + } + + return $query; } /** diff --git a/src/Support/Reports/Transects/Annotations/CsvReport.php b/src/Support/Reports/Transects/Annotations/CsvReport.php index da36ad91b..4e0aea42b 100644 --- a/src/Support/Reports/Transects/Annotations/CsvReport.php +++ b/src/Support/Reports/Transects/Annotations/CsvReport.php @@ -68,12 +68,7 @@ public function generateReport() */ protected function query() { - $query = DB::table('annotation_labels') - ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') - ->join('images', 'annotations.image_id', '=', 'images.id') - ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') - ->join('users', 'annotation_labels.user_id', '=', 'users.id') - ->select([ + $query = $this->initQuery([ 'annotation_labels.id as annotation_label_id', 'annotation_labels.label_id', 'users.id as user_id', @@ -86,16 +81,10 @@ protected function query() 'annotations.points', 'images.attrs', ]) - ->where('images.transect_id', $this->transect->id) - ->when($this->isRestrictedToExportArea(), [$this, 'restrictToExportAreaQuery']) - ->when($this->isRestrictedToAnnotationSession(), [$this, 'restrictToAnnotationSessionQuery']) + ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') + ->join('users', 'annotation_labels.user_id', '=', 'users.id') ->orderBy('annotation_labels.id'); - if ($this->shouldSeparateLabelTrees()) { - $query->join('labels', 'annotation_labels.label_id', '=', 'labels.id') - ->addSelect(['labels.label_tree_id']); - } - return $query; } diff --git a/src/Support/Reports/Transects/Annotations/ExtendedReport.php b/src/Support/Reports/Transects/Annotations/ExtendedReport.php index f54058d60..9e68ad2ff 100644 --- a/src/Support/Reports/Transects/Annotations/ExtendedReport.php +++ b/src/Support/Reports/Transects/Annotations/ExtendedReport.php @@ -60,17 +60,11 @@ public function generateReport() */ protected function query() { - $query = DB::table('images') - ->join('annotations', 'annotations.image_id', '=', 'images.id') - ->join('annotation_labels', 'annotation_labels.annotation_id', '=', 'annotations.id') - ->where('images.transect_id', $this->transect->id) - ->when($this->isRestrictedToExportArea(), [$this, 'restrictToExportAreaQuery']) - ->when($this->isRestrictedToAnnotationSession(), [$this, 'restrictToAnnotationSessionQuery']) + $query = $this->initQuery() ->orderBy('images.filename'); if ($this->shouldSeparateLabelTrees()) { - $query->join('labels', 'labels.id', '=', 'annotation_labels.label_id') - ->select(DB::raw('images.filename, annotation_labels.label_id, count(annotation_labels.label_id) as count, labels.label_tree_id')) + $query->select(DB::raw('images.filename, annotation_labels.label_id, count(annotation_labels.label_id) as count, labels.label_tree_id')) ->groupBy('annotation_labels.label_id', 'images.id', 'labels.label_tree_id'); } else { $query->select(DB::raw('images.filename, annotation_labels.label_id, count(annotation_labels.label_id) as count')) diff --git a/src/Support/Reports/Transects/Annotations/FullReport.php b/src/Support/Reports/Transects/Annotations/FullReport.php index 59fc545a2..341bd5559 100644 --- a/src/Support/Reports/Transects/Annotations/FullReport.php +++ b/src/Support/Reports/Transects/Annotations/FullReport.php @@ -60,28 +60,17 @@ public function generateReport() */ protected function query() { - $query = DB::table('annotation_labels') - ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') - ->join('images', 'annotations.image_id', '=', 'images.id') - ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') - ->select( + $query = $this->initQuery([ 'images.filename', 'annotations.id as annotation_id', 'annotation_labels.label_id', 'shapes.name as shape_name', 'annotations.points', - 'images.attrs' - ) - ->where('images.transect_id', $this->transect->id) - ->when($this->isRestrictedToExportArea(), [$this, 'restrictToExportAreaQuery']) - ->when($this->isRestrictedToAnnotationSession(), [$this, 'restrictToAnnotationSessionQuery']) + 'images.attrs', + ]) + ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') ->orderBy('annotations.id'); - if ($this->shouldSeparateLabelTrees()) { - $query->join('labels', 'annotation_labels.label_id', '=', 'labels.id') - ->addSelect('labels.label_tree_id'); - } - return $query; } diff --git a/src/Support/Reports/Transects/Annotations/Report.php b/src/Support/Reports/Transects/Annotations/Report.php index d3cb89e03..e825a8cdc 100644 --- a/src/Support/Reports/Transects/Annotations/Report.php +++ b/src/Support/Reports/Transects/Annotations/Report.php @@ -153,6 +153,30 @@ protected function getSkipIds() return $skip; } + /** + * Assembles the part of the DB query that is the same for all annotation reports + * + * @param mixed $columns The columns to select + * @return \Illuminate\Database\Query\Builder + */ + protected function initQuery($columns = []) + { + $query = DB::table('annotation_labels') + ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') + ->join('images', 'annotations.image_id', '=', 'images.id') + ->where('images.transect_id', $this->transect->id) + ->when($this->isRestrictedToExportArea(), [$this, 'restrictToExportAreaQuery']) + ->when($this->isRestrictedToAnnotationSession(), [$this, 'restrictToAnnotationSessionQuery']) + ->select($columns); + + if ($this->shouldSeparateLabelTrees()) { + $query->join('labels', 'annotation_labels.label_id', '=', 'labels.id') + ->addSelect('labels.label_tree_id'); + } + + return $query; + } + /** * Is this report restricted in any way? * diff --git a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsAreaReportTest.php b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsAreaReportTest.php index 810e2d775..03dcff57d 100644 --- a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsAreaReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsAreaReportTest.php @@ -20,7 +20,7 @@ class ExportModuleSupportReportsTransectsAnnotationsAreaReportTest extends TestC 'annotation_area_sqm', 'annotation_width_px', 'annotation_height_px', - 'annotation_area_px', + 'annotation_area_sqpx', ]; public function testProperties() From ea1f7650a73a2925e0fd30eec79b16a9a9d77f10 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 3 Nov 2016 09:44:46 +0100 Subject: [PATCH 071/407] Implement annotation area reports in the UI --- .../Annotations/AreaReportController.php | 27 +++++++++++++ .../Annotations/AreaReportController.php | 28 ++++++++++++++ src/Http/routes.php | 8 ++++ .../Projects/Annotations/AreaReport.php | 30 +++++++++++++++ src/public/assets/scripts/annotations.js | 2 +- src/public/assets/scripts/main.js | 2 +- .../ProjectReportRequestController.js | 3 +- .../TransectReportRequestController.js | 3 +- .../js/export/factories/ProjectReport.js | 4 ++ .../js/export/factories/TransectReport.js | 4 ++ .../views/partials/reportTypeInfo.blade.php | 21 ++++++++++ src/resources/views/projectReports.blade.php | 19 +--------- src/resources/views/transectReports.blade.php | 19 +--------- ...ctsAnnotationsAreaReportControllerTest.php | 38 +++++++++++++++++++ ...ctsAnnotationsAreaReportControllerTest.php | 38 +++++++++++++++++++ ...portsProjectsAnnotationsAreaReportTest.php | 14 +++++++ 16 files changed, 220 insertions(+), 40 deletions(-) create mode 100644 src/Http/Controllers/Api/Projects/Annotations/AreaReportController.php create mode 100644 src/Http/Controllers/Api/Transects/Annotations/AreaReportController.php create mode 100644 src/Support/Reports/Projects/Annotations/AreaReport.php create mode 100644 src/resources/views/partials/reportTypeInfo.blade.php create mode 100644 tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsAreaReportControllerTest.php create mode 100644 tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsAreaReportControllerTest.php create mode 100644 tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsAreaReportTest.php diff --git a/src/Http/Controllers/Api/Projects/Annotations/AreaReportController.php b/src/Http/Controllers/Api/Projects/Annotations/AreaReportController.php new file mode 100644 index 000000000..69201a1ce --- /dev/null +++ b/src/Http/Controllers/Api/Projects/Annotations/AreaReportController.php @@ -0,0 +1,27 @@ + 'Annotations\CsvReportController@store', ]); + $router->post('{id}/reports/annotations/area', [ + 'uses' => 'Annotations\AreaReportController@store', + ]); + $router->post('{id}/reports/image-labels/basic', [ 'uses' => 'ImageLabels\BasicReportController@store', ]); @@ -70,6 +74,10 @@ 'uses' => 'Annotations\CsvReportController@store', ]); + $router->post('{id}/reports/annotations/area', [ + 'uses' => 'Annotations\AreaReportController@store', + ]); + $router->post('{id}/reports/image-labels/basic', [ 'uses' => 'ImageLabels\BasicReportController@store', ]); diff --git a/src/Support/Reports/Projects/Annotations/AreaReport.php b/src/Support/Reports/Projects/Annotations/AreaReport.php new file mode 100644 index 000000000..4945ec0a1 --- /dev/null +++ b/src/Support/Reports/Projects/Annotations/AreaReport.php @@ -0,0 +1,30 @@ +1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature}).catch(function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n.delete({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]),angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e.delete=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]); \ No newline at end of file +angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e.delete=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature}).catch(function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n.delete({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]); \ No newline at end of file diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index 440d46537..40750979a 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -angular.module("dias.export",["dias.api","dias.ui"]),angular.module("dias.export").config(["$compileProvider",function(t){"use strict";t.debugInfoEnabled(!1)}]),angular.module("dias.export").controller("ProjectReportRequestController",["$scope","ProjectReport","ReportForm","PROJECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","full","csv"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees"],"image-labels":["separateLabelTrees"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{project_id:s})}}]),angular.module("dias.export").controller("TransectReportRequestController",["$scope","TransectReport","ReportForm","TRANSECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","full","csv"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees","annotationSession"],"image-labels":["separateLabelTrees","annotationSession"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1,annotationSession:null}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{transect_id:s})}}]),angular.module("dias.export").factory("ProjectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/projects/:project_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]),angular.module("dias.export").factory("ReportForm",["msg",function(t){"use strict";function e(t,e,a){this.variants=t,this.allowedOptions=e,this.defaultForm=a,this.data=angular.copy(this.defaultForm),this.state={success:!1,loading:!1},this.availableVariants=this.variants[this.data.type]}return e.prototype.handleRequestSuccess=function(){this.state.success=!0,this.state.loading=!1,this.error={}},e.prototype.handleRequestError=function(e){this.state.loading=!1,this.success=!1,422===e.status?this.error=e.data:t.responseError(e)},e.prototype.selectType=function(t){this.data.type=t,this.availableVariants=this.variants[t],this.data.variant=this.availableVariants[0]},e.prototype.wantsType=function(t){return this.data.type===t},e.prototype.wantsCombination=function(t,e){return this.wantsType(t)&&this.data.variant===e},e.prototype.submit=function(t,e){for(var a=this,s={},r=this.allowedOptions[this.data.type],n=r.length-1;n>=0;n--)s[r[n]]=this.data.options[r[n]];this.state.loading=!0,this.state.success=!1,e=angular.extend(e,{type:this.data.type,variant:this.data.variant}),t.requestGenericReport(e,s,function(){a.handleRequestSuccess()},function(t){a.handleRequestError(t)})},e}]),angular.module("dias.export").factory("TransectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/transects/:transect_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]); \ No newline at end of file +angular.module("dias.export",["dias.api","dias.ui"]),angular.module("dias.export").config(["$compileProvider",function(t){"use strict";t.debugInfoEnabled(!1)}]),angular.module("dias.export").controller("ProjectReportRequestController",["$scope","ProjectReport","ReportForm","PROJECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","full","csv","area"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees"],"image-labels":["separateLabelTrees"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{project_id:s})}}]),angular.module("dias.export").controller("TransectReportRequestController",["$scope","TransectReport","ReportForm","TRANSECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","full","csv","area"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees","annotationSession"],"image-labels":["separateLabelTrees","annotationSession"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1,annotationSession:null}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{transect_id:s})}}]),angular.module("dias.export").factory("ProjectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/projects/:project_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestAnnotationAreaReport:{method:"POST",params:{type:"annotations",variant:"area"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]),angular.module("dias.export").factory("ReportForm",["msg",function(t){"use strict";function e(t,e,a){this.variants=t,this.allowedOptions=e,this.defaultForm=a,this.data=angular.copy(this.defaultForm),this.state={success:!1,loading:!1},this.availableVariants=this.variants[this.data.type]}return e.prototype.handleRequestSuccess=function(){this.state.success=!0,this.state.loading=!1,this.error={}},e.prototype.handleRequestError=function(e){this.state.loading=!1,this.success=!1,422===e.status?this.error=e.data:t.responseError(e)},e.prototype.selectType=function(t){this.data.type=t,this.availableVariants=this.variants[t],this.data.variant=this.availableVariants[0]},e.prototype.wantsType=function(t){return this.data.type===t},e.prototype.wantsCombination=function(t,e){return this.wantsType(t)&&this.data.variant===e},e.prototype.submit=function(t,e){for(var a=this,s={},r=this.allowedOptions[this.data.type],n=r.length-1;n>=0;n--)s[r[n]]=this.data.options[r[n]];this.state.loading=!0,this.state.success=!1,e=angular.extend(e,{type:this.data.type,variant:this.data.variant}),t.requestGenericReport(e,s,function(){a.handleRequestSuccess()},function(t){a.handleRequestError(t)})},e}]),angular.module("dias.export").factory("TransectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/transects/:transect_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestAnnotationAreaReport:{method:"POST",params:{type:"annotations",variant:"area"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]); \ No newline at end of file diff --git a/src/resources/assets/js/export/controllers/ProjectReportRequestController.js b/src/resources/assets/js/export/controllers/ProjectReportRequestController.js index 587cffdb6..2e0988ab7 100644 --- a/src/resources/assets/js/export/controllers/ProjectReportRequestController.js +++ b/src/resources/assets/js/export/controllers/ProjectReportRequestController.js @@ -13,7 +13,8 @@ angular.module('dias.export').controller('ProjectReportRequestController', funct 'basic', 'extended', 'full', - 'csv' + 'csv', + 'area' ], 'image-labels': [ 'basic', diff --git a/src/resources/assets/js/export/controllers/TransectReportRequestController.js b/src/resources/assets/js/export/controllers/TransectReportRequestController.js index af22947bc..b3369febf 100644 --- a/src/resources/assets/js/export/controllers/TransectReportRequestController.js +++ b/src/resources/assets/js/export/controllers/TransectReportRequestController.js @@ -13,7 +13,8 @@ angular.module('dias.export').controller('TransectReportRequestController', func 'basic', 'extended', 'full', - 'csv' + 'csv', + 'area' ], 'image-labels': [ 'basic', diff --git a/src/resources/assets/js/export/factories/ProjectReport.js b/src/resources/assets/js/export/factories/ProjectReport.js index dabe2076b..1b4a0b528 100644 --- a/src/resources/assets/js/export/factories/ProjectReport.js +++ b/src/resources/assets/js/export/factories/ProjectReport.js @@ -42,6 +42,10 @@ angular.module('dias.export').factory('ProjectReport', function ($resource, URL) method: 'POST', params: {type: 'annotations', variant: 'csv'} }, + requestAnnotationAreaReport: { + method: 'POST', + params: {type: 'annotations', variant: 'area'} + }, requestBasicImageLabelReport: { method: 'POST', params: {type: 'image-labels', variant: 'basic'} diff --git a/src/resources/assets/js/export/factories/TransectReport.js b/src/resources/assets/js/export/factories/TransectReport.js index d8232ed9d..a21575596 100644 --- a/src/resources/assets/js/export/factories/TransectReport.js +++ b/src/resources/assets/js/export/factories/TransectReport.js @@ -42,6 +42,10 @@ angular.module('dias.export').factory('TransectReport', function ($resource, URL method: 'POST', params: {type: 'annotations', variant: 'csv'} }, + requestAnnotationAreaReport: { + method: 'POST', + params: {type: 'annotations', variant: 'area'} + }, requestBasicImageLabelReport: { method: 'POST', params: {type: 'image-labels', variant: 'basic'} diff --git a/src/resources/views/partials/reportTypeInfo.blade.php b/src/resources/views/partials/reportTypeInfo.blade.php new file mode 100644 index 000000000..7c475f35b --- /dev/null +++ b/src/resources/views/partials/reportTypeInfo.blade.php @@ -0,0 +1,21 @@ +
    + The basic annotation report contains graphical plots of abundances of the different annotation labels (as PDF). See the manual for the report schema. +
    +
    + The extended annotation report lists the abundances of annotation labels for each image (as XLSX). See the manual for the report schema. +
    +
    + The full annotation report lists the labels, shape and coordinates of all annotations (as XLSX). See the manual for the report schema. +
    +
    + The CSV annotation report is intended for subsequent processing and lists the annotation labels at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. +
    +
    + The annotation area report lists all rectangle, circle or polygon annotations with their dimensions and area in pixels (as XLSX). If a laserpoint detection was performed, the dimensions in m and area in m² is included, too. See the manual for the report schema. +
    +
    + The basic image label report lists the image labels of all images (as XLSX). See the manual for the report schema. +
    +
    + The CSV image label report is intended for subsequent processing and lists the image labels at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. +
    diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index 7cf4e9a67..e6ee09f30 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -49,24 +49,7 @@
    -
    - The basic annotation report contains graphical plots of abundances of the different annotation labels (as PDF for each transect). See the manual for the report schema. -
    -
    - The extended annotation report lists the abundances of annotation labels for each image of this transect (as XLSX for each transect). See the manual for the report schema. -
    -
    - The full annotation report lists the labels, shape and coordinates of all annotations of this transect (as XLSX for each transect). See the manual for the report schema. -
    -
    - The CSV annotation report is intended for subsequent processing and lists the annotation labels of this transect at the highest possible resolution (as CSV files in a ZIP archive for each transect). See the manual for the report schema. -
    -
    - The basic image label report lists the image labels of all images of this transect (as XLSX for each transect). See the manual for the report schema. -
    -
    - The CSV image label report is intended for subsequent processing and lists the image labels of this transect at the highest possible resolution (as CSV files in a ZIP archive for each transect). See the manual for the report schema. -
    + @include('export::partials.reportTypeInfo')
    diff --git a/src/resources/views/transectReports.blade.php b/src/resources/views/transectReports.blade.php index be0eb9afc..b0fb6322f 100644 --- a/src/resources/views/transectReports.blade.php +++ b/src/resources/views/transectReports.blade.php @@ -49,24 +49,7 @@
    -
    - The basic annotation report contains graphical plots of abundances of the different annotation labels (as PDF). See the manual for the report schema. -
    -
    - The extended annotation report lists the abundances of annotation labels for each image of this transect (as XLSX). See the manual for the report schema. -
    -
    - The full annotation report lists the labels, shape and coordinates of all annotations of this transect (as XLSX). See the manual for the report schema. -
    -
    - The CSV annotation report is intended for subsequent processing and lists the annotation labels of this transect at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. -
    -
    - The basic image label report lists the image labels of all images of this transect (as XLSX). See the manual for the report schema. -
    -
    - The CSV image label report is intended for subsequent processing and lists the image labels of this transect at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. -
    + @include('export::partials.reportTypeInfo')
    diff --git a/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsAreaReportControllerTest.php b/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsAreaReportControllerTest.php new file mode 100644 index 000000000..facf95127 --- /dev/null +++ b/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsAreaReportControllerTest.php @@ -0,0 +1,38 @@ +project()->id; + + $this->post("api/v1/projects/{$id}/reports/annotations/area") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateReportJob::class); + $this->beGuest(); + $this->post("api/v1/projects/{$id}/reports/annotations/area") + ->assertResponseOk(); + + $job = $this->dispatchedJobs[0]; + $report = $job->report; + $this->assertInstanceOf(AreaReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(false, $report->options['exportArea']); + + $this->post("api/v1/projects/{$id}/reports/annotations/area", [ + 'exportArea' => true + ]) + ->assertResponseOk(); + + $job = $this->dispatchedJobs[1]; + $report = $job->report; + $this->assertInstanceOf(AreaReport::class, $report); + $this->assertEquals($id, $report->project->id); + $this->assertEquals(true, $report->options['exportArea']); + } +} diff --git a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsAreaReportControllerTest.php b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsAreaReportControllerTest.php new file mode 100644 index 000000000..44cc0fe77 --- /dev/null +++ b/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsAreaReportControllerTest.php @@ -0,0 +1,38 @@ +transect()->id; + + $this->post("api/v1/transects/{$id}/reports/annotations/area") + ->assertResponseStatus(401); + + $this->expectsJobs(GenerateReportJob::class); + $this->beGuest(); + $this->post("api/v1/transects/{$id}/reports/annotations/area") + ->assertResponseOk(); + + $job = $this->dispatchedJobs[0]; + $report = $job->report; + $this->assertInstanceOf(AreaReport::class, $report); + $this->assertEquals($id, $report->transect->id); + $this->assertEquals(false, $report->options['exportArea']); + + $this->post("api/v1/transects/{$id}/reports/annotations/area", [ + 'exportArea' => true + ]) + ->assertResponseOk(); + + $job = $this->dispatchedJobs[1]; + $report = $job->report; + $this->assertInstanceOf(AreaReport::class, $report); + $this->assertEquals($id, $report->transect->id); + $this->assertEquals(true, $report->options['exportArea']); + } +} diff --git a/tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsAreaReportTest.php b/tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsAreaReportTest.php new file mode 100644 index 000000000..eecbae176 --- /dev/null +++ b/tests/Support/Reports/Projects/Annotations/ExportModuleSupportReportsProjectsAnnotationsAreaReportTest.php @@ -0,0 +1,14 @@ +assertEquals('annotation area report', $report->getName()); + $this->assertEquals('annotation_area_report', $report->getFilename()); + } +} From 3ab2e347a37cc4b2a45c155e408a18e4b47ef666 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 3 Nov 2016 12:29:25 +0100 Subject: [PATCH 072/407] Add annotation area report schema documentation --- src/public/assets/scripts/annotations.js | 2 +- src/public/assets/scripts/main.js | 2 +- .../ProjectReportRequestController.js | 4 +-- .../TransectReportRequestController.js | 4 +-- .../manual/tutorials/reports-schema.blade.php | 34 +++++++++++++++++++ 5 files changed, 40 insertions(+), 6 deletions(-) diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index 28553e052..a9348805f 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1 @@ -angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e.delete=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature}).catch(function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n.delete({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]); \ No newline at end of file +angular.module("dias.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("dias.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature}).catch(function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n.delete({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]),angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e.delete=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]); \ No newline at end of file diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index 40750979a..14d55bb30 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -angular.module("dias.export",["dias.api","dias.ui"]),angular.module("dias.export").config(["$compileProvider",function(t){"use strict";t.debugInfoEnabled(!1)}]),angular.module("dias.export").controller("ProjectReportRequestController",["$scope","ProjectReport","ReportForm","PROJECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","full","csv","area"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees"],"image-labels":["separateLabelTrees"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{project_id:s})}}]),angular.module("dias.export").controller("TransectReportRequestController",["$scope","TransectReport","ReportForm","TRANSECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","full","csv","area"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees","annotationSession"],"image-labels":["separateLabelTrees","annotationSession"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1,annotationSession:null}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{transect_id:s})}}]),angular.module("dias.export").factory("ProjectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/projects/:project_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestAnnotationAreaReport:{method:"POST",params:{type:"annotations",variant:"area"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]),angular.module("dias.export").factory("ReportForm",["msg",function(t){"use strict";function e(t,e,a){this.variants=t,this.allowedOptions=e,this.defaultForm=a,this.data=angular.copy(this.defaultForm),this.state={success:!1,loading:!1},this.availableVariants=this.variants[this.data.type]}return e.prototype.handleRequestSuccess=function(){this.state.success=!0,this.state.loading=!1,this.error={}},e.prototype.handleRequestError=function(e){this.state.loading=!1,this.success=!1,422===e.status?this.error=e.data:t.responseError(e)},e.prototype.selectType=function(t){this.data.type=t,this.availableVariants=this.variants[t],this.data.variant=this.availableVariants[0]},e.prototype.wantsType=function(t){return this.data.type===t},e.prototype.wantsCombination=function(t,e){return this.wantsType(t)&&this.data.variant===e},e.prototype.submit=function(t,e){for(var a=this,s={},r=this.allowedOptions[this.data.type],n=r.length-1;n>=0;n--)s[r[n]]=this.data.options[r[n]];this.state.loading=!0,this.state.success=!1,e=angular.extend(e,{type:this.data.type,variant:this.data.variant}),t.requestGenericReport(e,s,function(){a.handleRequestSuccess()},function(t){a.handleRequestError(t)})},e}]),angular.module("dias.export").factory("TransectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/transects/:transect_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestAnnotationAreaReport:{method:"POST",params:{type:"annotations",variant:"area"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]); \ No newline at end of file +angular.module("dias.export",["dias.api","dias.ui"]),angular.module("dias.export").config(["$compileProvider",function(t){"use strict";t.debugInfoEnabled(!1)}]),angular.module("dias.export").controller("ProjectReportRequestController",["$scope","ProjectReport","ReportForm","PROJECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","area","full","csv"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees"],"image-labels":["separateLabelTrees"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{project_id:s})}}]),angular.module("dias.export").controller("TransectReportRequestController",["$scope","TransectReport","ReportForm","TRANSECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","area","full","csv"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees","annotationSession"],"image-labels":["separateLabelTrees","annotationSession"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1,annotationSession:null}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{transect_id:s})}}]),angular.module("dias.export").factory("ProjectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/projects/:project_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestAnnotationAreaReport:{method:"POST",params:{type:"annotations",variant:"area"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]),angular.module("dias.export").factory("ReportForm",["msg",function(t){"use strict";function e(t,e,a){this.variants=t,this.allowedOptions=e,this.defaultForm=a,this.data=angular.copy(this.defaultForm),this.state={success:!1,loading:!1},this.availableVariants=this.variants[this.data.type]}return e.prototype.handleRequestSuccess=function(){this.state.success=!0,this.state.loading=!1,this.error={}},e.prototype.handleRequestError=function(e){this.state.loading=!1,this.success=!1,422===e.status?this.error=e.data:t.responseError(e)},e.prototype.selectType=function(t){this.data.type=t,this.availableVariants=this.variants[t],this.data.variant=this.availableVariants[0]},e.prototype.wantsType=function(t){return this.data.type===t},e.prototype.wantsCombination=function(t,e){return this.wantsType(t)&&this.data.variant===e},e.prototype.submit=function(t,e){for(var a=this,s={},r=this.allowedOptions[this.data.type],n=r.length-1;n>=0;n--)s[r[n]]=this.data.options[r[n]];this.state.loading=!0,this.state.success=!1,e=angular.extend(e,{type:this.data.type,variant:this.data.variant}),t.requestGenericReport(e,s,function(){a.handleRequestSuccess()},function(t){a.handleRequestError(t)})},e}]),angular.module("dias.export").factory("TransectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/transects/:transect_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestAnnotationAreaReport:{method:"POST",params:{type:"annotations",variant:"area"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]); \ No newline at end of file diff --git a/src/resources/assets/js/export/controllers/ProjectReportRequestController.js b/src/resources/assets/js/export/controllers/ProjectReportRequestController.js index 2e0988ab7..8204778bd 100644 --- a/src/resources/assets/js/export/controllers/ProjectReportRequestController.js +++ b/src/resources/assets/js/export/controllers/ProjectReportRequestController.js @@ -12,9 +12,9 @@ angular.module('dias.export').controller('ProjectReportRequestController', funct 'annotations': [ 'basic', 'extended', + 'area', 'full', - 'csv', - 'area' + 'csv' ], 'image-labels': [ 'basic', diff --git a/src/resources/assets/js/export/controllers/TransectReportRequestController.js b/src/resources/assets/js/export/controllers/TransectReportRequestController.js index b3369febf..5c9f38901 100644 --- a/src/resources/assets/js/export/controllers/TransectReportRequestController.js +++ b/src/resources/assets/js/export/controllers/TransectReportRequestController.js @@ -12,9 +12,9 @@ angular.module('dias.export').controller('TransectReportRequestController', func 'annotations': [ 'basic', 'extended', + 'area', 'full', - 'csv', - 'area' + 'csv' ], 'image-labels': [ 'basic', diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index bf4915594..6cd76f8d0 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -58,6 +58,40 @@
  • Label abundance
  • +

    Area

    + +

    + The annotation area report is an XLSX spreadsheet of all area annotations (rectangle, circle and polygon) with their width and height in pixels (px) and their area in px². If a laserpoint detection was performed, the width and height in m and the area in m² is included as well. +

    +

    + The computed area of self-intersecting polygons like these will not be correct! + + + + + + + +

    +

    + For a single worksheet (not separated by label tree) the first line contains the transect name. For multiple worksheets the first lines contain the name of the respective label tree. The second line always contains the column headers. The columns are as follows: +

    +
      +
    1. Annotation ID
    2. +
    3. Annotation shape ID
    4. +
    5. Annotation shape name
    6. +
    7. Label IDs comma separated list of IDs of all labels that are attached to the annotation
    8. +
    9. Label names comma separated list of names of all labels that are attached to the annotation
    10. +
    11. Image ID
    12. +
    13. Image filename
    14. +
    15. Annotation width (m) Rectangle: the longer edge. Circle: the diameter. Polygon: width of the minimum (non-rotated) bounding rectangle.
    16. +
    17. Annotation height (m) Rectangle: the shorter edge. Circle: the diameter. Polygon: height of the minimum (non-rotated) bounding rectangle.
    18. +
    19. Annotation area (m²)
    20. +
    21. Annotation width (px) See the width in m for the interpretation of this value for different shapes.
    22. +
    23. Annotation height (px) See the height in m for the interpretation of this value for different shapes.
    24. +
    25. Annotation area (px²)
    26. +
    +

    Full

    From 020d1b93bc725486e277ee910488c5cf822e209e Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 3 Nov 2016 12:39:17 +0100 Subject: [PATCH 073/407] Remove unnecessary assignment of image transect The original plan was to read the image dimensions from the image files. This requires the full image file path with the URL of the transect. However, the laserpoint detection always stores the number of pixels of an image in the DB. So this information can be used instead of reading the image and the transect URL is no longer required. --- src/Support/Reports/Transects/Annotations/AreaReport.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/Support/Reports/Transects/Annotations/AreaReport.php b/src/Support/Reports/Transects/Annotations/AreaReport.php index a8238aa8c..beb4650db 100644 --- a/src/Support/Reports/Transects/Annotations/AreaReport.php +++ b/src/Support/Reports/Transects/Annotations/AreaReport.php @@ -53,11 +53,6 @@ public function generateReport() ->select('id', 'filename', 'attrs') ->get() ->keyBy('id'); - // Manually assign the transect model to the images so there is no DB query for - // each single image when we require the full image URL later on. - $this->images->each(function ($image) { - $image->transect = $this->transect; - }); if ($this->shouldSeparateLabelTrees()) { $rows = $rows->groupBy('label_tree_id'); From 54f1b7f5a518692817127224e316a67474db0a0d Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 16 Nov 2016 09:34:13 +0100 Subject: [PATCH 074/407] Add cachebusting for assets --- src/resources/views/annotationsScripts.blade.php | 2 +- src/resources/views/projectReports.blade.php | 4 ++-- src/resources/views/transectReports.blade.php | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/resources/views/annotationsScripts.blade.php b/src/resources/views/annotationsScripts.blade.php index ebc11709d..6a72c597c 100644 --- a/src/resources/views/annotationsScripts.blade.php +++ b/src/resources/views/annotationsScripts.blade.php @@ -1,4 +1,4 @@ - + diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index 7cf4e9a67..851fa983a 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -3,14 +3,14 @@ @section('title')Reports for {{ $project->name }}@stop @push('scripts') - + @endpush @push('styles') - + @endpush @section('navbar') diff --git a/src/resources/views/transectReports.blade.php b/src/resources/views/transectReports.blade.php index be0eb9afc..5a8c0cc13 100644 --- a/src/resources/views/transectReports.blade.php +++ b/src/resources/views/transectReports.blade.php @@ -3,14 +3,14 @@ @section('title')Reports for {{ $transect->name }}@stop @push('scripts') - + @endpush @push('styles') - + @endpush @section('navbar') From 736b495f751d799d0fde202a3c6f15c2758a85ee Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 16 Dec 2016 16:25:44 +0100 Subject: [PATCH 075/407] Add namespaces for tests --- ...ableReportTest.php => AvailableReportTest.php} | 8 ++++++-- ...ollerTest.php => AreaReportControllerTest.php} | 6 ++++-- ...llerTest.php => BasicReportControllerTest.php} | 5 ++++- ...rollerTest.php => CsvReportControllerTest.php} | 6 ++++-- ...rTest.php => ExtendedReportControllerTest.php} | 6 ++++-- ...ollerTest.php => FullReportControllerTest.php} | 6 ++++-- ...llerTest.php => BasicReportControllerTest.php} | 6 ++++-- ...rollerTest.php => CsvReportControllerTest.php} | 6 ++++-- ...ollerTest.php => AreaReportControllerTest.php} | 6 ++++-- ...llerTest.php => BasicReportControllerTest.php} | 6 ++++-- ...rollerTest.php => CsvReportControllerTest.php} | 6 ++++-- ...rTest.php => ExtendedReportControllerTest.php} | 6 ++++-- ...ollerTest.php => FullReportControllerTest.php} | 6 ++++-- ...ollerTest.php => ExportAreaControllerTest.php} | 7 +++++-- ...llerTest.php => BasicReportControllerTest.php} | 6 ++++-- ...rollerTest.php => CsvReportControllerTest.php} | 6 ++++-- ...trollersViewsTransectsReportControllerTest.php | 6 +++++- ...rTest.php => ProjectsReportControllerTest.php} | 6 +++++- ...erateReportTest.php => GenerateReportTest.php} | 8 ++++++-- ...tionsAreaReportTest.php => AreaReportTest.php} | 7 +++++-- ...onsBasicReportTest.php => BasicReportTest.php} | 7 +++++-- ...tationsCsvReportTest.php => CsvReportTest.php} | 7 +++++-- ...endedReportTest.php => ExtendedReportTest.php} | 7 +++++-- ...tionsFullReportTest.php => FullReportTest.php} | 7 +++++-- ...elsBasicReportTest.php => BasicReportTest.php} | 7 +++++-- ...ortReportsProjectsImageLabelsCsvReportTest.php | 7 +++++-- ...portsProjectsReportTest.php => ReportTest.php} | 11 ++++++++++- ...upportReportsReportTest.php => ReportTest.php} | 10 ++++++++-- ...tionsAreaReportTest.php => AreaReportTest.php} | 13 ++++++++++++- ...onsBasicReportTest.php => BasicReportTest.php} | 14 ++++++++++++-- ...tationsCsvReportTest.php => CsvReportTest.php} | 15 ++++++++++++++- ...endedReportTest.php => ExtendedReportTest.php} | 13 ++++++++++++- ...tionsFullReportTest.php => FullReportTest.php} | 13 ++++++++++++- ...tsAnnotationsReportTest.php => ReportTest.php} | 14 +++++++++++++- ...elsBasicReportTest.php => BasicReportTest.php} | 12 +++++++++++- ...rtReportsTransectsImageLabelsCsvReportTest.php | 14 +++++++++++++- ...ortsTransectsReportTest.php => ReportTest.php} | 8 +++++++- ...ortModuleTransectTest.php => TransectTest.php} | 12 ++++++++---- 38 files changed, 250 insertions(+), 66 deletions(-) rename tests/{ExportModuleAvailableReportTest.php => AvailableReportTest.php} (75%) rename tests/Http/Controllers/Api/Projects/Annotations/{ExportModuleHttpControllersApiProjectsAnnotationsAreaReportControllerTest.php => AreaReportControllerTest.php} (88%) rename tests/Http/Controllers/Api/Projects/Annotations/{ExportModuleHttpControllersApiProjectsAnnotationsBasicReportControllerTest.php => BasicReportControllerTest.php} (88%) rename tests/Http/Controllers/Api/Projects/Annotations/{ExportModuleHttpControllersApiProjectsAnnotationsCsvReportControllerTest.php => CsvReportControllerTest.php} (88%) rename tests/Http/Controllers/Api/Projects/Annotations/{ExportModuleHttpControllersApiProjectsAnnotationsExtendedReportControllerTest.php => ExtendedReportControllerTest.php} (88%) rename tests/Http/Controllers/Api/Projects/Annotations/{ExportModuleHttpControllersApiProjectsAnnotationsFullReportControllerTest.php => FullReportControllerTest.php} (88%) rename tests/Http/Controllers/Api/Projects/ImageLabels/{ExportModuleHttpControllersApiProjectsImageLabelsBasicReportControllerTest.php => BasicReportControllerTest.php} (88%) rename tests/Http/Controllers/Api/Projects/ImageLabels/{ExportModuleHttpControllersApiProjectsImageLabelsCsvReportControllerTest.php => CsvReportControllerTest.php} (89%) rename tests/Http/Controllers/Api/Transects/Annotations/{ExportModuleHttpControllersApiTransectsAnnotationsAreaReportControllerTest.php => AreaReportControllerTest.php} (88%) rename tests/Http/Controllers/Api/Transects/Annotations/{ExportModuleHttpControllersApiTransectsAnnotationsBasicReportControllerTest.php => BasicReportControllerTest.php} (88%) rename tests/Http/Controllers/Api/Transects/Annotations/{ExportModuleHttpControllersApiTransectsAnnotationsCsvReportControllerTest.php => CsvReportControllerTest.php} (88%) rename tests/Http/Controllers/Api/Transects/Annotations/{ExportModuleHttpControllersApiTransectsAnnotationsExtendedReportControllerTest.php => ExtendedReportControllerTest.php} (88%) rename tests/Http/Controllers/Api/Transects/Annotations/{ExportModuleHttpControllersApiTransectsAnnotationsFullReportControllerTest.php => FullReportControllerTest.php} (88%) rename tests/Http/Controllers/Api/Transects/{ExportModuleHttpControllersApiTransectsExportAreaControllerTest.php => ExportAreaControllerTest.php} (94%) rename tests/Http/Controllers/Api/Transects/ImageLabels/{ExportModuleHttpControllersApiProjectsImageLabelsBasicReportControllerTest.php => BasicReportControllerTest.php} (74%) rename tests/Http/Controllers/Api/Transects/ImageLabels/{ExportModuleHttpControllersApiProjectsImageLabelsCsvReportControllerTest.php => CsvReportControllerTest.php} (75%) rename tests/Http/Controllers/Views/{ExportModuleHttpControllersViewsProjectsReportControllerTest.php => ProjectsReportControllerTest.php} (74%) rename tests/Jobs/{ExportModuleJobsGenerateReportTest.php => GenerateReportTest.php} (81%) rename tests/Support/Reports/Projects/Annotations/{ExportModuleSupportReportsProjectsAnnotationsAreaReportTest.php => AreaReportTest.php} (69%) rename tests/Support/Reports/Projects/Annotations/{ExportModuleSupportReportsProjectsAnnotationsBasicReportTest.php => BasicReportTest.php} (69%) rename tests/Support/Reports/Projects/Annotations/{ExportModuleSupportReportsProjectsAnnotationsCsvReportTest.php => CsvReportTest.php} (68%) rename tests/Support/Reports/Projects/Annotations/{ExportModuleSupportReportsProjectsAnnotationsExtendedReportTest.php => ExtendedReportTest.php} (69%) rename tests/Support/Reports/Projects/Annotations/{ExportModuleSupportReportsProjectsAnnotationsFullReportTest.php => FullReportTest.php} (69%) rename tests/Support/Reports/Projects/ImageLabels/{ExportModuleSupportReportsProjectsImageLabelsBasicReportTest.php => BasicReportTest.php} (69%) rename tests/Support/Reports/Projects/{ExportModuleSupportReportsProjectsReportTest.php => ReportTest.php} (90%) rename tests/Support/Reports/{ExportModuleSupportReportsReportTest.php => ReportTest.php} (91%) rename tests/Support/Reports/Transects/Annotations/{ExportModuleSupportReportsTransectsAnnotationsAreaReportTest.php => AreaReportTest.php} (96%) rename tests/Support/Reports/Transects/Annotations/{ExportModuleSupportReportsTransectsAnnotationsBasicReportTest.php => BasicReportTest.php} (92%) rename tests/Support/Reports/Transects/Annotations/{ExportModuleSupportReportsTransectsAnnotationsCsvReportTest.php => CsvReportTest.php} (94%) rename tests/Support/Reports/Transects/Annotations/{ExportModuleSupportReportsTransectsAnnotationsExtendedReportTest.php => ExtendedReportTest.php} (93%) rename tests/Support/Reports/Transects/Annotations/{ExportModuleSupportReportsTransectsAnnotationsFullReportTest.php => FullReportTest.php} (93%) rename tests/Support/Reports/Transects/Annotations/{ExportModuleSupportReportsTransectsAnnotationsReportTest.php => ReportTest.php} (93%) rename tests/Support/Reports/Transects/ImageLabels/{ExportModuleSupportReportsTransectsImageLabelsBasicReportTest.php => BasicReportTest.php} (93%) rename tests/Support/Reports/Transects/{ExportModuleSupportReportsTransectsReportTest.php => ReportTest.php} (81%) rename tests/{ExportModuleTransectTest.php => TransectTest.php} (86%) diff --git a/tests/ExportModuleAvailableReportTest.php b/tests/AvailableReportTest.php similarity index 75% rename from tests/ExportModuleAvailableReportTest.php rename to tests/AvailableReportTest.php index 2176d9bea..6e63d4fc5 100644 --- a/tests/ExportModuleAvailableReportTest.php +++ b/tests/AvailableReportTest.php @@ -1,10 +1,14 @@ once()->andReturn(false); diff --git a/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsAreaReportControllerTest.php b/tests/Http/Controllers/Api/Projects/Annotations/AreaReportControllerTest.php similarity index 88% rename from tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsAreaReportControllerTest.php rename to tests/Http/Controllers/Api/Projects/Annotations/AreaReportControllerTest.php index facf95127..a3ab0e1a0 100644 --- a/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsAreaReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/Annotations/AreaReportControllerTest.php @@ -1,11 +1,13 @@ project()->id; diff --git a/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsBasicReportControllerTest.php b/tests/Http/Controllers/Api/Projects/Annotations/BasicReportControllerTest.php similarity index 88% rename from tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsBasicReportControllerTest.php rename to tests/Http/Controllers/Api/Projects/Annotations/BasicReportControllerTest.php index 5b2e39cda..1a09a1dea 100644 --- a/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsBasicReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/Annotations/BasicReportControllerTest.php @@ -1,9 +1,12 @@ project()->id; diff --git a/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsExtendedReportControllerTest.php b/tests/Http/Controllers/Api/Projects/Annotations/ExtendedReportControllerTest.php similarity index 88% rename from tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsExtendedReportControllerTest.php rename to tests/Http/Controllers/Api/Projects/Annotations/ExtendedReportControllerTest.php index 845d2213f..663264bbf 100644 --- a/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsExtendedReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/Annotations/ExtendedReportControllerTest.php @@ -1,11 +1,13 @@ project()->id; diff --git a/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsFullReportControllerTest.php b/tests/Http/Controllers/Api/Projects/Annotations/FullReportControllerTest.php similarity index 88% rename from tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsFullReportControllerTest.php rename to tests/Http/Controllers/Api/Projects/Annotations/FullReportControllerTest.php index cbd7418a5..054cb0694 100644 --- a/tests/Http/Controllers/Api/Projects/Annotations/ExportModuleHttpControllersApiProjectsAnnotationsFullReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/Annotations/FullReportControllerTest.php @@ -1,11 +1,13 @@ project()->id; diff --git a/tests/Http/Controllers/Api/Projects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsBasicReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ImageLabels/BasicReportControllerTest.php similarity index 88% rename from tests/Http/Controllers/Api/Projects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsBasicReportControllerTest.php rename to tests/Http/Controllers/Api/Projects/ImageLabels/BasicReportControllerTest.php index e1b42a784..a05bcb99c 100644 --- a/tests/Http/Controllers/Api/Projects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsBasicReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/ImageLabels/BasicReportControllerTest.php @@ -1,11 +1,13 @@ project()->id; diff --git a/tests/Http/Controllers/Api/Projects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsCsvReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ImageLabels/CsvReportControllerTest.php similarity index 89% rename from tests/Http/Controllers/Api/Projects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsCsvReportControllerTest.php rename to tests/Http/Controllers/Api/Projects/ImageLabels/CsvReportControllerTest.php index 671f41678..dd73b2e1a 100644 --- a/tests/Http/Controllers/Api/Projects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsCsvReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/ImageLabels/CsvReportControllerTest.php @@ -1,11 +1,13 @@ project()->id; diff --git a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsAreaReportControllerTest.php b/tests/Http/Controllers/Api/Transects/Annotations/AreaReportControllerTest.php similarity index 88% rename from tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsAreaReportControllerTest.php rename to tests/Http/Controllers/Api/Transects/Annotations/AreaReportControllerTest.php index 44cc0fe77..ea373af1f 100644 --- a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsAreaReportControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/Annotations/AreaReportControllerTest.php @@ -1,11 +1,13 @@ transect()->id; diff --git a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsBasicReportControllerTest.php b/tests/Http/Controllers/Api/Transects/Annotations/BasicReportControllerTest.php similarity index 88% rename from tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsBasicReportControllerTest.php rename to tests/Http/Controllers/Api/Transects/Annotations/BasicReportControllerTest.php index a01673b21..4f2642d72 100644 --- a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsBasicReportControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/Annotations/BasicReportControllerTest.php @@ -1,11 +1,13 @@ transect()->id; diff --git a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsCsvReportControllerTest.php b/tests/Http/Controllers/Api/Transects/Annotations/CsvReportControllerTest.php similarity index 88% rename from tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsCsvReportControllerTest.php rename to tests/Http/Controllers/Api/Transects/Annotations/CsvReportControllerTest.php index 390f7c885..ecc334c95 100644 --- a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsCsvReportControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/Annotations/CsvReportControllerTest.php @@ -1,11 +1,13 @@ transect()->id; diff --git a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsExtendedReportControllerTest.php b/tests/Http/Controllers/Api/Transects/Annotations/ExtendedReportControllerTest.php similarity index 88% rename from tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsExtendedReportControllerTest.php rename to tests/Http/Controllers/Api/Transects/Annotations/ExtendedReportControllerTest.php index 0d1899ad6..0cd375f8f 100644 --- a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsExtendedReportControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/Annotations/ExtendedReportControllerTest.php @@ -1,11 +1,13 @@ transect()->id; diff --git a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsFullReportControllerTest.php b/tests/Http/Controllers/Api/Transects/Annotations/FullReportControllerTest.php similarity index 88% rename from tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsFullReportControllerTest.php rename to tests/Http/Controllers/Api/Transects/Annotations/FullReportControllerTest.php index ff5776a58..fd3e6bb6d 100644 --- a/tests/Http/Controllers/Api/Transects/Annotations/ExportModuleHttpControllersApiTransectsAnnotationsFullReportControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/Annotations/FullReportControllerTest.php @@ -1,11 +1,13 @@ transect()->id; diff --git a/tests/Http/Controllers/Api/Transects/ExportModuleHttpControllersApiTransectsExportAreaControllerTest.php b/tests/Http/Controllers/Api/Transects/ExportAreaControllerTest.php similarity index 94% rename from tests/Http/Controllers/Api/Transects/ExportModuleHttpControllersApiTransectsExportAreaControllerTest.php rename to tests/Http/Controllers/Api/Transects/ExportAreaControllerTest.php index b2803f428..dc5a34235 100644 --- a/tests/Http/Controllers/Api/Transects/ExportModuleHttpControllersApiTransectsExportAreaControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/ExportAreaControllerTest.php @@ -1,9 +1,12 @@ transect()); diff --git a/tests/Http/Controllers/Api/Transects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsBasicReportControllerTest.php b/tests/Http/Controllers/Api/Transects/ImageLabels/BasicReportControllerTest.php similarity index 74% rename from tests/Http/Controllers/Api/Transects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsBasicReportControllerTest.php rename to tests/Http/Controllers/Api/Transects/ImageLabels/BasicReportControllerTest.php index 86b73317d..fb046f737 100644 --- a/tests/Http/Controllers/Api/Transects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsBasicReportControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/ImageLabels/BasicReportControllerTest.php @@ -1,10 +1,12 @@ transect()->id; diff --git a/tests/Http/Controllers/Api/Transects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsCsvReportControllerTest.php b/tests/Http/Controllers/Api/Transects/ImageLabels/CsvReportControllerTest.php similarity index 75% rename from tests/Http/Controllers/Api/Transects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsCsvReportControllerTest.php rename to tests/Http/Controllers/Api/Transects/ImageLabels/CsvReportControllerTest.php index 149bcec39..523cbe089 100644 --- a/tests/Http/Controllers/Api/Transects/ImageLabels/ExportModuleHttpControllersApiProjectsImageLabelsCsvReportControllerTest.php +++ b/tests/Http/Controllers/Api/Transects/ImageLabels/CsvReportControllerTest.php @@ -1,10 +1,12 @@ transect()->id; diff --git a/tests/Http/Controllers/Views/ExportModuleHttpControllersViewsTransectsReportControllerTest.php b/tests/Http/Controllers/Views/ExportModuleHttpControllersViewsTransectsReportControllerTest.php index cca0711ac..04b67728c 100644 --- a/tests/Http/Controllers/Views/ExportModuleHttpControllersViewsTransectsReportControllerTest.php +++ b/tests/Http/Controllers/Views/ExportModuleHttpControllersViewsTransectsReportControllerTest.php @@ -1,7 +1,11 @@ transect()->id; diff --git a/tests/Http/Controllers/Views/ExportModuleHttpControllersViewsProjectsReportControllerTest.php b/tests/Http/Controllers/Views/ProjectsReportControllerTest.php similarity index 74% rename from tests/Http/Controllers/Views/ExportModuleHttpControllersViewsProjectsReportControllerTest.php rename to tests/Http/Controllers/Views/ProjectsReportControllerTest.php index 350e92fcb..2230a6e51 100644 --- a/tests/Http/Controllers/Views/ExportModuleHttpControllersViewsProjectsReportControllerTest.php +++ b/tests/Http/Controllers/Views/ProjectsReportControllerTest.php @@ -1,7 +1,11 @@ project()->id; diff --git a/tests/Jobs/ExportModuleJobsGenerateReportTest.php b/tests/Jobs/GenerateReportTest.php similarity index 81% rename from tests/Jobs/ExportModuleJobsGenerateReportTest.php rename to tests/Jobs/GenerateReportTest.php index 3b9e5c583..21b479c3f 100644 --- a/tests/Jobs/ExportModuleJobsGenerateReportTest.php +++ b/tests/Jobs/GenerateReportTest.php @@ -1,12 +1,16 @@ setExpectedException(Exception::class); diff --git a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsAreaReportTest.php b/tests/Support/Reports/Transects/Annotations/AreaReportTest.php similarity index 96% rename from tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsAreaReportTest.php rename to tests/Support/Reports/Transects/Annotations/AreaReportTest.php index 03dcff57d..752d9d81d 100644 --- a/tests/Support/Reports/Transects/Annotations/ExportModuleSupportReportsTransectsAnnotationsAreaReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/AreaReportTest.php @@ -1,11 +1,22 @@ [Transect::EXPORT_AREA_ATTRIBUTE => [1, 2, 3, 4]] ]); $exportTransect = Transect::convert($transect); From 73da42e53368418b2e086c933a2cce519743d6d6 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 6 Jan 2017 14:17:40 +0100 Subject: [PATCH 076/407] Rename the column with expanded label names "label hierarchy" --- .../Transects/Annotations/CsvReport.php | 2 +- .../Transects/Annotations/ExtendedReport.php | 2 +- .../Transects/ImageLabels/BasicReport.php | 2 +- .../Transects/ImageLabels/CsvReport.php | 2 +- .../manual/tutorials/reports-schema.blade.php | 36 ++++++++++--------- .../Transects/Annotations/CsvReportTest.php | 2 +- .../Annotations/ExtendedReportTest.php | 2 +- .../Transects/ImageLabels/BasicReportTest.php | 2 +- ...elsCsvReportTest.php => CsvReportTest.php} | 2 +- 9 files changed, 27 insertions(+), 25 deletions(-) rename tests/Support/Reports/Transects/ImageLabels/{ExportModuleSupportReportsTransectsImageLabelsCsvReportTest.php => CsvReportTest.php} (99%) diff --git a/src/Support/Reports/Transects/Annotations/CsvReport.php b/src/Support/Reports/Transects/Annotations/CsvReport.php index 4e0aea42b..9aadf754a 100644 --- a/src/Support/Reports/Transects/Annotations/CsvReport.php +++ b/src/Support/Reports/Transects/Annotations/CsvReport.php @@ -101,7 +101,7 @@ protected function createCsv($rows) $csv->put([ 'annotation_label_id', 'label_id', - 'label_name', + 'label_hierarchy', 'user_id', 'firstname', 'lastname', diff --git a/src/Support/Reports/Transects/Annotations/ExtendedReport.php b/src/Support/Reports/Transects/Annotations/ExtendedReport.php index 9e68ad2ff..1d77c3724 100644 --- a/src/Support/Reports/Transects/Annotations/ExtendedReport.php +++ b/src/Support/Reports/Transects/Annotations/ExtendedReport.php @@ -85,7 +85,7 @@ protected function createCsv($rows, $title = '') { $csv = CsvFile::makeTmp(); $csv->put([$title]); - $csv->put(['image_filename', 'label_name', 'annotation_count']); + $csv->put(['image_filename', 'label_hierarchy', 'annotation_count']); foreach ($rows as $row) { $csv->put([ diff --git a/src/Support/Reports/Transects/ImageLabels/BasicReport.php b/src/Support/Reports/Transects/ImageLabels/BasicReport.php index fdd67bd24..01a89f2bf 100644 --- a/src/Support/Reports/Transects/ImageLabels/BasicReport.php +++ b/src/Support/Reports/Transects/ImageLabels/BasicReport.php @@ -86,7 +86,7 @@ protected function createCsv($rows, $title = '') { $csv = CsvFile::makeTmp(); $csv->put([$title]); - $csv->put(['image_id', 'image_filename', 'label_names']); + $csv->put(['image_id', 'image_filename', 'label_hierarchies']); foreach ($rows->groupBy('id') as $row) { $csv->put([ diff --git a/src/Support/Reports/Transects/ImageLabels/CsvReport.php b/src/Support/Reports/Transects/ImageLabels/CsvReport.php index d6c362d89..7d321b29a 100644 --- a/src/Support/Reports/Transects/ImageLabels/CsvReport.php +++ b/src/Support/Reports/Transects/ImageLabels/CsvReport.php @@ -110,7 +110,7 @@ protected function createCsv($rows) 'firstname', 'lastname', 'label_id', - 'label_name', + 'label_hierarchy', ]); foreach ($rows as $row) { diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index 6cd76f8d0..756baebe6 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -43,16 +43,16 @@

    1. Image filename
    2. - Label name + Label hierarchy

      - The label name contains all label names from the root label to the child label, separated by a >. If we have the following label tree: + The label hierarchy contains all label names from the root label to the child label, separated by a >. If we have the following label tree:

       Animalia
       └─ Annelida
          └─ Polychaeta
             └─ Buskiella sp
       
      - Then the content of the "label name" column for annotations with the label "Buskiella sp" will be Animalia > Annelida > Polychaeta > Buskiella sp. + Then the content of the "label hierarchy" column for annotations with the label "Buskiella sp" will be Animalia > Annelida > Polychaeta > Buskiella sp.

    3. Label abundance
    4. @@ -63,16 +63,18 @@

      The annotation area report is an XLSX spreadsheet of all area annotations (rectangle, circle and polygon) with their width and height in pixels (px) and their area in px². If a laserpoint detection was performed, the width and height in m and the area in m² is included as well.

      -

      - The computed area of self-intersecting polygons like these will not be correct! - - - - - - - -

      +
      +
      + The computed area of self-intersecting polygons like these will not be correct! + + + + + + + +
      +

      For a single worksheet (not separated by label tree) the first line contains the transect name. For multiple worksheets the first lines contain the name of the respective label tree. The second line always contains the column headers. The columns are as follows:

      @@ -106,7 +108,7 @@
    5. Annotation shape name
    6. X-Coordinate(s) of the annotation (may span multiple lines)
    7. Y-Coordinate(s) of the annotation (may span multiple lines)
    8. -
    9. Comma separated list of label names (see the extended report on how to interpret a label name)
    10. +
    11. Comma separated list of label hierarchies (see the extended report on how to interpret a label hierarchy)
    12. The area of the image in m² if available

    @@ -140,7 +142,7 @@

    1. Annotation label ID (not the annotation ID)
    2. Label ID
    3. -
    4. Label name (see the extended report on how to interpret a label name)
    5. +
    6. Label hierarchy (see the extended report on how to interpret a label hierarchy)
    7. ID of the user who created/attached the annotation label
    8. User firstname
    9. User lastname
    10. @@ -170,7 +172,7 @@
      1. Image ID
      2. Image filename
      3. -
      4. Comma separated list of label names (see the extended annotation report on how to interpret a label name)
      5. +
      6. Comma separated list of label hierarchies (see the extended annotation report on how to interpret a label hierarchy)

      CSV

      @@ -188,7 +190,7 @@
    11. User firstname
    12. User lastname
    13. Label ID
    14. -
    15. Label name (see the extended annotation report on how to interpret a label name)
    16. +
    17. Label hierarchy (see the extended annotation report on how to interpret a label hierarchy)
    @endsection diff --git a/tests/Support/Reports/Transects/Annotations/CsvReportTest.php b/tests/Support/Reports/Transects/Annotations/CsvReportTest.php index 89cbe52d2..ed92aa62c 100644 --- a/tests/Support/Reports/Transects/Annotations/CsvReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/CsvReportTest.php @@ -21,7 +21,7 @@ class CsvReportTest extends TestCase private $columns = [ 'annotation_label_id', 'label_id', - 'label_name', + 'label_hierarchy', 'user_id', 'firstname', 'lastname', diff --git a/tests/Support/Reports/Transects/Annotations/ExtendedReportTest.php b/tests/Support/Reports/Transects/Annotations/ExtendedReportTest.php index 3bca27ad7..9f3579b8a 100644 --- a/tests/Support/Reports/Transects/Annotations/ExtendedReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/ExtendedReportTest.php @@ -19,7 +19,7 @@ class ExtendedReportTest extends TestCase { - private $columns = ['image_filename', 'label_name', 'annotation_count']; + private $columns = ['image_filename', 'label_hierarchy', 'annotation_count']; public function testProperties() { diff --git a/tests/Support/Reports/Transects/ImageLabels/BasicReportTest.php b/tests/Support/Reports/Transects/ImageLabels/BasicReportTest.php index f7b881ec0..db288275a 100644 --- a/tests/Support/Reports/Transects/ImageLabels/BasicReportTest.php +++ b/tests/Support/Reports/Transects/ImageLabels/BasicReportTest.php @@ -16,7 +16,7 @@ class BasicReportTest extends TestCase { - private $columns = ['image_id', 'image_filename', 'label_names']; + private $columns = ['image_id', 'image_filename', 'label_hierarchies']; public function testProperties() { diff --git a/tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsCsvReportTest.php b/tests/Support/Reports/Transects/ImageLabels/CsvReportTest.php similarity index 99% rename from tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsCsvReportTest.php rename to tests/Support/Reports/Transects/ImageLabels/CsvReportTest.php index e618fe576..21f45e7fd 100644 --- a/tests/Support/Reports/Transects/ImageLabels/ExportModuleSupportReportsTransectsImageLabelsCsvReportTest.php +++ b/tests/Support/Reports/Transects/ImageLabels/CsvReportTest.php @@ -26,7 +26,7 @@ class CsvReportTest extends TestCase 'firstname', 'lastname', 'label_id', - 'label_name', + 'label_hierarchy', ]; public function testProperties() From 1eda520b84f14e31e503ff6b41ffbd7425e00027 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 6 Jan 2017 14:41:56 +0100 Subject: [PATCH 077/407] Add a label_name column to the CSV reports References #26 --- src/Support/Reports/Transects/Annotations/AreaReport.php | 4 ---- .../Reports/Transects/Annotations/BasicReport.php | 9 +-------- src/Support/Reports/Transects/Annotations/CsvReport.php | 3 +++ src/Support/Reports/Transects/Annotations/Report.php | 4 ++-- src/Support/Reports/Transects/ImageLabels/CsvReport.php | 7 +++++-- .../views/manual/tutorials/reports-schema.blade.php | 2 ++ .../Reports/Transects/Annotations/CsvReportTest.php | 4 ++++ .../Reports/Transects/ImageLabels/CsvReportTest.php | 4 ++++ 8 files changed, 21 insertions(+), 16 deletions(-) diff --git a/src/Support/Reports/Transects/Annotations/AreaReport.php b/src/Support/Reports/Transects/Annotations/AreaReport.php index beb4650db..f05250e58 100644 --- a/src/Support/Reports/Transects/Annotations/AreaReport.php +++ b/src/Support/Reports/Transects/Annotations/AreaReport.php @@ -94,10 +94,6 @@ protected function query() ]) ->orderBy('annotation_labels.id'); - if (!$this->shouldSeparateLabelTrees()) { - $query->join('labels', 'annotation_labels.label_id', '=', 'labels.id'); - } - return $query; } diff --git a/src/Support/Reports/Transects/Annotations/BasicReport.php b/src/Support/Reports/Transects/Annotations/BasicReport.php index 45f46ecad..14ef690af 100644 --- a/src/Support/Reports/Transects/Annotations/BasicReport.php +++ b/src/Support/Reports/Transects/Annotations/BasicReport.php @@ -60,17 +60,10 @@ public function generateReport() */ protected function query() { - $query = $this->initQuery(DB::raw('labels.name, labels.color, count(labels.id) as count')) + $query = $this->initQuery(DB::raw('labels.name, labels.label_tree_id, labels.color, count(labels.id) as count')) ->groupBy('labels.id') ->orderBy('labels.id'); - // We want this every time not only if the report should be separated by label - // trees as defined in initQuery(). - if (!$this->shouldSeparateLabelTrees()) { - $query->join('labels', 'annotation_labels.label_id', '=', 'labels.id') - ->addSelect('labels.label_tree_id'); - } - return $query; } diff --git a/src/Support/Reports/Transects/Annotations/CsvReport.php b/src/Support/Reports/Transects/Annotations/CsvReport.php index 9aadf754a..01ddcc025 100644 --- a/src/Support/Reports/Transects/Annotations/CsvReport.php +++ b/src/Support/Reports/Transects/Annotations/CsvReport.php @@ -71,6 +71,7 @@ protected function query() $query = $this->initQuery([ 'annotation_labels.id as annotation_label_id', 'annotation_labels.label_id', + 'labels.name as label_name', 'users.id as user_id', 'users.firstname', 'users.lastname', @@ -101,6 +102,7 @@ protected function createCsv($rows) $csv->put([ 'annotation_label_id', 'label_id', + 'label_name', 'label_hierarchy', 'user_id', 'firstname', @@ -117,6 +119,7 @@ protected function createCsv($rows) $csv->put([ $row->annotation_label_id, $row->label_id, + $row->label_name, $this->expandLabelName($row->label_id), $row->user_id, $row->firstname, diff --git a/src/Support/Reports/Transects/Annotations/Report.php b/src/Support/Reports/Transects/Annotations/Report.php index e825a8cdc..2d3c6e2bc 100644 --- a/src/Support/Reports/Transects/Annotations/Report.php +++ b/src/Support/Reports/Transects/Annotations/Report.php @@ -164,14 +164,14 @@ protected function initQuery($columns = []) $query = DB::table('annotation_labels') ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') ->join('images', 'annotations.image_id', '=', 'images.id') + ->join('labels', 'annotation_labels.label_id', '=', 'labels.id') ->where('images.transect_id', $this->transect->id) ->when($this->isRestrictedToExportArea(), [$this, 'restrictToExportAreaQuery']) ->when($this->isRestrictedToAnnotationSession(), [$this, 'restrictToAnnotationSessionQuery']) ->select($columns); if ($this->shouldSeparateLabelTrees()) { - $query->join('labels', 'annotation_labels.label_id', '=', 'labels.id') - ->addSelect('labels.label_tree_id'); + $query->addSelect('labels.label_tree_id'); } return $query; diff --git a/src/Support/Reports/Transects/ImageLabels/CsvReport.php b/src/Support/Reports/Transects/ImageLabels/CsvReport.php index 7d321b29a..0e8e3d566 100644 --- a/src/Support/Reports/Transects/ImageLabels/CsvReport.php +++ b/src/Support/Reports/Transects/ImageLabels/CsvReport.php @@ -72,6 +72,7 @@ protected function query() $query = DB::table('image_labels') ->join('images', 'image_labels.image_id', '=', 'images.id') ->join('users', 'image_labels.user_id', '=', 'users.id') + ->join('labels', 'labels.id', '=', 'image_labels.label_id') ->select([ 'image_labels.id as image_label_id', 'image_labels.image_id', @@ -80,13 +81,13 @@ protected function query() 'users.firstname', 'users.lastname', 'image_labels.label_id', + 'labels.name as label_name', ]) ->where('images.transect_id', $this->transect->id) ->orderBy('images.filename'); if ($this->shouldSeparateLabelTrees()) { - $query->join('labels', 'labels.id', '=', 'image_labels.label_id') - ->addSelect('labels.label_tree_id'); + $query->addSelect('labels.label_tree_id'); } return $query; @@ -110,6 +111,7 @@ protected function createCsv($rows) 'firstname', 'lastname', 'label_id', + 'label_name', 'label_hierarchy', ]); @@ -122,6 +124,7 @@ protected function createCsv($rows) $row->firstname, $row->lastname, $row->label_id, + $row->label_name, $this->expandLabelName($row->label_id), ]); } diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index 756baebe6..7d18b6404 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -142,6 +142,7 @@
    1. Annotation label ID (not the annotation ID)
    2. Label ID
    3. +
    4. Label name
    5. Label hierarchy (see the extended report on how to interpret a label hierarchy)
    6. ID of the user who created/attached the annotation label
    7. User firstname
    8. @@ -190,6 +191,7 @@
    9. User firstname
    10. User lastname
    11. Label ID
    12. +
    13. Label name
    14. Label hierarchy (see the extended annotation report on how to interpret a label hierarchy)
    diff --git a/tests/Support/Reports/Transects/Annotations/CsvReportTest.php b/tests/Support/Reports/Transects/Annotations/CsvReportTest.php index ed92aa62c..836b816c7 100644 --- a/tests/Support/Reports/Transects/Annotations/CsvReportTest.php +++ b/tests/Support/Reports/Transects/Annotations/CsvReportTest.php @@ -21,6 +21,7 @@ class CsvReportTest extends TestCase private $columns = [ 'annotation_label_id', 'label_id', + 'label_name', 'label_hierarchy', 'user_id', 'firstname', @@ -81,6 +82,7 @@ public function testGenerateReport() ->with([ $al->id, $child->id, + $child->name, "{$root->name} > {$child->name}", $al->user_id, $al->user->firstname, @@ -161,6 +163,7 @@ public function testGenerateReportSeparateLabelTrees() $al1->id, $label1->id, $label1->name, + $label1->name, $al1->user_id, $al1->user->firstname, $al1->user->lastname, @@ -178,6 +181,7 @@ public function testGenerateReportSeparateLabelTrees() $al2->id, $label2->id, $label2->name, + $label2->name, $al2->user_id, $al2->user->firstname, $al2->user->lastname, diff --git a/tests/Support/Reports/Transects/ImageLabels/CsvReportTest.php b/tests/Support/Reports/Transects/ImageLabels/CsvReportTest.php index 21f45e7fd..bc6e57dff 100644 --- a/tests/Support/Reports/Transects/ImageLabels/CsvReportTest.php +++ b/tests/Support/Reports/Transects/ImageLabels/CsvReportTest.php @@ -26,6 +26,7 @@ class CsvReportTest extends TestCase 'firstname', 'lastname', 'label_id', + 'label_name', 'label_hierarchy', ]; @@ -80,6 +81,7 @@ public function testGenerateReport() $il->user->firstname, $il->user->lastname, $il->label_id, + $child->name, "{$root->name} > {$child->name}", ]); @@ -149,6 +151,7 @@ public function testGenerateReportSeparateLabelTrees() $il1->user->lastname, $label1->id, $label1->name, + $label1->name, ]); $mock->shouldReceive('put') @@ -162,6 +165,7 @@ public function testGenerateReportSeparateLabelTrees() $il2->user->lastname, $label2->id, $label2->name, + $label2->name, ]); $mock->shouldReceive('close') From 9aba39b5b2a9912bccb3569100df27a3c48764b0 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 11 Jan 2017 19:48:53 +0100 Subject: [PATCH 078/407] Change the application name to BIIGLE --- README.md | 10 +++---- composer.json | 6 ++-- gulpfile.js | 2 +- package.json | 2 +- src/AvailableReport.php | 4 +-- src/Console/Commands/Publish.php | 4 +-- src/Contracts/DeletableContract.php | 2 +- src/ExportServiceProvider.php | 10 +++---- .../Api/AvailableReportController.php | 6 ++-- .../Annotations/AreaReportController.php | 6 ++-- .../Annotations/BasicReportController.php | 6 ++-- .../Annotations/CsvReportController.php | 6 ++-- .../Annotations/ExtendedReportController.php | 6 ++-- .../Annotations/FullReportController.php | 6 ++-- .../ImageLabels/BasicReportController.php | 6 ++-- .../ImageLabels/CsvReportController.php | 6 ++-- .../Api/Projects/ProjectReportController.php | 6 ++-- src/Http/Controllers/Api/ReportController.php | 6 ++-- .../Api/TransectExportAreaController.php | 8 +++--- .../Annotations/AreaReportController.php | 6 ++-- .../Annotations/BasicReportController.php | 6 ++-- .../Annotations/CsvReportController.php | 6 ++-- .../Annotations/ExtendedReportController.php | 6 ++-- .../Annotations/FullReportController.php | 6 ++-- .../Api/Transects/ExportAreaController.php | 8 +++--- .../ImageLabels/BasicReportController.php | 6 ++-- .../ImageLabels/CsvReportController.php | 6 ++-- .../Transects/TransectReportController.php | 6 ++-- .../Views/ProjectReportsController.php | 6 ++-- .../Views/TransectReportsController.php | 6 ++-- src/Jobs/GenerateReportJob.php | 10 +++---- src/Notifications/ReportReady.php | 6 ++-- src/Support/CsvFile.php | 6 ++-- src/Support/Exec.php | 2 +- src/Support/Reports/MakesZipArchives.php | 2 +- .../Projects/Annotations/AreaReport.php | 4 +-- .../Projects/Annotations/BasicReport.php | 4 +-- .../Projects/Annotations/CsvReport.php | 4 +-- .../Projects/Annotations/ExtendedReport.php | 4 +-- .../Projects/Annotations/FullReport.php | 4 +-- .../Reports/Projects/Annotations/Report.php | 6 ++-- .../Projects/ImageLabels/BasicReport.php | 6 ++-- .../Projects/ImageLabels/CsvReport.php | 6 ++-- src/Support/Reports/Projects/Report.php | 10 +++---- src/Support/Reports/Report.php | 6 ++-- .../Transects/Annotations/AreaReport.php | 12 ++++---- .../Transects/Annotations/BasicReport.php | 6 ++-- .../Transects/Annotations/CsvReport.php | 8 +++--- .../Transects/Annotations/ExtendedReport.php | 6 ++-- .../Transects/Annotations/FullReport.php | 6 ++-- .../Reports/Transects/Annotations/Report.php | 10 +++---- .../Transects/ImageLabels/BasicReport.php | 8 +++--- .../Transects/ImageLabels/CsvReport.php | 10 +++---- src/Support/Reports/Transects/Report.php | 10 +++---- src/Transect.php | 10 +++---- src/public/assets/scripts/annotations.js | 2 +- src/public/assets/scripts/main.js | 2 +- .../ExportAreaSettingsController.js | 6 ++-- .../js/annotations/factories/ExportArea.js | 4 +-- .../js/annotations/services/exportArea.js | 6 ++-- .../ProjectReportRequestController.js | 6 ++-- .../TransectReportRequestController.js | 6 ++-- .../js/export/factories/ProjectReport.js | 4 +-- .../assets/js/export/factories/ReportForm.js | 6 ++-- .../js/export/factories/TransectReport.js | 4 +-- src/resources/assets/js/export/main.js.js | 8 +++--- src/resources/scripts/basic_report.py | 6 ++-- .../views/annotationsScripts.blade.php | 2 +- .../manual/tutorials/reports-schema.blade.php | 2 +- src/resources/views/projectReports.blade.php | 4 +-- src/resources/views/transectReports.blade.php | 4 +-- tests/AvailableReportTest.php | 4 +-- .../Annotations/AreaReportControllerTest.php | 6 ++-- .../Annotations/BasicReportControllerTest.php | 6 ++-- .../Annotations/CsvReportControllerTest.php | 6 ++-- .../ExtendedReportControllerTest.php | 6 ++-- .../Annotations/FullReportControllerTest.php | 6 ++-- .../ImageLabels/BasicReportControllerTest.php | 6 ++-- .../ImageLabels/CsvReportControllerTest.php | 6 ++-- .../Annotations/AreaReportControllerTest.php | 6 ++-- .../Annotations/BasicReportControllerTest.php | 6 ++-- .../Annotations/CsvReportControllerTest.php | 6 ++-- .../ExtendedReportControllerTest.php | 6 ++-- .../Annotations/FullReportControllerTest.php | 6 ++-- .../Transects/ExportAreaControllerTest.php | 4 +-- .../ImageLabels/BasicReportControllerTest.php | 4 +-- .../ImageLabels/CsvReportControllerTest.php | 4 +-- ...lersViewsTransectsReportControllerTest.php | 2 +- .../Views/ProjectsReportControllerTest.php | 2 +- tests/Jobs/GenerateReportTest.php | 10 +++---- .../Projects/Annotations/AreaReportTest.php | 6 ++-- .../Projects/Annotations/BasicReportTest.php | 6 ++-- .../Projects/Annotations/CsvReportTest.php | 6 ++-- .../Annotations/ExtendedReportTest.php | 6 ++-- .../Projects/Annotations/FullReportTest.php | 6 ++-- .../Projects/ImageLabels/BasicReportTest.php | 6 ++-- ...eportsProjectsImageLabelsCsvReportTest.php | 6 ++-- tests/Support/Reports/Projects/ReportTest.php | 12 ++++---- tests/Support/Reports/ReportTest.php | 6 ++-- .../Transects/Annotations/AreaReportTest.php | 20 ++++++------- .../Transects/Annotations/BasicReportTest.php | 22 +++++++-------- .../Transects/Annotations/CsvReportTest.php | 18 ++++++------ .../Annotations/ExtendedReportTest.php | 22 +++++++-------- .../Transects/Annotations/FullReportTest.php | 22 +++++++-------- .../Transects/Annotations/ReportTest.php | 28 +++++++++---------- .../Transects/ImageLabels/BasicReportTest.php | 16 +++++------ .../Transects/ImageLabels/CsvReportTest.php | 18 ++++++------ .../Support/Reports/Transects/ReportTest.php | 10 +++---- tests/TransectTest.php | 6 ++-- 109 files changed, 379 insertions(+), 379 deletions(-) diff --git a/README.md b/README.md index c70fa558e..5b910ed9e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Dias Export Module +# Biigle Export Module Install the module: @@ -6,13 +6,13 @@ Add the following to the repositories array of your `composer.json`: ``` { "type": "vcs", - "url": "https://github.com/BiodataMiningGroup/dias-export.git" + "url": "https://github.com/BiodataMiningGroup/biigle-export.git" } ``` -1. Run `php composer.phar require dias/export`. -2. Add `'Dias\Modules\Export\ExportServiceProvider'` to the `providers` array in `config/app.php`. +1. Run `php composer.phar require biigle/export`. +2. Add `'Biigle\Modules\Export\ExportServiceProvider'` to the `providers` array in `config/app.php`. 3. Run `php artisan export:publish` to refresh the public assets of this package. Do this for every update of the package. -4. Run `pip install -r vendor/dias/export/requirements.txt` to install python requirements. +4. Run `pip install -r vendor/biigle/export/requirements.txt` to install python requirements. 5. Create a `storage/reports` directory that is read/writable for the web application. The location can be configured via the `export.exports_storage` key. 6. Make sure the `export.tmp_storage` directory is read/writable for the web application (default is `sys_get_temp_dir()`). diff --git a/composer.json b/composer.json index 2498c3aec..62e42411f 100644 --- a/composer.json +++ b/composer.json @@ -1,14 +1,14 @@ { - "name": "dias/export", + "name": "biigle/export", "require": { "ext-zip": "*", - "dias/projects": "~1.1" + "biigle/projects": "~1.1" }, "require-dev": { }, "autoload": { "psr-4": { - "Dias\\Modules\\Export\\": "src" + "Biigle\\Modules\\Export\\": "src" } } } diff --git a/gulpfile.js b/gulpfile.js index 67abc9ebb..4172450c6 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -2,7 +2,7 @@ var gulp = require('gulp'); var h = require('gulp-helpers'); -var publish = h.publish('Dias\\Modules\\Export\\ExportServiceProvider', 'public'); +var publish = h.publish('Biigle\\Modules\\Export\\ExportServiceProvider', 'public'); h.paths.sass = 'src/resources/assets/sass/'; h.paths.js = 'src/resources/assets/js/'; diff --git a/package.json b/package.json index b81a41588..304ed749a 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "dias-export", + "name": "biigle-export", "version": "0.0.1", "directories": { "test": "tests" diff --git a/src/AvailableReport.php b/src/AvailableReport.php index 386f3d668..cedcfcb4d 100644 --- a/src/AvailableReport.php +++ b/src/AvailableReport.php @@ -1,9 +1,9 @@ loadViewsFrom(__DIR__.'/resources/views', 'export'); $router->group([ - 'namespace' => 'Dias\Modules\Export\Http\Controllers', + 'namespace' => 'Biigle\Modules\Export\Http\Controllers', 'middleware' => 'web', ], function ($router) { require __DIR__.'/Http/routes.php'; @@ -52,7 +52,7 @@ public function register() $this->mergeConfigFrom(__DIR__.'/config/export.php', 'export'); $this->app->singleton('command.export.publish', function ($app) { - return new \Dias\Modules\Export\Console\Commands\Publish(); + return new \Biigle\Modules\Export\Console\Commands\Publish(); }); $this->commands([ diff --git a/src/Http/Controllers/Api/AvailableReportController.php b/src/Http/Controllers/Api/AvailableReportController.php index 9e307934f..d29f1256c 100644 --- a/src/Http/Controllers/Api/AvailableReportController.php +++ b/src/Http/Controllers/Api/AvailableReportController.php @@ -1,9 +1,9 @@ subject('Your BIIGLE DIAS report is ready') + ->subject('Your BIIGLE report is ready') ->line("Your {$this->report->getName()} for {$this->report->getSubject()} is ready for download!") ->line('The report will be removed once you have downloaded it.') ->action('Download report', $this->report->getUrl()); diff --git a/src/Support/CsvFile.php b/src/Support/CsvFile.php index 48d3ed7cf..e88ee3212 100644 --- a/src/Support/CsvFile.php +++ b/src/Support/CsvFile.php @@ -1,10 +1,10 @@ path = tempnam(config('export.tmp_storage').'/', 'dias-export-csv-'); + $this->path = tempnam(config('export.tmp_storage').'/', 'biigle-export-csv-'); } else { $this->path = $path; } diff --git a/src/Support/Exec.php b/src/Support/Exec.php index 0c1fb0fa0..5578dc9a2 100644 --- a/src/Support/Exec.php +++ b/src/Support/Exec.php @@ -1,6 +1,6 @@ 1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature}).catch(function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n.delete({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]),angular.module("dias.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e.delete=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]); \ No newline at end of file +angular.module("biigle.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("biigle.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature}).catch(function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n.delete({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]),angular.module("biigle.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e.delete=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]); diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index 14d55bb30..f04c067c9 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -angular.module("dias.export",["dias.api","dias.ui"]),angular.module("dias.export").config(["$compileProvider",function(t){"use strict";t.debugInfoEnabled(!1)}]),angular.module("dias.export").controller("ProjectReportRequestController",["$scope","ProjectReport","ReportForm","PROJECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","area","full","csv"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees"],"image-labels":["separateLabelTrees"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{project_id:s})}}]),angular.module("dias.export").controller("TransectReportRequestController",["$scope","TransectReport","ReportForm","TRANSECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","area","full","csv"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees","annotationSession"],"image-labels":["separateLabelTrees","annotationSession"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1,annotationSession:null}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{transect_id:s})}}]),angular.module("dias.export").factory("ProjectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/projects/:project_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestAnnotationAreaReport:{method:"POST",params:{type:"annotations",variant:"area"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]),angular.module("dias.export").factory("ReportForm",["msg",function(t){"use strict";function e(t,e,a){this.variants=t,this.allowedOptions=e,this.defaultForm=a,this.data=angular.copy(this.defaultForm),this.state={success:!1,loading:!1},this.availableVariants=this.variants[this.data.type]}return e.prototype.handleRequestSuccess=function(){this.state.success=!0,this.state.loading=!1,this.error={}},e.prototype.handleRequestError=function(e){this.state.loading=!1,this.success=!1,422===e.status?this.error=e.data:t.responseError(e)},e.prototype.selectType=function(t){this.data.type=t,this.availableVariants=this.variants[t],this.data.variant=this.availableVariants[0]},e.prototype.wantsType=function(t){return this.data.type===t},e.prototype.wantsCombination=function(t,e){return this.wantsType(t)&&this.data.variant===e},e.prototype.submit=function(t,e){for(var a=this,s={},r=this.allowedOptions[this.data.type],n=r.length-1;n>=0;n--)s[r[n]]=this.data.options[r[n]];this.state.loading=!0,this.state.success=!1,e=angular.extend(e,{type:this.data.type,variant:this.data.variant}),t.requestGenericReport(e,s,function(){a.handleRequestSuccess()},function(t){a.handleRequestError(t)})},e}]),angular.module("dias.export").factory("TransectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/transects/:transect_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestAnnotationAreaReport:{method:"POST",params:{type:"annotations",variant:"area"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]); \ No newline at end of file +angular.module("biigle.export",["biigle.api","biigle.ui"]),angular.module("biigle.export").config(["$compileProvider",function(t){"use strict";t.debugInfoEnabled(!1)}]),angular.module("biigle.export").controller("ProjectReportRequestController",["$scope","ProjectReport","ReportForm","PROJECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","area","full","csv"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees"],"image-labels":["separateLabelTrees"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{project_id:s})}}]),angular.module("biigle.export").controller("TransectReportRequestController",["$scope","TransectReport","ReportForm","TRANSECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","area","full","csv"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees","annotationSession"],"image-labels":["separateLabelTrees","annotationSession"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1,annotationSession:null}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{transect_id:s})}}]),angular.module("biigle.export").factory("ProjectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/projects/:project_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestAnnotationAreaReport:{method:"POST",params:{type:"annotations",variant:"area"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]),angular.module("biigle.export").factory("ReportForm",["msg",function(t){"use strict";function e(t,e,a){this.variants=t,this.allowedOptions=e,this.defaultForm=a,this.data=angular.copy(this.defaultForm),this.state={success:!1,loading:!1},this.availableVariants=this.variants[this.data.type]}return e.prototype.handleRequestSuccess=function(){this.state.success=!0,this.state.loading=!1,this.error={}},e.prototype.handleRequestError=function(e){this.state.loading=!1,this.success=!1,422===e.status?this.error=e.data:t.responseError(e)},e.prototype.selectType=function(t){this.data.type=t,this.availableVariants=this.variants[t],this.data.variant=this.availableVariants[0]},e.prototype.wantsType=function(t){return this.data.type===t},e.prototype.wantsCombination=function(t,e){return this.wantsType(t)&&this.data.variant===e},e.prototype.submit=function(t,e){for(var a=this,s={},r=this.allowedOptions[this.data.type],n=r.length-1;n>=0;n--)s[r[n]]=this.data.options[r[n]];this.state.loading=!0,this.state.success=!1,e=angular.extend(e,{type:this.data.type,variant:this.data.variant}),t.requestGenericReport(e,s,function(){a.handleRequestSuccess()},function(t){a.handleRequestError(t)})},e}]),angular.module("biigle.export").factory("TransectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/transects/:transect_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestAnnotationAreaReport:{method:"POST",params:{type:"annotations",variant:"area"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]); diff --git a/src/resources/assets/js/annotations/controllers/ExportAreaSettingsController.js b/src/resources/assets/js/annotations/controllers/ExportAreaSettingsController.js index 8c92126fd..ea671d81f 100644 --- a/src/resources/assets/js/annotations/controllers/ExportAreaSettingsController.js +++ b/src/resources/assets/js/annotations/controllers/ExportAreaSettingsController.js @@ -1,11 +1,11 @@ /** - * @namespace dias.annotations + * @namespace biigle.annotations * @ngdoc controller * @name ExportAreaSettingsController - * @memberOf dias.annotations + * @memberOf biigle.annotations * @description Controller for ATE example patches settings */ -angular.module('dias.annotations').controller('ExportAreaSettingsController', function ($scope, exportArea, settings) { +angular.module('biigle.annotations').controller('ExportAreaSettingsController', function ($scope, exportArea, settings) { "use strict"; var key = 'export_area_opacity'; diff --git a/src/resources/assets/js/annotations/factories/ExportArea.js b/src/resources/assets/js/annotations/factories/ExportArea.js index 65ec09196..66e3920fd 100644 --- a/src/resources/assets/js/annotations/factories/ExportArea.js +++ b/src/resources/assets/js/annotations/factories/ExportArea.js @@ -1,7 +1,7 @@ /** * @ngdoc factory * @name ExportArea - * @memberOf dias.annotations + * @memberOf biigle.annotations * @description Provides the resource for the export area of a transect * @requires $resource * @returns {Object} A new [ngResource](https://docs.angularjs.org/api/ngResource/service/$resource) object @@ -18,7 +18,7 @@ ExportArea.save({transect_id: 1}, {coordinates: [10, 20, 30, 40]}); ExportArea.delete({transect_id: 1}); * */ -angular.module('dias.annotations').factory('ExportArea', function ($resource, URL) { +angular.module('biigle.annotations').factory('ExportArea', function ($resource, URL) { "use strict"; return $resource(URL + '/api/v1/transects/:transect_id/export-area'); diff --git a/src/resources/assets/js/annotations/services/exportArea.js b/src/resources/assets/js/annotations/services/exportArea.js index 7d6232f31..227b9db2d 100644 --- a/src/resources/assets/js/annotations/services/exportArea.js +++ b/src/resources/assets/js/annotations/services/exportArea.js @@ -1,11 +1,11 @@ /** - * @namespace dias.annotations + * @namespace biigle.annotations * @ngdoc service * @name exportArea - * @memberOf dias.annotations + * @memberOf biigle.annotations * @description Manages the export area drawn on the map */ -angular.module('dias.annotations').service('exportArea', function (map, styles, ExportArea, TRANSECT_ID, EXPORT_AREA, msg) { +angular.module('biigle.annotations').service('exportArea', function (map, styles, ExportArea, TRANSECT_ID, EXPORT_AREA, msg) { "use strict"; // a circle with a red and white stroke diff --git a/src/resources/assets/js/export/controllers/ProjectReportRequestController.js b/src/resources/assets/js/export/controllers/ProjectReportRequestController.js index 8204778bd..a60b16da1 100644 --- a/src/resources/assets/js/export/controllers/ProjectReportRequestController.js +++ b/src/resources/assets/js/export/controllers/ProjectReportRequestController.js @@ -1,11 +1,11 @@ /** - * @namespace dias.export + * @namespace biigle.export * @ngdoc controller * @name ProjectReportRequestController - * @memberOf dias.export + * @memberOf biigle.export * @description Controller for requesting a new transect report */ -angular.module('dias.export').controller('ProjectReportRequestController', function ($scope, ProjectReport, ReportForm, PROJECT_ID) { +angular.module('biigle.export').controller('ProjectReportRequestController', function ($scope, ProjectReport, ReportForm, PROJECT_ID) { "use strict"; var variants = { diff --git a/src/resources/assets/js/export/controllers/TransectReportRequestController.js b/src/resources/assets/js/export/controllers/TransectReportRequestController.js index 5c9f38901..ef8970653 100644 --- a/src/resources/assets/js/export/controllers/TransectReportRequestController.js +++ b/src/resources/assets/js/export/controllers/TransectReportRequestController.js @@ -1,11 +1,11 @@ /** - * @namespace dias.export + * @namespace biigle.export * @ngdoc controller * @name TransectReportRequestController - * @memberOf dias.export + * @memberOf biigle.export * @description Controller for requesting a new transect report */ -angular.module('dias.export').controller('TransectReportRequestController', function ($scope, TransectReport, ReportForm, TRANSECT_ID) { +angular.module('biigle.export').controller('TransectReportRequestController', function ($scope, TransectReport, ReportForm, TRANSECT_ID) { "use strict"; var variants = { diff --git a/src/resources/assets/js/export/factories/ProjectReport.js b/src/resources/assets/js/export/factories/ProjectReport.js index 1b4a0b528..dc45148cd 100644 --- a/src/resources/assets/js/export/factories/ProjectReport.js +++ b/src/resources/assets/js/export/factories/ProjectReport.js @@ -1,7 +1,7 @@ /** * @ngdoc factory * @name ProjectReport - * @memberOf dias.export + * @memberOf biigle.export * @description Provides the resource for requesting project reports * @requires $resource * @returns {Object} A new [ngResource](https://docs.angularjs.org/api/ngResource/service/$resource) object @@ -19,7 +19,7 @@ ProjectReport.requestFullAnnotationReport({project_id: 1}, {}); ProjectReport.requestBasicImageLabelReport({project_id: 1}, {}); */ -angular.module('dias.export').factory('ProjectReport', function ($resource, URL) { +angular.module('biigle.export').factory('ProjectReport', function ($resource, URL) { "use strict"; return $resource(URL + '/api/v1/projects/:project_id/reports/:type/:variant', {}, { diff --git a/src/resources/assets/js/export/factories/ReportForm.js b/src/resources/assets/js/export/factories/ReportForm.js index 205562d14..1a77688b9 100644 --- a/src/resources/assets/js/export/factories/ReportForm.js +++ b/src/resources/assets/js/export/factories/ReportForm.js @@ -1,11 +1,11 @@ /** - * @namespace dias.export + * @namespace biigle.export * @ngdoc factory * @name ReportForm - * @memberOf dias.export + * @memberOf biigle.export * @description Service to help with request report forms */ -angular.module('dias.export').factory('ReportForm', function (msg) { +angular.module('biigle.export').factory('ReportForm', function (msg) { "use strict"; function ReportForm(variants, allowedOptions, defaultForm) { diff --git a/src/resources/assets/js/export/factories/TransectReport.js b/src/resources/assets/js/export/factories/TransectReport.js index a21575596..a9bd7eb67 100644 --- a/src/resources/assets/js/export/factories/TransectReport.js +++ b/src/resources/assets/js/export/factories/TransectReport.js @@ -1,7 +1,7 @@ /** * @ngdoc factory * @name TransectReport - * @memberOf dias.export + * @memberOf biigle.export * @description Provides the resource for requesting transect reports * @requires $resource * @returns {Object} A new [ngResource](https://docs.angularjs.org/api/ngResource/service/$resource) object @@ -19,7 +19,7 @@ TransectReport.requestFullAnnotationReport({transect_id: 1}, {}); TransectReport.requestBasicImageLabelReport({transect_id: 1}, {}); */ -angular.module('dias.export').factory('TransectReport', function ($resource, URL) { +angular.module('biigle.export').factory('TransectReport', function ($resource, URL) { "use strict"; return $resource(URL + '/api/v1/transects/:transect_id/reports/:type/:variant', {}, { diff --git a/src/resources/assets/js/export/main.js.js b/src/resources/assets/js/export/main.js.js index 7773d15c0..e3d5a8336 100644 --- a/src/resources/assets/js/export/main.js.js +++ b/src/resources/assets/js/export/main.js.js @@ -1,14 +1,14 @@ /** - * @namespace dias.export - * @description The DIAS export module + * @namespace biigle.export + * @description The BIIGLE export module */ -angular.module('dias.export', ['dias.api', 'dias.ui']); +angular.module('biigle.export', ['biigle.api', 'biigle.ui']); /* * Disable debug info in production for better performance. * see: https://code.angularjs.org/1.4.7/docs/guide/production */ -angular.module('dias.export').config(function ($compileProvider) { +angular.module('biigle.export').config(function ($compileProvider) { "use strict"; $compileProvider.debugInfoEnabled(false); diff --git a/src/resources/scripts/basic_report.py b/src/resources/scripts/basic_report.py index 0b8886f87..d04608fa2 100755 --- a/src/resources/scripts/basic_report.py +++ b/src/resources/scripts/basic_report.py @@ -26,13 +26,13 @@ def TitleSlide(text): btright = plt.subplot2grid((3, 3), (2, 2)) btright.axis('off') mid.text(0.5, 0.5, text, fontsize=15, horizontalalignment='center') - # btleft.imshow(mpimg.imread('../assets/images/biigle_dias_logo.png')) + # btleft.imshow(mpimg.imread('../assets/images/biigle_biigle_logo.png')) btmid.text(0.423, 0.5, datetime.date.today(), fontsize=9) # btright.imshow(mpimg.imread('../assets/images/logo_en_tr-height72.png')) return fig pdf = PdfPages(target_file) -fig = TitleSlide("BIIGLE DIAS basic report for transect\n" + title.decode('UTF-8')) +fig = TitleSlide("BIIGLE basic report for transect\n" + title.decode('UTF-8')) pdf.savefig(fig) width = 1. @@ -65,7 +65,7 @@ def TitleSlide(text): pdf.savefig() d = pdf.infodict() -d['Title'] = "BIIGLE DIAS basic report for transect " + title.decode('UTF-8') +d['Title'] = "BIIGLE basic report for transect " + title.decode('UTF-8') d['Author'] = 'Biodata Mining Group, Bielefeld University' d['Subject'] = 'Histogram of label distribution of the transect' d['Keywords'] = '' diff --git a/src/resources/views/annotationsScripts.blade.php b/src/resources/views/annotationsScripts.blade.php index 6a72c597c..4ed0c148e 100644 --- a/src/resources/views/annotationsScripts.blade.php +++ b/src/resources/views/annotationsScripts.blade.php @@ -1,4 +1,4 @@ diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index 7d18b6404..cb7e38450 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -160,7 +160,7 @@
  • Additional attributes of the image

    - The additional attributes of the image are encoded as a JSON object. The content may vary depending on the DIAS modules that are installed and the operations performed on the image (e.g. a laserpoint detection to calculate the area of an image). + The additional attributes of the image are encoded as a JSON object. The content may vary depending on the BIIGLE modules that are installed and the operations performed on the image (e.g. a laserpoint detection to calculate the area of an image).

  • diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index 84738c474..c52c9a37e 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -5,7 +5,7 @@ @push('scripts') @endpush @@ -20,7 +20,7 @@ @endsection @section('content') -
    +

    Request report for {{$project->name}}

    diff --git a/src/resources/views/transectReports.blade.php b/src/resources/views/transectReports.blade.php index 86681d6f8..c79813492 100644 --- a/src/resources/views/transectReports.blade.php +++ b/src/resources/views/transectReports.blade.php @@ -5,7 +5,7 @@ @push('scripts') @endpush @@ -20,7 +20,7 @@ @endsection @section('content') -
    +

    Request report for {{$transect->name}}

    diff --git a/tests/AvailableReportTest.php b/tests/AvailableReportTest.php index 6e63d4fc5..1e2467873 100644 --- a/tests/AvailableReportTest.php +++ b/tests/AvailableReportTest.php @@ -1,10 +1,10 @@ Date: Wed, 11 Jan 2017 20:17:40 +0100 Subject: [PATCH 079/407] Remove unneeded files --- .../assets/images/biigle_dias_logo.png | Bin 44338 -> 0 bytes .../assets/images/logo_en_tr-height72.png | Bin 14950 -> 0 bytes src/resources/scripts/basic_report.py | 2 -- 3 files changed, 2 deletions(-) delete mode 100644 src/resources/assets/images/biigle_dias_logo.png delete mode 100644 src/resources/assets/images/logo_en_tr-height72.png diff --git a/src/resources/assets/images/biigle_dias_logo.png b/src/resources/assets/images/biigle_dias_logo.png deleted file mode 100644 index b5a4222023a4de13dd2bf1b9a54d8d4992d2eade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44338 zcmd42byr+X(>)9c36cbNcNrkKy9F2=X3zjZ!{87gI0To#;2xX-26uw{pusgra1ZYG z<9)9Cx$fs9yyu@;>#Q}WdRJH1?%G`)uC6No4ucc}2?^<)qJpd@5)z6i5)v{o+Uw^x zl@43x&p#wCa=I>B4wf!oO`I)|q|6;mEvOakOg>v^T9}x7I1N}l|D$wDQC14%zHrd` zCWTzb^?j4uh!xu#lOZfyv+rVzC`|O9!aD^;$)RzMxPnZ&;`B@d;eqmQoE(7+FZu=P zlg_kX#G(+Np(!wW(|4$_F)<~lcel>23ucg0chPRhQM#iAA^Aoz=#eV%)QuW}y>!Z2 zZFJOhzK$wioj?6HSOVAC=uH3J+colg+BcSc9`pa-pD`x&lz`RVP(R1N6$vnn$(d9# z6J^NAsC+yKnmU3GF_O>Qy0J2?Pu-L)uvAQs(m$*5sDVOwM@L6|@9$A6c!r8S#6MGR z58s+uX5~pds*xFm=%N0LI_V{~sJ77Z6CKmvA%(XpHj4WfmeUZ+8(!|A@EH=192Z|Y z=9=NrcwS?*rWUD)wxr|!TT20Tq1Q)+2lWSA)n*BZ@h{5WDQ%zn*Cq!(-uOiH3bGk~5IhK7d4j)pa#%(hB%n*@Dq zYEg5~@D@u&$dbo%gV9Dbfmo?+p(A_q$-WP^MNt_f-jbro~VkE9`n*PUt(`CwQT zA_Kn}+g<-YG~)gD)7nU@Tu9eHbl%&7Sn$Zxrb&+kqO`PT(h)qRN3REx@bDOR)xn=) zDi*?+c|qwISkU9jjbM6BVnwI-$g4R%U3ASPT86kZn@(Fo@A^a~a-DHETrHOrFEM_u zbruHP|7!?I()}%l?>-YzW;&~&)o_c#krs=W!_K>db`t_h0zNraN!?uOYe#xv9Zz$N z?;vb)oZe92%dYNB==Q1!I)NO+>S{6Ynkx#2m0>lORdo-{NIz*7@nzL)?^VrX7zCPT z2Tcc8m{4I)u5Tz&ia#kee)+F$Y)YT7mFwN$Z3|g>px5xa9?Y&kkzCo?3S*i)I9J9K zk`Jcs!67e0!vZsNprGgMqeFwF`4nVVad0U+J^Fcx<-i0H4QeTX_`O$y1XR!zg#5^9 zddf8?nOfV<_?ySqU;pb-G^|grPD&)=#RX_c*9Tb`E1$9%gi;QO^O_RybK_dj(4qdd z3buY2w?V+S^1}21Xe{Wsu@h@k)Ei-F+nqT!cenZ9L9RRS)naPV(}xMk2OPLT^~Fcb zuSwxpldCv2EhFb%Yr#-Mr0M@g_OnePr{8?L1>rEQuxWDH?KJ8K^2to|7he-muR%(t z>QXK-6)_6?_rlD6xVX$XU3uQ$@hEd>1NY#y`LRv~@(MvH=noR7hr*3Ub_3~f)bQ56 zb=Xnh*2!(%O|9Z6Rr7rNm8{9Mi7g&zB5}p+m4{n^m01sefxgRUO zjliLFeO(}xNcbEqAH(3pAqx-ET{5@?6Rbg|^a_$L{Vrq`6_+KQ_`C0gMNny_GC}xs z7RG)?=XfwNb3!U^XoU$uzXjA7W$op^7K2d7l;d7z&yr*)*y z#(@QKGePn>!&Xvp>Qbf~Ka|?v`DM{lQ!UOZzU<0VE{V1H{PL7m5E@gfp!wC-khG*} zDkW?sbYIB?{`O}7;9A*R)N;m;Y5aB?*1dSPm5JQ@eBPG3I>&?A*gXJOr~S?`I11yxVgka6z^a)N8XtwlKyDNDg#c@?U! zcFVfRLTmS8((PE2N9Z-j6gAiHYVP}@nA-NK|9<>GHYHIUyxtX7j4jAc9;G4*)4}`0 z>k28R6VY9H(jl@SG7~^W4#$|dEjavYYVYs+K|avLO66bWpjPh@Y+8A z=fA-HkBN<1HZN{H5?F^aQ6?`!%qkiM6NJpOVD56-09~anf$?EUM2<; zh99`Z0&YK>%L1M(wxlMoonVh%f0t7n6*>Eg#^mSs{)4b>)mNsEBad1O5?{5%8PRai+*|(J0$2-`+m-7YE{>&E(XId_>m~7%t za1neEp`-+92+>d2bjQA?%}(CR1#oh)4^4akQ5)3}9^QGVM>z-G`(SL!>*pO~8_}eO zh7te1;vFX##gvokC7npLW~cwI#-cyYAjr7;=k}gA?KI;8Z|g*gXGSfZ3o2&d$I&A8 zzdk^EjiT=E;xAw~q^T=zx{#ITMzaY=!fMhM)mTzz=A!jEd%9mbYiuExpJoO~uLfg- zL4P8C;3FJyp}ovphhK|lzi<3F+aLDYA+3|M{S$X!Try>k62g zN+8}|e9|s_*_+uC7dZp1FU3vOz|D%QUKj=Ep>ccM{b5vc{t6WT-}R==;C3*_Wlz~y z)xP?=`F4=7dC`XIvx-O$wAt-YxHfJUDOjG&{lVZIMqePJ(lN|&SqzKnn<7z^4VJ2# z*3LH$VJjo8tzEtf>|aUBuW}j!Fr(i@;J}NdYx$vPmKm><9IX=faB6;itjOfqho-tB zM%unu-UQA2b&A4ZQK^qu3@opJm_AeI558yaA$opIg&jpFcM5<+!+dVK<0~|8!IqO^ zUvk{LCIP7;G?r*R8t{35=4~UynD5Q3VVv)iREx|%UQ7}_jziWl?m%&#l)>Jqk0ijd z^>SZ1->hSs^tP+ocpXm~FGlXUfJ<$>wr%PAIcYyF`&bvH!mA{c^V^wxZLU(7mahK! z^fyRIgd$0oChZ35axdHs{zF|fs_z}lj)k}&98evtJfE{Y(tfse^WyVQ_3|D;+XbA- z=v21}T+tQIL-fh5gLU-Z+@?YE!8(s45P`m5M`~GocOGYz%ki$Yjqg=x-W2wSE4B#5 zC+Y?ugIz#|5-VldLq2Cf0Z;m7O75$d<3~@E{mI4`rNP_xe9QmYttv$_&pXR1%S1l4Ad4#Gn5F?(<@-Acdv`7e%2O#plZ)Omt6gX_8v=?1OOyP7d;KdWCNI+yi-Or1DvcT=0%56U}CeMFLz%>>k7qd^6U%u6hwq9_J3_ zH-B%oeJPKK|7Q;UbNW7VM=cIAGaz=6Yzan+X#aQ@cRKs#6d}!P&ixAul(k}cm z6?uixu(b8@y47i0b3_0QO1kJ+rF zc!e-Gs}W{=fyR^Uc8oVOs>*nb*$RI6Nj0D|yl$4XAy{?6q1Nhz4s&j8`Mc)X!iGbk zoPJqYL>=zZzngI9-lMUYPp?V}4u6+CxYlmjbgIu>pr!#RnK&!<(>p83^4uCwdJMq$|PVXMinsL}m;BRncsRQOo3O9>_Qn+9IC~Z3(6q7}TtG>K?P|)h|9q<4>}Vsa^o` z9x{D!i&5)mmP%qip)GNiWbFRMb6D<2aW|osav`62((?i2_@BJENA0(?>=4*OqO3If z@@~N1i0<-9m)(ex-_?SQPf1JP{@A8|G=nu><+s;n?8`2hKeqcJeV4@^n0{)pmXRS@fhu#$EnD$Ra;Qq@$l+ z>aM+vfG&^NH2mrC+6PdJqxxbtvpa~?;_Nxdt zpEv(ft6+jYqF~cE20uS2%9lkM{GL?&K32VTf@8(66PNs8pcBG^rBQxxEs~fHrEET# zw6WKR3*Ai>$n&StF)5caPuL8fiP#>GMnv-r|16Jk!Uz5iC%}j*8ZTlkE|Fy*J1k)b zDZj|=Kigz3`I8S~S1u`K3X4u?ECA5R=mC_g9j0E%&W*x{{tYJEzhooJ%%i^)pjud} zhTh&UfLQ;FtFr6V%f2xKtaY6MZt3c5h$`L0p z7J^jaYyvFpCTPAHEW#j$+d{SDR-3RP{8mBHd6d|DPK*MzG#_4p~IF*qboPoI+`o3ip zYFr!ahEWKVV5K1tsXL9ESYB!_-tMR9{8Scd(O2r3)y~43XVra1W{W>%W0Nzr5_=MQ zq)ifYYPjFe`vP*;Vt{YK#W2lVx1#Jc;P4e4$PFKX4dH0wl$|#9rl1i%@Sw-H<+u}+ zmL-OBhu8lSy%9fiZ-(gn;X(T!e4q5xi4ra_;)h%)3tB}V@W6e4b!=X8Cg!A4AnrKtcKA@8lOr@_GcCW=*Hk5PDqj@RQNB_ZvngU|OF2mo#w9Jdil*J|oZ zxfYa={&s?HD@BbPn(X~hJKB1@8_My->W%qN?q(DE%iFo|Yf~`h0c=>$YWJx=M?UnA z(`DzR+4!spU0nrpiH)S_2lz6fRS4rpEAPVSjHznW2g-s9Vi=_I2 zlpH!y->un+?ey%6ct%<=`E3S}0Ua;PwA6HBujyCAvIWhQoZI|<#WU|^QD=yrs_|+Z ztVTp4ZE&}O8q z9UJjh&NqC%<46WBB?^s>(3JIJGGezg;N}B-tbpHq7&NkCSSqjRYid0Sk5MFJft4Y)__XCy8$UrZ@x?x8X#ZA1-|PDRQ}etWZ%+o_>Y8@cUNw}|g5tRZ=q?ZBAP zhq%kZNkV$X#&!qWv^2LaT#A)kQGq=UUkg9y5xcLKNe7J&2vysr2YI!R_L;stwG#XY zbHDI6F6DdbgY%lqD@-zV2vqQl*ID7vODjcD_cjuoE`?&k^}Epp;bwIlT17$vSP`4^ ziG|QYghR10lR$UTE+QYn)Lyk(!FcTPkCaon7ak)6a{{3Fp_*fb*-w+iGpa9!rZgdoFlV~SstBTMlbF|>49xhi_rEU822({NgE;vu_-a14h4wn(~zc6Zagyv zqH~>rw1B*RAgi-i+-Smn`ru(CZw09mZT%*X-}k5ER5QP!+9%Hal?xjx4T-CgySPkk zLyyrRH6w=w{x7syyrGZnBTkui+7gM*V0o5m$8Ex<>h~Z17NMPt0UvV{sD**9VHxGs zi)Ao+&BTJ->+FvLYnLny=&qsX=rp@8H9fx;!G-B`9Kzx?fkY$mHT0VU_)B2lqau2* zUz^sW0*IgcE2Gy3uGh-{XaK~dr-3g;9_2jMl4X__w!d9Pbi8gqe0@K8$!F3Y&PYF1 z=Og+`z_oJJmj{(KiLn>KXJXcs z$NVrjHxK=!$>5K=3StvF-GWrxrp@%vzL%ulqW^^O+jqO2$du{qMk-6iVwdyyud{o= z?{1e_GpVd9S3nZKn%QMUmK_^pl5BTEujC5z9CGY7m(ta0lqmzzWzH^G% z=4RTbrI$+=XE_fL#DM00tpd zZ77tIzlBsSWf3#rQ<=7F+@-aUWU2f^A2RaZjxnu2-%JDs{odyGw3$@}g`kTXe zQe<@6lKOsEDG|$=8k$`*n3(CpVY7Jl^5oFI&$i!>_P>S(TMg-7JenaZ7TRLLg06CM z?%{3|;DrrtP&}8*n^z&_?|T$5I(a~ZfQN*Sg-WzR)*uQ1y%c@wsz_#Ep?ZD`erW_T z-AZgC<@$=~UE3_qKR7sT^AS1k6`=-p*;u@EG%&gi`S{sCF!7ehfsltQ{k$b#8K#JM z_Q+y;ZN62f3lXC7$q3)^+8Sklp*0qM^4*+00+Jj!T@BZ}NdxOJT*Ih|pTlfq@y^Bb zU(+tzRy^8o)j2Az8vIOG-)(t+O)1Q1JLNsQSDbeh$t|=)3y~C{lLpZ3!X@On%E2b) z;$*qjO1eu7wP?kclN+C@A){eE`z3)+d4rfznanwtVYgm$hZ{fqkJf2E!#}2`_^Rh!Y*AJELcoSyK=+KfC zKEEh*=C4+lN{($5$SkWb=29l;4h%G0P<;4e9n^un{C0^HD_nLnwJSceht^jjE3?h` zNh|jbZz>+kvOc=AZtk+G2^_i%D*d%=dQrBQPp%>GR_RYsy<$|ou%{l~>dln<*B(s^ z7jsD!Dah|nOv!j!rLz`;;cQUWK5(!QGTQ}Xh{VhCTE{IfT;=f;lG9Fwg+?QMU@3_ z7|)J*o!cn5EvO+OBvy?;@LznI?}1 zQ)IMN*RM_H?A?SCgUGC7bQcsNdm}LN2IG40Ns>TgO=Vv+Iu$h9qt`a0z1$RzFrnu$ zENn)`u}!p7lo9zF#Vv?hwOVFTCs8~|(eHV(@yDK?w3PR}FipCHLKHkA$e#-!L zzl8nN^Xx*OyOv$D{r9fWIpZpcGHm)c?s<)Y#t<(v% z1k3+bt4=EN(bBBbr5bh4<$F1ibOb5dQ9p@bacv`&ExRk>ztyl?$+j(x+du&;jl!Ga zINYc(ZauGl6duGNEF_>8u%*+(!sRo-fBh}2YDY40WBPo)IRE8y=x@_T^oISo9G07& zjoH2&8c|>G(fjA*a|4UoBiuAK147-V$YdkkJ+TY4=T9o>M3(QGTTk{IFTlHeB7W~T zaY4#Ej(U?!sa77fW4O#&<7lslj3yKyY#Ii^7F-6HS)%H7FN^+|yBuspxHj!w;Q$0% ze4DCOgy=v&qq}(V;MaEe04Q)*&rtDO_|^2cqfmM^=~=MeK=AC@zQT5@#r?@YtWPYh zD*;t~%TPfv!D4gT>M`@nq2y;4gwx14HMzX{3fb#BFIdEm7^7=lqWzA(u-Y*K!JIpOeLOCg9-#CQ$9|*o5h`wsA5imz^*s1(n8~&~A^~{M?a2drUsp*df9qK#v z{oe`2Tzu5@3=0&l#=rrx?9#clB@60&W=V+}FIKP>J5WS=L`8v`UF`wY){$x-i^lLi z#F05!$m@Ro8U-N|cYk~eg|q*&FuTz&PpzKM0jj1s7E5quO6vyr8uCc3;HQm*&u&K! zl7F|Hn<$>HrKhhAE-tRdwR80;*`KR1`&BDHvi5vdcPZjq_&ipT^2rLW*puJGlSkDY zTP*KEnA1!QRq;BXi;F}8KoqTlg&GCS8z=?>%W-jq1=mf-b-p%oS39}NyUz0n zB?56qq1^)N4B%GgcDJbVYW`f(NDL6!sWiCgE&8+g48``9$h0T4?^_Z4pOO2o20plY z`Jp!3lT;U5!z1hwM7g^ySf+^?1IR+76?Jp`>}fprWen)@Iztps)mNDG`{ zO_Bug5Zdd@0GC+wT)Cq1JuupPUu_UBs@o!B#QizUzZtfk96X;>T|@~N99nv7yJo-x z-p0~eeck2&CV~>);<$!rPGw)R)uj=1qM@Bi;j&j-h0BZXxPSX7GS7F(3T6mXGDDA+ z3UE0Idn-~|+9I7Rt+avkEiLb$B*Bkv0LXEZcc~Z~A@N-)mg`8dVAOACH_M}Y-q>&V z@Olmv=~E0R7gwk8ed9@mz4Dmxv+n(#toY&MKIE?7_*0uX)y-_C3@R37Mz8Wqq{_jn z*;>1IS3d`9f5`C4YrVVuH3wv4?$PCx(C21qxhr zUag+wHDq}wq7yi9sb%$46%jJX8ff!^O;X;c`co(AJic%G{_W-lXK+%NlIyUQ>V9N7 zhC*N^d&Ty(UyX<7>v#(OOOBVjm5=cHAbCkQD`$S36Pr^Im43dK-(wz?pNmr%v+Z8Y09be|8exI3zjt<$dD?cBrooT>;xmLWceF1t9te7hG zD(t5k?CxHSlNAkGUI{?M`k|EeOAF9W$^OEV=nGIz_9U{cJdUzpg07DgbeHx7P2Gm3 zP(N0Z9QjZ^M*SU#ZfH|=;4>5JecRSu>uN5hC|wt#P3yZ=`I}pm%OVuvq+pCk;V5Aj zM?tBW6DZi$e}c~a;Q)`|d7}{Y0m4uEEOeUeD@}O%xF#;b^ULwKazK3dXakrz_v$!2 zS_I9^6@!s~gagD2P|=c!WQl|yjoGDBABuaZ_Q^iN znAHBzG;E~xt-qI}#FFK&&)Wb`pL*Q@v$(W}7c)wY+(C=>eA^ps!_^;eI;=JQQ*8D> z1P+*wS$YH5ey>m>T^Uz63Gk^&{CT_!{bZl!`T4+3A(}UQJ4JGCB03;n4GpW${>!iQ zW(}3MxUVyh-FGRND)JKE^L9Rx8ivmg@dYoK;RpqkR#xfy)$9g&2wF#vK#zW3?Zfx~ zoD(f)SMVTwN<40P&)ngI0V~`xh{*Ne+&uN{9uzz{yC)q4Gz19a1420iD6Tq^05}G6FLN~2tXlZzv5=97dZw;GG_rhw zhYMd~K%Fw*L3=}>+2T^=QxX9`M{7;I2k&-^1M#xbOBMI~V^meg;+Zqoq`};?r(6b$ zvkQD?`bB{CWkvCj+b!hCel0Cxv(1c}a4qBj6k8b{6KkSrd>LpXKn=%dgePT1 zktS-IdpTxZGs(2!%I?BXeSzPSKHpbL3*IBxB7Xap{!5hlc3tA;|!~roT>wK69 zGLpYl%kxjn$+Qnesb|e>H(X;^Q?f`c+FWg zu&7||td4fmNm5{3{W3Q=kp}Ft;L9EUezO9Ey>jmu9tBw$ z$!=xxpJDSB+snx27fAl%eahXB$>kFsR{AWZL}0BnSY2tY$F3d4B1hzi#}?M-M5<;T z-Cl0dAXJMz%vPE`*BsiDE7MHM*tTN3+)>3JV>oB`Ts)6=O+pW3_U{KU*Lais$+Bbm zi+D#)M|M#?nkt3~G5!fy{80DeRF5Y9l_& zm+C8VmH=-mhD`@C!FexOes!~k8!!lhY8_}o^{_awvgPM2Ram~Q(u=q`$EcMUoG#)w zpFG#%p9pX$OZbB8iakvou%ZX@6}7NpiWAeQ_jQ~vaNmte;2vY4l-`cPme$c?eAWC& z1iRK5?zZcbmMO{r)d{Emn!7k~0aG8k^$moOY34}k<+9qM=;^rX=+m~tctxE#LP&KU zhZJm;+t{wauq4}CQi<{bw(ysxWMr`IA_B^oABv#>?KlJ_=1VL5Z2W8AB<3k|XRf%6 zC}@~Uj4deoj5=M!zK2guNrFQsVhyOBD(1_zWRU&FEjxQYO=o$iMRk`c@e?!aP7;eV z7|CHLEc)F{!nyYFheNM5U-u;>q_I#dQb%Y-J$fZPeBgC6c{K}VD>Zf+K+ax&;Ab^N z-5_~YJw6&KNA#hWBun+e0Am;lAbM`2vg0eP(Q_ny19)fM-Az|&i3<+iV6f6#I@u|- zr@WCY{Or3VqWM|f6H~}Se&i<%P%a&N9}q3*sx2xejZ4oqLblEZnyt`~M9ALrimtqq z((Rc5wfJ_5R|6txSH76xFog2r6zE>yS8&vU+?dr~;U-nQQ^0kitg1~J+n9<@_wY#B z6j=L0g|v&zOD|GA^^O!%Yr?+c%mqu~naywC8k4$p1*VlSUS1y0sZ8qgJC3z?`E*Gb~aaRwhAu zJ;R#gIX-l%YN9j>cyaU*j2ze%!~XEB{uB)>Htp^BcoydAL;Xrn99{oaq>j-zgFto{ zKFLZ=p1Se%hwN_w(sy93o(=$P4DDX5u>#I1{4F9#8pcEnwZ2WdJ1%KjtvYJn51D-W zyN9(_gSCUxsNY+Q{ujnYKrP~lbY&5u7%j8ambTl;=h!^u3n4WQvH7!JCHs}Kbkqalyomxn}AAL zlt760)HWXEZBwAfV*E|D|Hih~mK$I7O;&VcY;iAo`XIO0AEFP!nqTi1EAq9ryjSe| z8YRzuCg<3-rUG8QhQYy4)d!{RDw|s{J{A$0kvub5b;Di#(`iz8^iGUVqMALZMMQy_ zHQ=ytQLrEDxe*)}Il2s^80~YP6$H{6ed{Nh!*bnrUW;jwJkkO>| z@HQ61B~2y_fdQc@^%PWol29ii^LuI$VHCgAb#C|4Fm>3;y6PmRi;^4XFtKvlfq-2z zgeV=nSZ^S0!NL_D@!>g4&`F3b~XdVznn+*=m4S3PjsRdC__0-hWRp1L%f{d^I)ZKnx)A&&; zDF_(NohWBPSjax9Z+b}{%bS!UoL|&}TO^)ul}nFCyJ;0J`a&uWFep-aJdoXyk+6|x zY{CG0p%F{^b2?X`simWGAd&;#5R|W}-mLTL%1T_@bm6Cb=9#=f*8QeVm!Ap5@i#Ev zUAN1`>{zN}KcmOb86B&=(|5;T`Q`lh`^&TB!AeFpL z$@SXnrzVVR{~7(lFS%ryNaa<@#Z4ry|K(!%qfO27ohAKfgqMdRAuW%&jNr{G3{1DVRP7 zFD1=$U#{aY3PQo{QLt5u3*6tH_bLxE4vjA2zbBH0nAqwM=%OpD3{|rSCx?=8u!$Lz z6&YyV<9J0Jqb;RcH@AUP5W{7@* zybyZijH8;EYGtGn4@JD|rWHR|#@;UT?DfEzN2_%G0QG~h2`EPisBQV8|ug<7sMEnjz3bl_mfT6nf} zM8im0GH?`H*;1;kg+5Jc@dlqpY9*=Qv*LBm@g=xXFu!#y8bS&&q^Qkigbwpw| zc(ucbR7o9U=4=kFq^3t{*t3mHdKEW%|H_HIjJ%|+U{F+ia|fno2p#RrVU(~`UXL@g zEuAYtO7MBZ$kqJv4d$>{*?lU%9o~w~L%DNhk9@@n-govbpQ=|4&yAWLr=7Pkyf@0} zMz7hA9z+`j7pzBZF>WpH)vNulG+s6}~)uE31zIytm?@G-~s zQk@2mA;ozKV>gUQ+nXYxgBPxUmQDs&j2f2@5SyPzIqj609yzYLR>-7H! zJEh|_ieeEmeRv4GI1P@Znkw1BWp&3T5WSAT$}-Q6zzV?tQ59Iz*{i3ODGhqb!zGI} zBW5ISB6h6`F70E0@jF(YQ351omjh8YGig4{VNjWlt?v$dtD#dWDbt;S=>0+kd9zYC zZZ^`MR+1}tt@qOydrZ&dvMHzK+Vf+`QPoRl{R(h-&1naPs7kdY-m2Ynt~mWY>WTTv zsi}|uW0c0Yyld>0UQ9&NL$VkV0P}3vrez72BF&|EufI#B>U|DErCnaaXFcshfyC3k z$o5s5-lw;RB{1Twd$>0FMM~#b_;s2vT>6I<)8$s#I3bo0*3h&B1ZwG z3NI)F%y0Bp@cEn{K?%IYhXhOUUA%<)8H~l+ma(!S2Za_*O7uQGwX$h`AN1`2iiS<$ zAJrb`s@m|mSnNs|Ko=)yn%1Uw^JbZs*F97%WGgTI{m)Z&U+sP)pA2azSE6It~0g%4yvY;_lkzK^lG zjXp`icfL=>QGnw$pLC;(6gMwr@A8!;Kd^0qrEyFdKGZjoW7|zrjVmVwEet!y5@>D= z)JHrK$l=+wJQifh6F=#s;5~OoO(=c50z&kvex*h=nONMu(U8oa+x>C}>c_yCFmB+I zXLoIY0>ydzx(+)R`uOx`3)H*CTK&JQ`*-75CRcLO`>J~^Okb+iy_F8Wr_kvI#40zwX9Q(+Uk{t z(g*j!Xuv!UT*RD@@ayS(eMg~8_r}2jF}p85Cv!HM(t*!-1-swb8=5lAH7Aes$V8rNM&t>? z-Kw2dZnPkTo*s@WPHp^Iqr!{257-+z??me4gWLh%TaIuHqAyhrGgpRIzMQreduXLS zs0uvat0Tk*d)5~9kV`!;0~r?QKx^Wam=YTU2`>WCP!DhtJnxhc}k0sSKD^0ZjuHiHtlf{CnEVk8?MG4_k)gL=Nr_Qyx6BwKMFBqhRfw=jt z_!tq3#0d(psyPgna5~9z(M^QMd8SU*X~FBDVb)>s&-wYY*ZFb}Kk>mPQ)?q6$@Ody zvZTVgSf^n8Vw!+3IK8sT!1(L=)z_}T@44haf;?J!A=qG5Ms?tvA1uBIz* zcY7;IbqHSm;)Qt$Q@?oi=ESZ!2|M{8u+ z8_mE_z5dy#7;63(T)|nm8e$xNxWNnG)3gD*+S?p)a>(-({B4jKRX+RRXCf(NKJ`B8XQwX~W;8V=~g4&>UAfHbe^Z z_wz|PFnx+j>1yjM6C>T;Gocni*>(D4YHHdvbk#>+h^J@z+*|Rfn2T5HG@3$$QH0u^ zlJoA};C`b816rCmt>nkVbTRG3PIz)L<>Gq$!FK1gg(=yc{%Ve5mJuIe6tkFl@j_FZ zs^RK)sev1J{JZBi`zo&rV=q6E?aK)f)kTx&i#!gwU8m-sk#IIOb1%g*gvK_|NxksM@CwTgUSOZZ!Y2I^lNL!>DF6zuoG z_Y&l3(KD%qK^5JD!&rZAi|g(n`@WBrzyYQZH-oC&@31pRWwKk@&pw}?szVl7V8HyC}cb3hqCdIC1t()4h(lG zYsynTt3(O~fNDamLvuF44u}jig^rN;43~{M4E~_VTsg}GsNGeJe zCK`eeHCUqcvnY9F)hh?AzQlY{gGfoVzZI{)q8xIS?WF7;hq(P>S2-Wjx+GMzQqj=V zz8S=YC!|JsdEyTyFvsGY7ZB!$Q_FrVmoswXKfa3D?-zql41=+0+hU6&CMl}9BQA#q zLN+00sgzvPVFl8so1A>X`q%a`#s$G~l43dVL@n;Mt~fdXo7jE=ak!SzaW0^wlYW6! zt^{{!AuEp>ta&78l&TLtI+3dDQEB>n9eLGGq z$sqX-`g``d9qkhf*K()$-GKI5=8YN_0KG87MKd!lFh8za%PryajQ+fa45m8S zL)Zc>p?)#@i_;thC-i~HUJ!LtF>Vk>Qg}T4Jt7N89l&9NaV*C|c!1UXBn$oS!{j9L z0;#fRCrFoKs{N>28s+T|4~Wc~S<{;dI^l)~C3j|@2sLxv>7e@xRW7NfqTyWdn8bL_ z5uycRqvGXV_2sq`I@~&Wz79%aO6S)soGB_&#T_@7OQp{}uUseCkf$vfox&r-k0EDC z++}rzh%Ni#1H@0mb=VC*wf=CX!z(y2>T;~*x5OGz98faL3Fto=r2&45X_f#*>38e6 znwR0sOKm=up%GmoD;C8CtWy}=VBqU0et-?IsUE~w%{RGTA5orzo4J&9I^2XSSS%ed3%o^1nczj^W)j_5D!Jk)p4k5J)9wg2xuuBquuT1`%V< zhVdA52cyOFRpD11q!RoS2SSvWDg0R9W}#@>lGy+C3s@DbhEYTJOFMec7-k?@28nJ#|U%Odr|H=B5<1V3F$;8@T%J zn-7CDidxEp{Ywy!saR^cVr*J%1^he5v-jWsRv|z0Hcc7odjCw{hxdH6QQNc`Eyn7# z_z9$9E`?9uP*yeGdz`*szu@L?P~m$2HJ)_E@gX;n&L?)a)uiHkQEjbIU|eNg^fB?} z{JP<&VK|79ACUjSo(uC@TCg|?$hK=6u zDsqC{ho_4e?hWgKsS&)(^X)(x@psRm0L4NK1#M>O6ONu9sA!hrE0^NRs4H^aJGd{j z(i)*dc05sE-@Nz{0~J}4y!XHP7P?g_9xH?naS1;U`!+66vnoj9QN_vL)%qeU9Kn)t`Ssf}wXil?AyrWPMx@e&a23R4X3!gwH!{pRg*9@4NR%&0<`-IhKKdEPn zCdO?-g(RaC*q^J^_5Iut2jspmcw;3XvMLSOgg!yOtNT+bGdPQ<&G9g!xwze3&r=l+ z(NoC(Re$|xy0%KADmtgS^ka2MA$~d+JCyz$;m!dL{^O~s5zve9h^>qAq#t)-^W+aI zB@P7%_p1NdpB`&P7zZ&Hiw?p-e1FC-z;V{$vsi6__;996w)e+(G1*$do<^8&_!NOv z%Xa5R6=yT-lxa=nCxU+@!InvVH4mWpX9KX=pi8riY)5_m7YsY~&9E-b`WrJxSa3kY zK(ElnSqSvLtIBazgylEGn%`>oIpjK>ZE_-QdDA3&PpQTIaK}!11!rWV{U{A0r&Dh7 z!c+7jf*=h*kO4zfdeBli-Ss{z^b;;iCs$dupZ&n!LK>joe7GYp^IBolhDizrf05;5 zGYMqD$KwSi40~kEsLPux4`{)E3nzC$x_W@e!NKWFcsv z%GBSeCprUTmBzaK;M~jacYA)ZWdwR%q1Qj#O7yg8NR(7}UT`J}tLKQQL7iQ_ zDF!EjNc#lW?5=%3NbCm`VMH6ocZ=klqWTX7jPA2ve&p38PT9lyO$G(H*|w*y&fh=Z z2N0P%e!iK=JaXIZ0(#-nS`(aqLsFPoxSi+N?u!KOU(>1j`A1)RwJKln=cKdqsqZvt z#?}tEsh)2@KLh{#P6Vbks``2DCf)^*ubpFWPw43~sxdV))#}sL;J*2xYM%hKk8nrG zPy?1TBFB}fK})2RhXsoUVfEjcyu&sCVrCe}Lh4&KW}p#A0d zV4F(-XQXx6+*?`w`GKyot!X1sepDEyclKw&(rnH zpZLCFeuQME(oJS_a|2i&ftib11Y2^-##?6iEFH=hBT4dY3Zea&G_sqrXxrYN{So;; zD+)LL#Xm`X33Vyt{)C68CHN!m%M+3eGvKuUgXnB3lraDxubb|t-p}4(3J=IsP=lst zS**-fChEswb2xNx2OOC@LrNEZa!>ct)7Z*dzu{C=RCI&jFgf#B)H)iDIUjWKqarcG zfW01yH+QGcK*V-*s@mVc-#z=x&(-RCTaOy_JH<-=3!l-wbQQGLgCBq!i6AREH(K^Z zkQBmwRG7M2zL2|=F36jN!%T!o;KlW2Z6G2PyzRu*$jud69VWd9gK@`My4SLEu=oFpHwtA&__; zz+fH1{T+}%bBz=U(U$YC>o1ooIEXGPUsA2@vak3w!378VlOAz#SF z{TiZXMv)3zI#ABS96k(W=2adW5mYFy-w&jm`^5k{ zslk<+qj5K+?jn$t8i33t(G;vRypf2Hj6{A>ZE1|Abm(Kg!E3udO&`RC)dwHok-Oo$ zw-WpuYIXqJIoX!foV_Jen+E+0Nx%*qf z(I|s$r%`)p_bI%*Y=LS7os?1lC}t;HU0%M$uxLAVDxqn^s4yt)#|!ZSgex$eCzCb` zlYrMZLm7rMnW>uSl`vw`68X9_#y_MsdDS8 zxnio}7{yEd63j}>q;#w#(|dI)zuMn%E}HZWhKP!(-+A+1^xPiH7B`0jg!mguPkw^x zg0c(x)=O2Ry!xZ6W7K4dWWnJyQe{oh7HdRg7+%9TPc7I`wuD_K)F2z5IIn#$qiH@G zp{k!uYeF4B%E3v4JUS@-B%oU|>Q!|xk^k1T0AhgyOLdUQ`4X-BcO|^y%D#Z#hUFZ! zgtv{kuEu2?wJ$bgEheej!}__5DZ2C4bBYR1emB}K9#I&Sfe5+LPHxdhuXXYgl{=&} z-{0iiHQCk57l^fL-3f8bJ2mgWp%iQ=FEQDZ-^Q6*45orI1GCmHTD*mCQ?#-Jeh8k> z268@50{2lHJ^|*xVi$^MYeV{O(Vz-4jI(l20rMOZq0&SU{K+$JD1g6iml}kTpba7{ zKfhpz_<&LVV%<@0s}|KH?orev)ghp-q?acv`wk>CkC_ah5!VHXV*jAAZ&gBN!&qMl z#+Kn${Wcf@{TB!C%M(g~a=?GU0T zz&4RR=nzCv!JtKs111m_mj?rjF67D7rN{L*mA1K`&u)CQLHIXHdJ{9lVj9aXm)Qvrta)iSC*k8p%(Y@vIMohy~ zn;XPQ^0E7Hb$ugXh3Mu~^1iMILPq@X)XA~j<0lze+eIxn*}l7Ss`zgEeJEIi5j))% zC2r=la8D2ZPABg#qn0(6*G`^L+gPQqZpjJ7M%6|{Bvov`mZOu=x}GF9?ym|=oQf_8 zUF|5RiI0344J8}eAd@5UgFF2DlI>5ShGbL|11UAMwpP0EE8aaRfMv0BNPQ3m6ljhd zcTlxQp6Az^X5{8;e0E8jsZNa_V88l}jPVkXHD;jlZqK|*Y3lZ@8iQ!?% ze*}wp>r@469aAPwdq%>0OGfvT(wnfad+D6VZ$>XU+Mj>^@_{9mI^#C$8wISluS6x7 zu*NvH;8wJf-?IqI9QI5>AAY&J@(+0R{eC|gJ&MhpQ>I>R??uvuXu;2m{wnJc_yZtx zqf8 zr^qzw+l9oGl_|JvnouT|6c?*gqjm7Q_0O77${L*yN6YF)$E8fh7B?dm%S|kRUWyKVd~O*j&jQz2t|mBB_TD_qilw-q=K05Tln=D|jPnO_rY8o(7hZW3E^Qo6|zp zXHxj(ufWt7$>th1^?#xP4{YgXkl?`YFl;kj?0U7W+~jpxjK+hRU(S~BwA-w379jLQ z`ZqV=^6I;}41MnB+0PTDL0wE{(E6E7ot8@3a?~vi5L(mam)|GiECJh-Hq{4QibF#~ zuX*9?0+(i%zrD^&$pe1SJp=2(Xb58dV$~65G);=tmzO~0FjL!B3;LRi3S*0bVxNSF z==wW7J`4KwL4Uq#usBt8=m=5Kg^#xZR7g|YP-jW;&v-9t1eP zkt~s$kK4L+>tEU-etm3Is?I{Dbj{ApFF+j~>^~Og5OdeTNaV7y%zayuTt>AbZ$nFT-&}D~w*|!34 zl1~VK?x!CZ=ZUdZO`b-U2;=I@fjcPgyQA`a+jv#FWauZH`Do3jTzpHGZjqVN=mkhN zMaL@}9FZ}!45ZW)a-@?PtXtQ}?P8am!eaS(4zsmjx<$<8lFWd460(tRHl|v5nApFJ zChy?E_ax8=%-Y&$GaQ8&b12(|Dd$dTj#6XI4a24rC??|}DD>#*0{3G|5*fcrg`7=! zla;s9K=EPkw}#EXi74b4`z!fogW1JV)W{&x$k*(*@fbCNRcG4?0i>-q)T&=YLJ;LR z3xz&~qbSVCVv8ftfD|JsXH6!k>XG2a zqGBZio^Lnt8Mf|LSsQ!w*iNG*xR4zL8@f}VYM@#x z9hq|#aarc%uf9C=zF8MF1rd25tj-6`;6TZ(HutX;XqldTp`?_3L$%1WENE3W=hPgM zgs-DzKdXX`9TS>G4$6kjWoSb;TI-Qua|KuUyN_b51GKd(m8UXPql<%bG>4`{>8a(T zbqe5V9e&l5PPL|>qq7cykn=Kj#)(BWsp;v=vojFI05Uz;J$bXOmz$tKbcAvwYWOqC zQeFB5HH9F+94VAW-f2BN3WJnd0`A+*7_87vIQaRx^yQyS(jJOd<`jI~p!zMsgeE`doV z2T2Xf&o7`pR~T)Jc7?L9jnD~4sxe3nr|o&YkkLE~MVRK2AWU!mhW%W7d->sL?OPR$ z3p^^acr`hDN)i9}aGS=+u*nqHk3_v@?=_I%x)aPGZMS24h#$C@Dc|0ew790MhG)~& z)ocjE8jBE7(k4oNt8`xaGerOnWne9!oi_sSo0s{i`b(fO8v6>KwAZ;GSJ&g9_ODoE zk}Bzcjs@sOcRrvC|8U=NHdtb0l49x;-PTcvpireNPNsRUL#;;l#w9TX36O#D zS@i17H{xG;!V9A07(0>qXaUUDs zYcZY03qjSDmXdEje2!~V|Bp!Aj3PHb)nN4zv5tu8km^et0@p&XY^wt$@k+zApYM{<$}y^rj$Tfq z-H{!M-iZedgKfnqXCqYOQ~wN2_O4X^0mG~|$$erGRL4kDNv`97=@&M6No@Ky)?@Y~ zcno#NnNrUPlbpH$&pd*g)8GsV0ujaPmv??bC@`%=5Q(K@uqCDi2L;r9uvezC{t-X( zbw)CI6qHJ$(bfbSo3=QO4(D|F*+D*jVKVz-zoo%r6n6Ul3!Ik8@&_2+1$*A3KP~&8 ze?xp}`rtVG$M@968>@=b^51M?Eg-UF=2$F*nzYY%$aLJj6R-&W(iYS?5iirre@3af#ETc1Frsy1EpdWGEUgKdL=e*4{T3$4% z*|HGG-tY*90Va$dLO6G605S;aw?%8!hCbq!eCt&N7SG!-=jKBL9T}F{WWkK(Wg+Uh zrVzIT7b^OAs$#3)k?R0}znuEQgX;H?5}8LWQx z7R`ys>>Ds5;e)W@2$wgQIdDJ^HoQT!6Jt|te_hgmn8X9TkUN;n7qm$-{9-b#Ilf5P zy`CMCB#27oVfmIuP5~@)5Tk$t#$)XL(Kkhgok5gJ^If@&Z^R^p^rZEABf{IwYmEA( zskdIDj8?Xs%$z@(nio=c5yi!uLZb^SrIbUk35v=I_OLJjG*rDP%m9j|1Elyi^@aeO zF@5QS?dM7EmALXFveMj+;ytEHEfGPuWgHa}| zsk>vQ$wNrXa@tS~Gye+HqBP?xl$HnbO`TE4fq|M)e;PlHin5x6S|D5BtOyv(J0k%h z_Xfn*SqsY-p&AlkyEia8`|=sS+^icxwu!^nG|zek}lp*4ZceHW|sFr>fy)B7w-UOCH?)PU(a(F)!X= ze+RMR&q;F`)1V8TdWYOPaOXn*-l6^{yt=`hx+^!PqgM2!%YhvWd#0FCMoRS=MlK42{9Z1X3={>F^~l&8Hlvq5AhgJk_myoG)!Prrh~LCI!%sm zsI}X_tKe1i9d;AQ_S?iSh7Cw&;uB3ddrWM82)Z#*sM zp8Brh%6)C+&Bn%#Qy>rG=i7x`7!AmKIVbiwo>QWKJ$L?C$cBtjvnfyDwKcH&gIRxw zCStNHeXkKfFUI@cprTROBA0xdkE3><;V~pV-QRw1U$sb9b-#5(om9V88?2Qq{#I*5 zDy_Drfq43J;{a4DgiYEMM96n84z|`!(Q+LDQpx2G|1Gck8C2k{Y|A)$7WHQ(l5+e9 z>Mt!%b3#gJK_Wt3Sh@MLAgq<1Dt0KP1=JMdAm*dJ9*3pi6jC0iew|31tZt#%rpf_d z+zS&Ao7Wwksc&O{xtcKm>SCis8rdu`iYLBqlHBXRTm&{*P78F{jL1*bUXFyo_9jB=R$3rhqI`re|2iWKuss zCS=z#cc#}ooRGm_SV(Y2vP>Y^%L#xBJsKXAo8Y%qFPC4B>(?}plT5+O*c3O-=y1c= z8Y$wYW$6@{>5iErN`>TgsXzE7(;Go>^Gjty_R12-fCegJnb9+s$;2^}+lbSp%g;+m z!LyncIujfhk$Q$vQ+~#wJwFsrbJNpXl3jFOm`nbXQt&}XUp;9OdmhKscZ9)~?OONQ z-$x6Rup4>KJsZfd*!;+q^)`cte$RxTCUtgR)$S|wnmrSA4H}YIYMlIV9`8>citG4O zkjApjK^`zNTkxYg&wZW8l}a+>3&;{=%IjvKF~^4^OWx@0pd820naWLE(&k2>HY`!p zhM8g$NyVy_y7Z@kKumM%&^|L%^RvHX3dlI!%Bj(;5fs3CApxD~ck4;SlP?L19r`b5Ri;H3cJu{KA{{qoRjME1*T!nrMD83j8UaCg}&v|AICh~@RR!^kG)NQ%ff z3^205%4#~;F4UbnO>9e-WJ&?A3rcswZ`>jnXFn?|D%!o@hjm}V!5JXhE86%)y5LOi zo3wf1C_3&@B;+2?6`FkM78CTf=2i;MKET_+q7)uHwjF?T{BNX8AWR)V^fw6Lb zF8OEIK0J-x)m|Ij{n8qLe@Ux9LGIrZI!5;#co%hP8+XK@Gan z{x;*4{4`S+HB2qEbNn}A*_)D5!6#W#UhF+4-Wq8JOecnPncrnAY;pvh?z41NuNkc0 zHPT=by-D@_@(j>ern-z(QW^p;3*BLeQ7Ak>Bdw~&RsxTZXN>cjkg1r*C%4w|y9CeX zTVyO5Zn)U~y%~#at-^%$TDZgoLRvAGf zl&q$kDY5=}(9N;B#(HCv^2aR)7US5RIo94pa(Cg5QV7tMembp{oG-H0`ZW}*;1_uQ zc;Bs_K=Q2OwY3jdns~iC=RLCQs;KWnhUl&G(7Q=LNa3LRyv^AZ?f-Yx2bJqRB@+S^Lm+`^n$ek}byG0S4{%)Az?YzS7G$TmJ#fUXp z8KcyWlPy5-R=9>o%UhOA266rGUcE;Gx|%j7Mi`6PX^1*+rTA2^v$Fa^WHccQBu*jz z0?D!_gcEWw(O;8XSB31FAz4_@I}Sw~JM*=mAW&D+%o%JU@m5k(?R<3dVU3im0+^g} ztzp2xRo@sQ9YD?*-6uKkBOq-ENJU1M3ZJ+irwwfJ+bP(u@CbdJTVMS?fxx(ydv&L?Me55CDDtqHl9U`cFJk)YS=-Ydpm#RZyEW$msQvg*Wfy z%TW)Q6X5D;AuF|ag%DR6#q_kV${a+@iw%1aNqpUv1@sO#zTjel}Z zpmIc6r9P{XM(SbufxvXid zoI)6-sZU7BwK#mmv)|kMyZ3$sH%p^8-(<5HrIu$5`*M#p^Dijhcpag6KR{q^&kuU> zeV>U&N&fgU=0ykk{Hn@+;}5?)e~k1;At4a~9v7N$!^1Wm&iC2~NTYhnGDwMXqZzjq zsS&VyH28+DY&wYEp#r_%e%T(NylnO*nuYPQ0BWl{fqhD%KL>pNa$Y39FL!vQ0p}I; z_fHKGqwa|)ra^))p!Uj!wp^FISX9MQ_rn*Tot0!JQS>Z|fC1zL%=NB|)zn?rm)F;v zslAvFYPPLGikYPol}Zg{V++MmtzjH`gxgjH^CSX+=H+oA^^(8>f;p>#3yTGM{%sk6 zhK85!Zi<$Eh(GU+eM%~pt7Xijz)Ub6S$VcYB1j!*VKO7Zwgu85nTDz6M)-3p#j@gp zbg&OM^07De^DD)ysmKO;fca}q2k|j`#zJEqw4BQ3DXJH{);b`14XaAeN1A(JZk;AGe>IsE*3-cj;X+!g=YvdFx;*5MN4}a>wtER4(0j}Q<3V|t!B=ULo zsp(rzQL(j8FX)g&!BZ@uQsF0J23vvbt)UoN;q>&S1+&fIie^Q`C>&$I>u8O&t^Ug}73!K4nI7OIy3SB@Zs74~1e8fwyH7(fgj>Rfz6r z%;H-Wsd|pb(-mG8QrjwLrs9xN+se;K#4?Z57oySwnCbh)hc-{%ziM=QlU%k-Ww%y4(}|3!obhpOoySUfLKmyu zwr~1}DrtppvWD8rJfW;dbX|m89Y^W=F0kfk7~ckaM7^$T+0&T>nG-iE1Q{wntK*>W z6r0o=nps#Y+UaE_F=kl46H!qXx`Qk28Lz`C-cLyRC?xEBuAp^@`kJPmx{T`Yf z;r79?lD}xN^KZ??ZH{nKvT(SIxZ~tnc;QXg)yZWl!?PS&&(Yft6?aSAupE+%L__GK z%S_BC@Zj(GWrMZF>2Y5zv-D@4ZZ8;O10w=Wq(ztncj~Y!Y26bS->c!$3!2AR`2%2r z4Yc+c(n|5OONhOhWJUcTpqq45c9jeD@N}cm(?Op_jgCSW30Ge(udp*mz&`x1AMrJ> z15-O-Tdv0UrRCpk_RCtylUAeYR+?CiIm#*}6az+94~Pfs5hvh7-dt)Dv#VSi^WH#~ z;&lu>##IrE58<`9IbyB<%ifH&rx!!QC-De~xwTkFsD5PUmW2dXo0m7U#N&g`xx95V z-OB~P&4CyD;bRYzt?z5`mV>MQn&G@2RM!It4;NrT3Z`c8ZUoSK#&&t>I@SJh4OujR z>G_EzuXxopI5M`L3omg-=J**`&AER#hA32~(y=Sq|n9>merXauxIrcg<{F1 z;p$-%f2&5rw&6_&*M!a{DKK4^jeAJ>HF+^8bSQ-^LWdi$VO-2_7ro{*4^}_#=6-SnaB{XMB=;Y zFR|?S(7g5~k(g)osDoz#3@>fLkXc=SyN&E3%%Q6nh;B0#Tqq=7*de!_lasaz-X50l z3jHGG)M$<2#y2R<`qfrQ{L6OFVw?ZO!}Hs!q2Vj}yztg$dgu24(oLlJZF-^H%gUp) z!>zH`D{#T4)@9={LISIxUE*g^;M~{gqVg5y<$Q6z$UM=$%NAkY?hXSUiyILo=UHOHOyNxU*oj5aFOv?JZYnWaV&gUGRstEGCDUJI<9l`aD=ytg zoB#dSk2W#rqmd<3-V3gfAI~U=g;PzEZxA!hj-_hn7HW>$HY<$LDBbswHf7_2ZW3BK z=37}lFb+hRPYF;-p;NPb8kxm#==Lpd?+1VZX$|2kuT-Ha&<8_cmi~)9cUqSAV?W{u; zC=GAu0K6<<2?8^H7&VuQ_D|mHM65VfjtsFL`QKrOgT-BXp{`d5(;dfsdyQX@pkUI4 zQ4;~ZaPkNGS&Q>B3I#X)cQXuejdbO-gz9Jsq;i`8-=Yi?!1P1nkNaJE29>ke!(`#?>Gn8zar|Z7H=Q(pp zMn)ZpDmaZxoQXO_7W{%Axnv29an@a-&&Q{w!e1`69bfUyuDQ-C@t5fI#qcx!qU>au z7J`WTZYcERTN%&MC`Hd$v+c1x*if!S2Mm>V4FUziX?I1Eg+ zKq^*7M7~u|DorR_@0^+x{4gi-BE%%j+8|cTg+?07g?Wt7O!(#-{;_6! zfo}K-Kp9;~l0mkbQU2H^l<-y`43d&g@%*E1QjpxVSi%LNHd;ugDS?KXOR~ho#jzHd znbAwD5DVM{E(s7=ja1i72Ci4Pxf}hK^TeirXICRM7FGQ7mJr`KB5ra|9np=21dkFK zo(>b6^BY4j>ZTb5k({^}d`7|--aZ%Lri+CiGa)~_uqgk&q^Ovp_}V_VlE`Vr!I98< z^R4jik?XE;828{|4I&3mB>@#LQ!`!Ge35E~&Pn?Beq(Y;B)E22@@ ztK?S>b~~sBjf(L7D!x=S4#J4Ve?hay>=KE5ijgkr>AEIBtz_A9KYJ})8dHf6&GQeh z@Akn}vv4d}OF&!Et1u}@i|=-u!l!b_t$Jz`C%@pAoK_Uaeg10WhKm|C645}XzrX%( z^tXtQ#n)8fQKa_PI3+Tq^@t9Y zL%Gapr~gXACt2VZ{>*RX<96E?>$>T4y_>@R$klFjchT@?>w;bag$&8|KSSZ;l^6pA zFZp&4NgA(X1Ap>bDFMCd!dEe5#Mh7}uKy?`rzX<+|5YNnNpV^1{TTeb6v3yh2L zr=ZVN8WcrtBNv?DvM7<{7uKV0k<1pwtVy;jR7Em!{+4t3jhlaST(#CGYRXlgt`mu4A8 zum10N3*S>H{O;VX?N8L&iznk)mCD=um}e@HgN8l}i*s@ERnD-) zx?YxxQzdT)A+td0papC*@^i1T3U=X!*zZVI7M0OY^`Rdh`V8-^8hto5am>v}SnveJ zXG2P|GxlzN`jJ&h!afMVNGVcm45C!u~-r1$Ng0{MVY%_lK~LS>9)5$j+pER8z;Jh)GVnoQIV*4OwtH+2kN4Su`|PF_o#wNRxCpS`xo z%`oukH|JJNbtEh_K2dcOY9%Y(kuV#if*FmB?w}(cm zw+aINr_Ud;J(&yvh@f6Z0`j}gyiiPy(dTb8Ulg%_ZNww%@Qx%&p30qB+Lu1PSs8y9ihHRa%sv%)jxFAgw0-4Q& z;Y(LlUWc;r=^o(_S~|K|Dw*hBA65@VC#{8c?)@x&LHy1>vrPQp_C8cH0~Z29_wy&?DnVn1YGEx!tQfmF zWOO^x+uFH2o_{z6#gEkB&NsLcXU)hdrHaT>M)FICu<9?Wf$`TP0)5AJ^L$p&_Nh z^nIT-u|j^=7w%2({CT^7_e9ZCk+7|ahVJ~4&H@?ch4ZV#^9lG`%t}&MWqg7&qfDV= z)Rn%q)C9t&YjMcvLE%ktMy%eYL-5;5H?6s^9cn#&Q0#8=<%CaRbso{2w$Lo7ULkQs zpXA0j%WX!9z~I9|C20wtx#j#wMR1;{Z~rQpumuCMqX}Ec-3ChDxoH^kWO^5Xjr&_K z>O2W$Bs(OUh+o#^hvvm}2+edOWpF-vp6bRfIp}ACYeVKJ7GFtq9`(+mgFj*bt#PpP zT0&m9fbnsQk8F>G_wDNHYE{|Nf0+;x*|)?(%O8IxuKicY?=}&GhsBaeLgK75WTyH@ z1~?I~3s{D(NZdmerF*FPk@XF?Q$e^U==B%!4(Q5~ae{udd_%asGUJPCBP(hsq?z^9 zNMt&cUhuVMd=aE=%K44pu5}k3Oo6B<&Lab|)Rp86d@u{&+DT$<1_4!ztT`mF<~b8- z5QX}XXtS3x5$fslF)5_=V~v29b8k9ljSShQI-9kgiqnB2s|zlp^0N=4Pdcw%hF!(C zT4sfb=INxaX7KA`k*k8*94|n@-IY1hGZ1AG?Yj=I=kU~eD5X9zuqZt%YlXIgjr>Ag z_k3GChT-3qQ+Ry=Ip10D8m%=1?n(su$Bx%qnqdR+_)EaPgKXfZlz$@wh&Fe zw!dNO73I##E8_PhTE&Y95?Q2-fj+@R20KDQ64Xgxo|exYyfdlSHKXdy1mdnUR%$nF zS)Ktzz3-Qfx;JWTTYcbzhQ@YxcGlW_Z%+<6vi}+S<P;ECbuaqMiy9`9@8mjKu=*2`C91(oqkK&)k1JuHEF;E9Nj2kI zwNnPJVR3wExKFojppMEzmP?pO=0u?hsRFrG(o9QX7E#B~U);ix-%)#mEaIV2YkQNh&O63);EURt?zGD%3G zv*~-)79RF`uzqQYWO}*X_Ns^bIBYA!u`$SA%~$B;ZS{6mZ)azRRdW76>`L?u&bGH% z`8BaZdCPToD)8VPWi~BW7)$e#O%ocMOT$Q$?yo4!v~g4t?@K<>(a$D8D`(0~8cdB6 z8`W6o=dskv=|MukKERLhTN^S(<8nTv0|-u-~`Qro7g7C#Z0PUli@!gM6nG z(!LTKld_Aah4Tk+=M6D&l>c*@r5Mq(r6ND)oq1bklCrqz0fIN(4`O49=z0(jf-vXb zPPGlbGEO;K;}a9V>tMbX-F)Yj8>{v2g7zi9j~{vtyn3ng0@rZJTc4#={H|_V>4iKV zFWIT!zQhJ8T1_Pmq)@la(X(eB25W2H9AFuoP~izRot;YLJyUgnU@z(3d50c9e~D#X z$~6rMGZDP6HE^W6z|-_mR6eY23(vcg@H9<_sqh{KT-;MyGB^4)5^NSPtT?R1CcYtt z%lV0Rc+!G_%(_Ub3zoX9%jOEQh3<*zjqGEEc2E60ONstx<9Fq+e`@7Fv}>fVLi@QX zxz-4&ZV6`4+0RXu4d=MCRQ#W6xMOIzx(ZOhbxgCPG`Be~rxYP}6m2{&ORZh3)pU%M z4$cf>j%_iK71etcgE+ae!VV(j7LtLhNy9ddV zbI)@JB15Eq>1H?o`=B9!iAyPmz;j>>-P8KrNO`+i`%&HvqhN-G`K=LFdtaTuWE`m) zPXx2xdj0EEHTxPu0Z6(7sQ{VZe>th<^bYxHz%5q0Yd?JQa@(TgyI7`sV-;=S2(0T* z>lehIRNXn+I*VE5eBP0CDtu9lt7!)MQR@37y*t6kW*cnX-^c7dP}8x4N{94h+~n{C zPf~2VT(~s15_f&PpOm`i|K&(_Zz#MfgX+m%k1mIQ<#0~e`&RX(S-7`##r7R75>T9j z6_=EVcj??92~?Sm&Eoszb(kk0kCQf2yYId3BQJdNSN^OO|j_QAxT zn}`jjgS{3c#}EIuyyqRwFz`N@bHkqFu$&1Vy`V$1;uiT%O zh@x;wsh2)yPHQvr4#@K1)SKEGJLR)qya?y9)1KH6@i|eD3+Hhqr*qLo)sl)KWRp%v zlAf&wr-9einhYzE@&V&GhD%OF)tkLM#dXPxm31xlLBnc(%lZzmZ1D;;dyoyjvT)?L zl(UQHBodqNp~VOLCA+eBGF`8zg?k+GR|XF;`g-eMD|klRF`iyq=+R@VJGG#*R8pg+BPLCrUHFjzDiu z1viYG(+uZJa_!r5lPu`<7kxM+)2a{6^%iqP9NOoagn0557K>Al)mCMym@k!@V<%dQ zm2Q{E8!BzHVpfh~KIv3EUR|dC;4YAPz_Ctp(eY1Yk17z8KBC)Jqjyyc zmN--UDWhLGUO6rMGBy_P{1i75ukPgSMCs%7Q;3rfBM4FZF!FaCFSOmIUtDH#{^K?p zwa-zcoZ^t0>CN`9g0pkv*2SvBtJ`lsLKkPOu&=A}(e7I@94Y?WNi&JwBa6!nXTsji zUh+F8<@oaYU|aF<3O<1ki&E%%e!@|tEX$VLTrx6rYpNxiqtLJ;JEs)hobQ3k5?1Dn z6YX-Ty-h}o&pLLgy>o$|-YPPz6G>Y^hUs7CX!4?GZsdG-7;=XQ1!^Q1nI1@$4i@`E z_4*`ZN7cz$Girz%A9n?aZjJJ zn!`aEGI4*gv6ywbd|zudom)ElUv#Pn$IpB_jR>}WBw;E({F#=NmPPhyz9++vmQVd_ zO<<@4MAPjHFZs$w2i2d=ziQPVfw_=Ne0MmbiFw`sEAA;Dn(U)Rk(QQ_7!uMOlF~?b zcejKzNQWYw(nv~7x)B&DT>{dKj?vu>ck=3c-}@Kb^JO2loqB$8>N!W7*XONvpXyW; zzh$>p?M6hI13O+?@0pkI%YIHmA@?k5u6zIGnzLy(h)6VAWZXsk3(MRrW)J7y%R{}h zHBxSVE(!}tVdIj5^Cf@oFMQhLFVA{t_5|F?UwA%UBtu_P-B0w|4PEXAz5kL%6C>(J z!FbW+-?d_+gSjnGupRaOXra=vWxruUT5~YGh40sp4-V2J1RVZ}szqTtHo5ioj!6sx z$f9t39rwrqA!7%2AqE-bKv}NIcIoDoxdFC5$Wp3*osI=!qc%i!u5GQn7SUoc-Dox( zWy^*+dN}YhCx(<9Y?ur4&)~%6IFBS>{8i0`b8IR%)%P=a!7v*NK-tn|ATggN@TXhi8TlzyW5)1 zv!VbeD~=@ngY{{lKu&T*S2?h$Sz(?fWSeio!Cif^&K;4)Y25K@Hu1u5bOL1(mpC9u zq8X+A!A~@}PZ|qO>^Yh0BqJA`?I1FgzDweAbmNx6OR8_~_!d~@-$(X>74H0Te81$8 z{Ib)mEEulmrJXYDRV~63r*}Z#fgPpHv?D?-3GTr~&UJBC>Ty(la&%!rSMy9Dg8JPl zguD3q6_E~L{CMXg)LzeVQ8Dun-D1ZWvT0>rin$V)+u^$0iJ26XS2sJ;YMv~!b+gFN z(UnN~Di9}ja_w-57r}-Xz7%i402`8F>UA=iC++U{0?IVMR$JZa7c?`!u8VX*)Ob@| zi*td9{moR@HLh$8^)k=*iZ_McA)Nzt@84qzXc)k_uTf_Jv`KC(G+3m@2>+>30 z==~)w20&oN*$uWVA*y=VN!zPkaJP;Ra`~vXlkYBK_O%!z`y&@AvO=aZIj$jKm7T}* zykbSVQrL#!NhI-fTPW`eXHj2Gq#X{ZD((qEa3LkI6}K&c5h%FMAUW8KG8yW1k-zX#%3`G> zUSF&q7b-ay$Nd*(Hy!4F5B&SuDY*dnxBn#M|jK3Q2+iUC6i{ELG)(QK}_SchIW* z`L+27w_aRdSEb+M7M$|l4y=Gm8^K{wr08{J2lWpt7D-VQ9S_BQ{@vdK!X4st48lcr zEUjy%kAB5WdlXE?1lM%9YMluPZdpL0>>Jr=K;MO@93ZIp&M|fL4zMNWc#W9Ql_foR zOY~>F))06LDK7ZdxukKn9~*L+j-GQ4yEXX&M@R{~Hyvi_tF*G$t|B?20or40vKH`_WhKd2LtB!q=XYT1a!4#$EKgnjeo z$J<5g5OQ6Ki#i!XBANClcf>7dRtrs!@Zx^EFGffQlbho|!AxEI+5t?%sYymjWz6gX1(6{dmyc+rRW_u517@1DTnm-@CzpiE7~Us%9f061Dc zqRER#eO^Q5q$GaQb8M;Aw6K%u25Pa98)B!B9a5Mm>QNgaB1 zTgliV4PRV}xQ)Hp=26Z%WRRSKYMBT2IaTRMPm~2$urO6Csf2=OT`zrGSmd>Is-MCa znlMCAVF$~Iz9x4gYvI}p?k&0am#OO+G}pz^&lmq0HTojIt8O8O<5b=`b6b5i#y|46XM=Hyv58^)>nyMlOTtIwk7hq+Yl z`9GGL@Wl;$}q0(G)4;GSuiR zJLhf9OZAU_lZG2lA%c5szLfBQ3)2$I)YoT%Cjxa2c6JI#(Qfv_ONf6gIMa93aT__6 zQ`!U|YZ2rI860s#|53Bdg1{)Xj;LR2m<>5A`24f6v+V3@XjxetjW6qn>%21_6)@@n ztHCLCW9|&XohTGkR74a>i%ZwpJc`MAuru;X2<9hr$sj-EZ4>L{O%lv;`|%xY<%JA+|gil>R8F{=wLfD%9Y^we7GpwewuA4Eeg$ ziBJ-xMQxR-CIZBg`<(`}Dg>gBC)Y)0Uu?wz(F1>k6NuS;a2c`ibO>dkS!?T&6vnEB zNhfvDxz~MSOWqOHo>C%lP(@{z`+frm-EKc`5mJGHyU*1P1QZ@-s z+oI|}>Spjxqw8k^>sN;Y_M0!f>InX_M*pqNHIzrOI|kOU;p~{JfMw0CVcVsc*^d+3 zxEyX%v~L6-dM4U0-lkG`&M8Fa=9N1WS{~DnR+_lQLBwNi60EqtRM);zII`Se65aR0 zj_zH^_gI;jcIsX+6Fl*6?(uhNG_$WPDf5Dv$X+Nk^J@n$KAM;bP@pTW6@?*)qEj#? z>hr?`rs~fG448HsF)!$^NPo#NWxknu*cGja97g_cjKV_iKa>+%dFzl`Fv1aVv2E zwof-l>+UIh+phN<5s<#Q`L*ydjMUG+vhw$~eS%%i`0>MF-bXvkJq(oR8$0xRWSH0e zy9{3fqD!v2$Jg*R@9J+aYdKD9lV=;mE_zlYEo~i2`IQpIvWTzn#6OA1)6bHpw6r%b z?gY9;Y(p|!T1}ILT(9Hi)AI2HrGx|XXp8e=xL1!8_>LOMt(;VoqD1pgvNiB%fck!9 zA#v%E5eiey>R#UjE-U0gHnXo`=Wa&nO^T^&4PpEGAm5#kBM?Ps)SiZ-Mce`PG z@dIt3$E2$*0!A1&Za4_#xa&to>WvO}EpFyrGhD;z%CzTC*XLO<3890q#)ZrF36@BCvJ1>>XIWs<_f>-~C5cJ}pf-s`fw_6Xb*^Fkf|6q5h~y;3 zjA!XW)cTdP+00sZuJ-mMXJ$}E^ZV5s@Nvub!I`74VzlpF=pY^Scsb$ysY6Vfnk1J^ zs!0nW+2GLeV@cmq)4uzx8@+Dx$CC~jcgIW6Ovtg*jR*pQ?w5@_Zk8J790WEjA}P?F zRYSOcl@)gLL%xCIQE)e7%;p~MTi~ipNpm6dPAp!vbf^wURGkq`mO8EqabEz-0^+y11I@GW4ZicFtE?0u%J!FUJj`K&bRy#pCJS=u>xNAtioHzR6M zf}zdv3Q)_enQCU2m8%h+>N5@qAxHQCRCMvPY$y>%9j?it{g5XANuQF@h^!cmEP#yc z_agbQ$V&SZ(!@5GuEClury&zqhx;Vj8Y!_b#MtMJ_~mn5$G~JgGKMsY74bc1txhb+ zq*zLEJY%RFgS45Bbe}RhS)kHq-?scqN`pah=nrd!*mhGQez~Ww3*y5mGkyP3 zB;wx*bc0GA#>a8bpdvp}ukqX@XF)Qf$Q5Gk7NF<*_z-cd_qw4f!|jli4;4rGpG^zv z`9`o+m%@w;>0BErf!KF*1xeg0lx-@|LJ_2w*BHap_K><9W7g)?%mIp_z|YTF;xAwn z!H50-P={Bp07z3>zW5IKnYv1vi=-Vgrjb@N5=q_GVJ@Q;UAIMY&PuKA$ZmRPFjjWH zi3!-Ui*7?~OF%F6fXPnl90jbDShnq%Jg?0m(3Eg-fMo}>gX3~~-dI~JL|s|bDH5Z7 z1nmfh86y87SFHHCeZ_rk6n552233-Leneq13@0=wz(W@*CB(Xk?`BW!?f zlI_hp2G}x1RjKfUf$BJEzlo%sGZSWGx7)(db}AqMn#i-*wk=x{@rhv&Uz;cq{M(+ zh7ZRpNOvSJKQe?Hd2NS2T6t+FU&Df7=;gpdOz&k<)TJX~E=v;(>Mx;$&(bII(rz(7 zURJ@iQ<3$wtqESO;U=fQJY^d}^a_C_KDN5~d?9`?LnGMLw}i}AqKiD{H1$CCKTpKXbY@biW);1J3k6v3KVL7 zrmGt1N^DhN^fPA`BaIo_RNF&x|)AC>NTV``lUy~iD^t6RWTUw3um59 z>cVpBi!U#)Km`BNQC%~3_nv&^uP}D@NDp3;8mmClgxowZdq;1xT;k*ke6qklfWy!A z(ofLwGSAHE_Ep?25{jhiCY0YoQcg|B(QB%!oG45oM$hH*?F>hBaCLw83BCT8?o^Hy z#ml$cuOOP(Q{rHui||?lFdpe^l z?U~f9Lf6$}Q?72C_sTVrJT9b(1g{($cmF6Aq1Cki;LF*JT@-{rvHhm5xL##oVAwDL zeCb}wtk#K5>E_XB)e-%5FC3sODkhaN>C9;&d0DXa=nO0RQrY!_$CHbceHL#;nrrlO{mMJfcd8a>Q;d^8C0&c7N=zZ%wf7h89 z*1wVrw$M~9OdL73Fc%c0?!V_~+hgfFwdriDC~RY%ec`2c%ix%qg+s`Ow|BRGw!P}f z2YxR#M=t$%WNbiKeu*<}ZP!8lBhCBZfOq**hqkc2zY?MXbV+E>g{`hRs?EhKs0UtG zFb-2E;980#j##eq&26(hPhZ51#6kpz`y$aC`jg2bZ1#A}DMwbhoUoyrTUxveRSFB1 zI)0xkEt|?zsfHK7HdF{TAHO`Br)xQx$^ZF~euWdm;jaPt{klp}WF7T_YSK8mI#8(; z29`Wk(2$8V1~r@XGmOl0Q=tjZ5tR@`W&XgGiANo%YJDA@o#(Z;skfZ$)?-=Cz;P*5 zdIlz}RIyQQK^5W5lPo>zSx+?c+1F-)-s3hx{|Hsi`f-s}M9_BL13%7-S>8xT?)rAt zTPZ|V2YFR%)w&?(lHcrhZ1`k)j@g#CMTm~TOhZxLCI6eyDuv+6U5pyHqc98#>W8|( z(0M}e8K{A(skBt!dVBED=5WsE{FB-PiGRxE5q@+b`FDpHJGB6J4{@edcD7|DrW?yL z@?DgwRCTh?H0NHHQPi~9XIx+qP}3IrV!G)~=1Xxw8mM;qXQl8Hj|xU~I%XZy8u*rD zi$Z0$vzR)}@3*97iP6+;%jsaj~F4RX#g=F2w#2W z8M)Q|b?Gs-54t_;A2}X~M89Kz9c$U(32Z&5CrKycJj|h$uo>kCjDX064TFD$U?@&jTyfIWzcsRH{ijs zg;V)K3pcxxF9IM}D}vR5RxDMz@mBThn2#lr<7TW=6tjil4wdvUG&FCQxVe_ZH)mN4 z$Zf_+8yz;K99(kZ>UeQ?2p(MD|7yFmM5;%g;Pb3qGX<0oT&V_7JdWUJ+?8mA{E?-c z2ks(C*s-?UDbu<|{wz7~cj~3<)ME`WC%EKe%&a1Zx?PQ*jVC>Yssq8P1eJk9a}eGf zNvk!fntlNLA$@G(QIz}Y;9?^==JnAHS>Q}g;wW`m>8+QNsP>>oE5FEJgTN>be)|2K z{n>JfOCVr&`k~s6(b9oUoPx%CY^bbcsHZEp7+bwWyxq>9c2Q*@n>z)AnMp@5WjqFL zs~^+J+k5kFH;H?V9fq7JVpQl$nIF}Ar2pa>l(tCq5#;OZ!fX_us>DFyXE5lRt#>r&6^DRj@cTGPW zo5)Om7I|Eh%)U7_&>@x|_=B})Q<+G3WQW{Q*V&a>#%ru#>ag)8-1qzk%6mU7I>uhm z8#*J#dA$gz`CLRtJAf3p2K%ON^|6Q&6n6v}^&7q0DGJ`msDH%^4*L=6?eNq>l9A(N z^y)lsjxRp>g+6r6`$(0mG-IO!TSvR3^AwGeKmWdeaPQNkzFSScJHM|&x z%ObE(`{z?>Ia2`E0)0)joUI|4kgi)_UV%*yOX4RnRC>W6>4vr zzm6wZ7M$fzuvs0qMCu7wYg&?Gz- z#hP@5?8TbC?H<62rpiO1%Sc{!PpKZG7;(txuY;ddouw`9-e13X@>y=lPrarq^ty<-0!*R zLSlZ%7=Xyc=)$j`WjI;wgJ|J>8pr^Cx4*1jbFZa4l|b1HC4qjDTPIRF_l|wpD=_sT z@2Cd+vWJ33IC>jjc)0@Z>jTV`p%qSe?O#3#+h0j9$i+To8uzb1Qyx@)4dREU) zOwEt`NZlEA%?jHYl(C8RJP=D-O{+3uv-TqNAHzzCUKyu0BJ&T~3^?8?sy7E(qNOXO z`$kUKvfFDU!c`5Q7%v6-%*`vyqQan*^;J@#m9La~LYjJe$;nFXuF-*Vyux>X86b}A zk*!L8Y^Gxi_DrQILxDFB3uW%C5Lf?e%ukuXS)^!G{*3OBBN-E-t7$CrlR#o`r~FstfT zePlMA@mjrBtVY}+r)>^+x4VZp#FGD9q#hIx5ug;j@4>h0VF5hB)Fj{vk*Sp|@iMp4 z;~D{Y?y*-k99sWT?T-mW|8CwTlDmy`xjp4Cg)CJ?!SQv?r`0O5%LqJFyGWug?MdHu z6_ckGMUAAxf~tRJy1$zl+^3(vz2UtS*~7wFF1#`kVg6>8ox2h)x2Hv8@%#A@9GU!Oa}r<(8uXx4z;z>!Xpo0I<1iIzUZeBFp$0wiCwAzTway>qczp zhWG$13oCLD?cARupHA?l>e2?Pj8wBwb=OJhPhKo~ag2WiL(nBg1#Dvv2pNx(-=0c4 zRb=_bzqJZ!Byj2!*K9bKaq335$x&K66VnbG!mErgjL1@d3xQ6E+)7K<4_(iL`3@QX z4{tdK^kbE3V`*e!x6R0y;@ZBt*EIs7vj&}sT;tAxPj}v(BFT78T=kM0Qb;&l42^ti z|E_0imLKw^AlC`#?3Hgc+L`({Vxmh5XD!4HDq9-!+$-;{sjfczOb zBzOQu$`ndou&Bfn{aqwn7w`?AC=H?+7YSHhJjtKkPmaQmy8k04!qmt=Pw@D9j{G!@ zT+H0|nZnTUEQMDvJTbKjz^6MKrplCrhlN(f%DSRu`1I5)q$L~)c$YC!bTo`jH8gV@0h#C|6t?@~0R&#@%7k~_PZp9-5>f3}#x)XI2E z3ie_RO26^?$vxy6R3eAK1Q6!iYB?N#^35NvecR$vC z7jj+?sn1=a|00Xt_U%@Bb3a-rXIDfaM%f{uI*0ACWT9XZJ%*zwSDXWuY--~8e(ae_ zqxm274~I|C4bgf1yPn|6Uszx2-P&9P27XmIJ=frI*8X;`qrSR~>ncl5eWvwZf7EyU zD&O2TIx3qQu9$N>$(s-RsSp%1VB-g7lr@a2*?YHlsaP?8Xi63H>c&xVc_ zG#ODTI;hF*7{>%=Ty34Xs+ea|xb1F`9M8naXgpVd+~wqEaWx(dFkRPasdo3Og43fX zG5>Jp6hI}poP3arGI)MrmE@u$_`frS)1{uyTx}>wCtKCNOsn%5# zg`=?EMWC|VcJ^jVbDYMWQi(l5b$$O${`Co>;(QS$A9k-hIVORzMxWitD+4*5@2hg! zUX%v#nJo`6MFQW<)Mg{i@+m83BlGbMIjyye?Gk2}zgTMSE}~dZ75e+m6c#_3;__1^ z^?lk;I!b zyy|KON|jX-Tz$sr4E_K<45;0-5FH!@(|MJG3 zR#JpgDx@emoEpuXKN7 z=UNBCB~aIiy;C#xnan$!|M#%@8cC@|T748E2hHq}HlA$esh8DE*I?v1iJG7g@VaSo zmV`o}%?e}ni9{mOSMyE<*CtOJcY3b}uiM%!yp{KAnNuxJPo*&_Ks36Tk5TcjB^^kz zol))owZ||Q;rjF)n7uMVzXThEE|X*>y`q=c^sVzk(*<6m^B>KY zbN=2`dbWa>Is2?F=N#Hiy3?=CoqTC}BOG7sRZ|5A z%V+Q6e69^n^d)_X?f)8OHb8hHT|(i_0XNk(*6j&{p$EFe-;MD@=hJ7xS0Un7P1YW> z1fO(05C4W35PqZ}wjw?i>BR6NTi=Ep6LbC10>btq`1>HZv?=RdG`Wb|wOT>H8y-Kv z58g-qD3$@?pA%O+lM-3~hOrPP5OMh5P=f;UiggZ*vY+z`e*AmIA`p}Q{)*8ZRv<$f zrH)!4H#er3ew2Xm>OX(Befr4KzxOovJIc6O@4Ffrb=}2(!&c>X@Cs29<@;E!)O zkFpr;ASsYf1zT4R@XAQz#=kgCZ+6jRX>1Mh+C*Sjb@8Ig&^pKjI_84czggiX=GS%ub+Ua3La1#q_v$Ph?(lY8;nPxkQ)S{ zDp`q%efVH$?_%$4Y41QTBPK@f;AC%ZWorgO9t&Bj7HX<{uLW*aE=A?S1HQ`HtGq%c zR}qa0z>TM2pg_Tr4X4PRf2G`wEg=C<^y^zVTx@JW^ebgX^hne>q)m#v*r5FI$f5f+ z?|hq?wwvvdr-oU2zHxxCkn28D zI6qRsK(~JU{BJ3{kUAh3k4ZFSs7oQEi04^l#6)Rc< z2}{BRWTn!mLf_yaqhV8%4d??CWJK$~JqZP5-KKfNK)PQkUcr2ehsa-=g^NR$d{FtA zMx+F!#R}n?%k}a=b4(DcjHbCXRNVx1jbfqILdfV4t8#bTVAY93F zP5!gDl~_9rpi*hI{LOE8BtGjRGdUt@YBH13jmqG?#pN=FHBJ|1?(s|`VE@dC`S;>C z1bvHt1x9=E=rM{>IXcP}+lXPvwBL#NOle}W@w7Eo<{%6~Yc77{PmC;egaLer0d`M$ z)W`6a258@0Z=%d=F@+nTZ+i=x7Y_f`Mk4o1^ZfkQ=H{Giuc)r^kf!gGMUP>Z=A-RD zKmLcCtG^xVZ$7i@f0ly3{oC{VQofLQECD6hWNAB2>Y)kk`GI7TvRB5WS&IR8Lm9_0 zRy;lWg1wM3LNtNCk9y+y0TkX52 z=#b$8EQ8j@+@DW`9;LofLjmS8362nCApV9~ZKzIY02zYBzkOz?79qOq#%Jt8B<@C7 z>PCAo;tCdh)7vA8C5rknfY`~1zC2KrE_9@tgu#eqN|=PROW86s(E)?GNBswefCJ{8 zF>-b{UE60Ac#&VoFO4Y{!eLAzwWwl|@zO$WDY~WMaiZRk4~F9^Q_97^lV($iR3lfH zCOH>yg5?R*lWd9S`vtKFK7_VOv3>nqt1K{u-XPXo!c7<~nTPi0qYGPl-0N={f1K(G z1){lfcm9-FVlKo9iVd)K?cyVG^xCpA_x}{FdC!QFXgXX&S&m-TPgt!{4%ZrSWja>l z4v+I$q6>u!-d&X3m{desOI}NHPP&Ag_zfra0tz<@T(EKvEoEYfTs=(-_P<_y6Lz*R zEonxo8JxJ6ELh&*V!hmNa3aLmX`8>m%G4C7P2fyOPJB|K+G8xu;FKn$N*rAHXj6;C z^OceO?XQr{tj(XB9GgU&6z96ASti1c1-Gi}bSgvEvIJXLTbx^nW~uBV>iOv^%O$yL z*ze+WL@RO|RjQQ3N?vlhrt^#hy_S(HtjJ56B(%h{ys@gKJ`%nKfjfRxs(cZ_WE8=G8Y?&3LF!H#W}3aa7DFS0&#U+$ z)Fjy?nj|6y7PZpvMc-Gxqp4r0539wM8mRhKN~&|HZj_=-C6}px&-!qnN~CI0%2yKh z-J--^O{l<6`!NDh`=|U*C9wkKZ#9M+ZT;kErUZ2!j1)F6%0gW~zw4!`8JYKSV`xo% zBx#Kj_+FaJBgP@ip;@PL@zq=iX(QF~Hq%8BWrwaf<-#v=1^0x0ot~(OQ@)waOwZh843Pm@T0L4Ri?~sQtR2;P)#YN;;@1iSyjPXX z-)#zsa$CjSJ3kd4r)GB;1Z2zG7q57>@7xjlvOKCi+T9gjNug^Y)}g;aTtpwm=kI&x zXwOf=GO&22ET;ccSgg=E$v9;#IKFwDKYv;>MiMjHs$Xy8&4yjSU4K3eA`JzNoWj1s zak`2^a}j+JpFE%Zz{u~Bypfr-cNqd~v+O$=I~lVXt4&5a9y*MTC5=DKWNJ5cinNa# z+dhTp@Msrmsq5(1NmgW4P|vhhv=(C*H!CJ8mSxXa{H#7}9BeFYBBs22@#QdmuT_?6#-x-5o<*~B&_#Gugk0b-bBZ8y22ua=ul7w@mn%p8HLr=Qtc<#h zo}-e*s$;HWtK+bxoZp-|^x4`R&VPRX68o#XH7%!jOdihXv#tQK+nqAkj< zs1-)Y2fy8!KS;*g#!)~0&}l=$LNr5#VjaS@2*=q{-nox2i8-%|--#!SuVh%TDe+V> z$-ZL{{LXC6zrfwX*&@`>Y_9!#S}RLS##WA)hnb<0>yvHA>ci1R*m~AF+J-k?D$6f@ z2hZHmp39Kp*QLxjjJ(Oh^5Kf_zn+R=g<5qJpZRwXb`4{rb8NAuA)7{AJ*adjo*@6<{zc`A1r%*_2 zwAi=UHg_8?Hw&qK>iZPc#6p^cG-y-zr5r(<3AItQXje^#Zk7S5*1}BFymKUCh$p!$ z`|Zfl@4BJIFWi|YInPHpJveI#jfJ6dnoJ~G+wJAnJhl9eo{Oj(uMpmbY9N;L|A=g4 zu$xvYJJL+4^lPW_Qn2}K&^;8`-2h{AfToVR72k7MQ&=6l;KOxd~^$=_49Q!qZgm|v)Wv8qvj zbagGU$dWQbx7ZrgDAt_c$^WCxtaxyAgilDVKbn8q@xy1~H#Ru2x?!`#I4* zjt;lZyVD+5v?;Y2UJ4(H%!@6DO$+HhEzO-Q`CE6nf4dl8lDa_*2^xEfzly^YLx@X@ z8xDODdXW8IkcVeo$mwzKp;&C};}}gg-c#Pwa3$Vr7Qfr+gW1vX)bZSu^OVF+JDS}Ee$tLX4-PhiOO5-ZZucd3l9T*ZOr=d9a(}vK%YQXjs(*^_6A2O%pW)$B zFCI)em==NFBsY~-QGg&XY6uDlf}nrT;BgOvTv;J#-w1+uQy~b?KEbe05`tLbWyD3) zJQfc1-96MKW`&#=8xKF#?iGANqz}gW?t(0hq7wWkB!E&v9GxzbE)bO~9Tt{L+*6|T zE>aj-!mEU0>QdHg(boQE<=+#&mYAx6;Rm7BM}hmpIzD%|<0WrD=j}`mi(|@YwjY0c zo^j}AnH;($yzulK;#Uyxp0tggGAE5%;fQ`qQy`6_;tNxXp>MR@Gd~1LkD>V(r)@Zq z`nUgyS7n^B4jJO*Vpn?{ANHAl^%yxDkfcJIUEd`1lC-Ze+)R|pY86Uh)w^{LAT_x} z)U~~?)2t98tIKKW#Zx!R!j7WMqqk+RBhm5p;WB()S=75%v`s1LpDm7{p)%3xf@Nha zy#7dK^5c5BupKAukF@YFYJ9w>AxquBeR|9 z;88DOlv3gOgFNm8p<~2fUvb)J1(38AT%cE8p!W{xi#n~Xt#?MQq;gwK37i#LJz7QA zY^Wg2RuF9!B4WcqMpzAq|8~Wj=9R3A6`b`tLchv(;bY}3Esw1F**sad4j^Tu{rzCe z1(8Et8gFOWK08gKy7tX!na*>sUiJxhoQBIuGxO{HiNa%fqPqUw@V!69pQ}P?K!bEp zTU^y7E8cE8^W5P*yA#&1QN9F^dxEWx(orUls4|81R zlGq8--JhI^ZpuG&h)pF^Ne1GVmb`V4=kx11)0+y~W8!u3ao7X2)U$kfGp6HaR^)q6Gb#(I9ew=%q}xCu3L6i{eJ zaKBOK2g<2_hpfD2<|As9_yzh&i6{h_LI*NKg67u6*oTQ!6Xni}P)pA0wTiw_jy##L zH>eOiGR665Gm5%qwBd{77Y2i_sfP(^X#NJ5h&D_y9RAg0EaIe2Z*sB4C}Kr$5M?aM z$*@=}9?d4#kM;(Lva>O82JKm&X8y&OOtVuMXD@b$eVTLgddD>t*k#&{+VH`MoC4+`5&`u$*jaqPvk;0C}Lu~tLqMyTS! z641(Lgh=bxL38HJgUzRwGAFF_le45R4hS`_tLog^U%@NmivNyE#j7EQ?bm|uO6BIu zGu++tyDc~h)!-`Ncqu*~d&qHei|v6uSkN>^h@T<a_Eo4U|I z%A<#bk+Gl_Gb-`Ezv;>(iq6{-!_<{?4uF+23XH0?z z^`66>#Q!A16CIBDh7u4ztZ*$3zR2sqc4Y5m3#idDWJqn{$V76RliAGvEy2Bt4N1Ul z!xRL(kMhG9=~uNamkVa*|2Sb2wXfvwgsvQJZY55^7=BYme?BKLA=Q?wP>Tsc_=L^l z*T4Di`+S(0^%^V-AD2XU$pg+C7C8KHt1Pi;r80l-jhkc`SpLP&k+%E+ecd#m%@wYv zFv3bOsu|DoR$gns6JAfqLwm;ddy5{3;PdGxO4zt08?Ff*d;r3dIMOPjPXG6|g4hSy zUiMDHV=kmq*uuYG0*f9V)$N(p}rjug!KjR+Hed=#}Z2YXM3=`=VKyq^-3@t)f z@K+aqbVHwxGd&6u>td&gm)~cZ8HSH)#sRJaenz)PKx*+wfun=Ytj$-3vzfJ9P7UKbY6>VUZeB_5^GDLhzV^hfMm{Zr?WgQ-BR{9?`;(m|mZa2}_w&K8 zVedKLum12?{UP0v=9?LfAo!pkFIf?Lp}xm`33BLn5FKpZ=W0@{*LE6@8K_l3{tGiw zcu%?M23>v?4>omWcIHS-x%O$?u-d^mB$V3-;>tLfX?e|(1bYXsx61ag&sOa{@_fat zRzF~wNQ4&3^ZfF7QU0%s+XM@yMtEFn6DA7T5*?aD{cDtJPCScP4fh8we#N?hi<5Kr z$}8+AMUw2}^QAsc&GSW*Nwydmd z!!tXNjx1-9YhH`-b(SI$WZj@clL#ZMu09=4C3SawbZ~U^*g9g+;lo2qYcW@COgtcv zm(9(^rJ<>b7Whr0?D65jGX052!d_g2zxJNt6%m#|sq^nYT1iz2+>6*D@KHhB^Yo!J zy?012qR>2B>g>-=ZO2|0B4&uu`=;tXSaN5GE`KZGLKOUjmPP?D7}qvHAwdL>eyY=j z5p5S>msyWg?DLbxvt3weOP$%HtC3bd6^rEm7d*V#TC?F~Cf(6gw*2z)Xkz_(%kkT@ zjYOcygsYC+?mK+%F~|hVr>)6OY4hlwq>8Jx7=7<9Bch|DV`Dp! z3qKsG=sk~{clu+9xV^6rSM6p#vR|F7`d{vjXK>kh;l5dHv|Ie!9rUxOCoeBgr@{Ia z4$ef2>%s5ezdPfLSVq1Jc2K=!E%8mN5$Ms0J;G8c#DgDan&V(7rx6rf z85^rI9T3975JjfPjqLC5U!697_wJos3iHVC-w$hHWSoQ}{^EBN6DsWnn9%*riT!d* zgLA@sr@s(=Rb?ej2nnAXzw@?y7zT-7lXmO|7^d6y@3hxUI{bP(3$~3G*`DU0@DLUj z*6EySoFlQOfq{XZ-r?TfKW<824KHjXMs;aMuY=O8l+mMR(ghl$hd{rDhlRsH-p3l) zvYBYMB7$@iI`Q1sC`{S}_g`qq7YrE=Y}g)yS&gKcM+`o~eZwb{#mS3D=hO~0VDTF@ zXMu&%VUs2K?PoJ43XeOLypqjej1K2&#`rJLA#@_Ha{uQiBur991_tZ#yuJdNL>l?j z(*bjX<_8gXE)6xca)Wjqh9m~u$md;L$^3EiIx9}Xc7slv*~%0{zqGG8{GPQ%MKqk8 z^(7_0j99<)AfUZ&yW20rbYfy0K3-~mX&Oy>o%{d_?F+`OQtHwd`RXODq8dX|LEHE5 z`xqC8Rh;(XFgq4s$I)LvxFK(xM$K!vZ7K(cDoQK3rVL6Q@a>|5jSCt3KH!^1h)%RQ z|H|J@`^|(xfdRq&K_0|Pi11_LTwjlBGSi((Xf>f@cON{7`XP3#8Z3qp9Pw-zbj z1re8gI_F-7eFsdy!omUo9%ilTzo4P$>FGh=5pdb!D|Z#pUTlwKup0L?JMTb$f2VPn z_DBDFxESMLX9sik1su`u;Wm+0iR)-EmV{3-mUup2Dh@0-8V(NU{%8WwuuVD@3I|_P zQtaodVW1W7llC+Y3tj?D$j{FYR{}=Z&+jRf&2*+*8{hzk)8?oM^eEY+$Xh^3}gBVm~S)< zu6~&<8aE_;+{Jq+A)nF|QdcL`^v&NG(X@J-u{Us(wjm@m-`MTK#L+3Wfbc#u0>dH? zj=({%>1F@=3D-iqw>#vq5yM@n-`Z%u+M$@mJI?vIonfDlU)6q12%!_d|Kg+H=_e4c zU};%WRmB38sC`#0R*cWj;I^mvuFQ~xvl=f?WiguBjqiUot+^Ryw@^>96@>T#N5XNw z*6eo$l0F-Hz8V9-lgP+OuBcE#Lc(iiJ?US;Y?T!i zNyA&qEv{4#q--YerTm|k-kZ#uMn_EMeV|L{w)Y$O)`!nWjG@wDx5yQJhA9L#V?KZW zyqSmW*^98~#)Ral=Dcg=bnadZe5wvK6bbe7*}QZAX%YWlmniOD+X zDWn&Km-}T^2~H8>u#os1H8r*K_HS&7v-X>n;jyu?kr4%X`Kg1es4bM4;T5HYXI zFIz5JYHIAD?$W)8UxTk4iKQ&p*47;Voo^k?RyEnoVn7;I1_}%>#iF7m&zsB3!KyC( z@#8%clS2OZ)YR0MGzxBR_os({(CPJ}eM)lj_SO~x5)xcMN(!Fyz3RdF`8h<+&%ac< z(RsTbwYj-Dm`E#h@tcFp_Y!;Wjl$&o{5+5uk9Su#Gv$Mz7BVu}5{{sDn~j*n?>`hz z78VpB2MSMeMl|w_aGiG(1X69V0$p)1Q?a$RRa#ow(b2)f!$anC+U+}%QQM}Y+yxoE zThMjKwBgGeK|;HEH$}LG+Su53=3y=|9Gu*igaoaO-VbnH#GHA%G^VJ)LYeg zUTptYxPP08;G=>K++9j@b3e1*)(ntdoS*Z0U)w4uj3@~`!b4(V7}WhqlSQ3Oq;64^ zZ#Bv-K?AzDT%xhG3EQ$pvq>nsYtC450w4!p*Ar-hP;>%VXtq+HDl}%q+-9}ou_pvA zN!CnU9G(CUIhRilRs`#Kw?E<~Etmbu!+**FAj9+1O=pJNVOdp2I-98^c(baisvVcE zwDhn44x{|Fwe`OBq(g4<@@!+EuC8tnzk@cMnFh`tU@X99aCkUGbdRkhP3Z4Vjz7)y zn1HmQ>i0srkM9<#77#D}iY}y1NGwY@oNy3LzYNV$-Pe(fOp*FAC}Y8h4R^%HO|5-P z!-}YX*{{Kv{_6Zm`|6+0q&li2l$x);wLleip;3>%KxZZ(0VKJ(%_v;sQm6m3cAdHJ zX*W_BCfW7nrM!Z|GSGS?u8~nugXjnKQ$ayN5t5}971V9$$jGM`tvrWj?AogFhs&+p zG&D5S)LVewB=h5ugZ}jFDZjS}4GatfJx5DRYd>FGSX31HVeL~>ZB0#lX1LirXpZb1 z_rp2I^Uc9;-@a8>vpS(B4!UqJW@eHXArmBS;@&JuY;JFFx1API(3p^gg@y6Sr4t?~ zVB_OUUkW&yLq=OeNdP8J+Ad<9d8r+BBgAotygB6BIyy)pz($!H-JXj!*4CLDlb+7U zdp?PSVc!%oxS(&-)+6Q@0@863OIl{ti?^@OU?Ny9^`6hhhg2#yXIdCVe|>U%XcHQ! z^2M@uD}h^vTR;@FmeSo$hR3gqE)LoAZg6@l$EQxejjyh}tTYhSVLSccjk3dJ#JcEA zR;^t;JPp?E?ye>DgX-{TQ%YYyEAe$qOw32o4`tK69+sAttb{R&h%fbfYRl(sv)RpL zU0tuhI?z>7Nk~hZ|4Kc2FC!k#=6BWy@T=|iux<>1lU}=*Yi~IA%^}zLW$;I^dJzH| zY-Yg|(IkAYDa1oFyN#;nZEso~c06vEsbQmQ>M)w&f(?TGU0q$>SAX;UDOMs&HUrh@ zxLrrv`HO;q(ZTm=(&aFo$a`$@`1n{c+6kxKZlS4FtZ;NJDJf~Qh$n2`uAoWxUnoPn zp>y2lv8&t5#FyGB3zJG^|Hh;y-7S>i)R<^aZl}4jzhSQrg zEwbphh(|N~1EeN5JdyHZC;U&X#!J`M)?$eQ1>|V(b==ZrbR!NHh&jXnK;tC*9$$Xz z^nUIj8Xq4AfC?ADz3Sr(w9}~7QTE2jp#FN0xtUp(pl|wDpMP5^Zmj~0jL{{uPXC0S zA2@hqkDp2I{6H&zR0F;aM`VAdBEy-qW8|Vb-S(69UiH@%-6nIr;UBpUtznPist%hT zYrVaxf2FFnWw5lj;#EFb{;JgJW*gF_=T_*a$nQ{VjLm-)FG4o+?&&t5d#FOU=`|jn zrnX@aDBR*R5Bfi&3b2}VP|&)m`-Lh%sBP*^pwrC z-xfd^fDT|g@Zc!`@i3=kjF?CD;b3F09USQD>k9zM85|sZ()pZyn)GLUY%Ff$eN-R2 z?OgSbA3w$f?->OJJIc##fh->!9PE5Jm-F)SQZ<|5MCvZJ0aF8fn)lu1-rSs)D6Xhi zP`42$A&@nL>hIP0)-n@yH)XRzU;h(El_A-ou%O!X{R@Z`2?Ia~;BDgf4n`vXUAiAR zk7;v!*nxaR!()C!OADrtlbKl&x3A7(3>ISJ3g32nPdu7)bF}FG>k9?o4!`q3+8qC< ze?vpEJqy%w$zNoQz!P8sbUXcgm6hWai~0PY_$8Dj^J_|#-S?+T-HsNh-@M7>b={vR zlp~BW2k?F4_K}C4wZ0855Punkc6_K@6~iBk260%zuU=*FR1WI$2~JWy-fc2 z+>u+eUI*Z#s^XlS(oVTL+1Ox=Y@5ZkN90_Ckhlhtt1(Re8CG(X_)kc%b!S?|S4t${L+1VKo z5melp7-6ZY+XHcAhBYP8FU}tN))MRhyEzyC8O=1ix|x}oO6k{BPIpAlvhVdec1A|uR7yG1nB$&fU(<+KB`B#HgRr$3wul0OuSU&4Q`KXiDHjtD2AY~7IV^4pe6w?ZRA ze8L4K&C)V<1L(@f^(Yp>r`rwp0j&&k0(A|IeHY%yJOG2>lKE4sc#{ZEJW?XxF?-mNilHbnTVO@(^hR|h0#w5(5FBP=h9$}@+q%)^pf z-X`IgiuA^IFs-t1;-eCd7P-u$GxM7e3;8_&Z<@vDo-A7k7K}e2G7yLffeo}$)#9fu zU#bG&gp-^dZ`_^i)jr{rO`omn-V1rVS5F_l_v19I{Cn(FpR3zh!s4cXeWmt5Uoe1l zE>uLX9cKPg3C~x0x$=hbEDc&!KRl_Z{c5^HS3O&Wz#LVY9O17ogXi-`Fx5k0TK^K zV)xE^CU!nPyU-%l&S`5i?M5peD+S8!Wy7B}c`{PmTJoDMD7&giTe7&_UifNLoHXvO%OO*Qn)oh@`nSHT z&}aqS_g}!$9f;8Cc0_si7ks0iVVL%WDlU|7-@fJIy2hy3?gb8PvEJ(C%a>v}(w~UR zBqVBTYCuw9tCO0YO-e+Rk(9K>2sQ;-1RpO|i(Q{U)^)rJh-9aB-Zoz{<_?&e=X>3| zOOT7F` z-Mpu(oRC7!lhf)KteEL_VPtKlSdpI_%-d7RU#$s3O$hF~;$e|k1Y6Kb*f-5*N!RcR z6dbqi$~2To%lEpY%%SS@1ve4Zw&@5%Lm!D=*ci*?6Un8P%tvtn4_30;cZO>({(^xF=nK2xx?agx4pltDNi(&cX{vz(0P3xr&`hugoY1 zktA^SqdAOP)d6q3m&dT%^1FpXTUvM%oDKE$+kuBH8kT>i`Z388je7ABAJx<$u?~+} zv;1MUd1puHX>bCLy6;8zhyW~=FPE>2JhLfGz{c)F&)o%qnLaOqP~K=3%c|Mdm5L++ z#Mqbh_Wmp)c}#;dyXm|IfAx(}Ty9R5e|OJ;wk&0Mo6i0QHRfH`F0BMi*Zy=_tLwq_ z)BQ>3^@0seVyWxF44`(wK^h=0f#c&J!^CF|V4ULfM}WYhqhnz?0fhMR<0jCJ%m!`v zuU=6j2a4uaFCGa!UM5akldu{EID3<(ok=M3JN$*Tf3#DHNR+DaZm_-y6sdJr%n|$# z11mH#va*&z0tNJXgm|sX-UP_NiMT&)Zf&`qtYmHcxVyUp#Rky|$OM5*1&%r&h%PoZ zHvA0$m*B;1ZTyCYtKf$qB+TTL6hIeER+HvKU+MYBGDfzyhErG!JCrG6-{0)u;^(?NzjN7W9h(dj5I{2W z728SUk(`N4(C0^6n-7Td{>vfDrhx<@<#n-ibK}Am`pL>a*7(iGaD`i}%7(y@s zm4FrTWBOa`YL6pdl0&IncIka4#@db5)gSW5GX=b7KmkDV3YgO8ux8-y=A_g8WTm&a z7sT=v+I2;hm7hS$CiHY`s--n2$I@Q!yfbRh?nO;Y>+S8G!{hv4h|K49s0FARq&(p3 z&X#LmoDZ{bb8-Ss4=OJJ3*a_}d*v47gGsVmK%@YG1|xkMjkXalGVZ ze2-FwC;B0Ni{E%Tm>g^1RGy6LyN`2y{(t*s5h$!1f8r{fXXfWPH^Z&cLiv$Z5EM24kAbY^yY=BTMR?K3@M+bR@B(efXZ^>*| zmSnt8b1RQvBMOflkR|H`{wT>9GhThUzb!?isYgClJ#VvYd{2z=SyZ~XsVJxY>`yCo zcx)o|>W6S_Hha9^Zr#1(waMAbULpJye;=;6Or2fp6E5mcyG@M@#EHaABa8pf0dZr@+z&Rhr~Ha(E9^ z&hyhFuq5;;!$P-zg8*3c_4U~;HdgF?6)mFT=H?Fm12&zet*-#FcY*~@o9#hKN4M+$ zs|YEeV_9t0PSC#QeI8{S;&mi4x{Husv(r5Hj^wr7pa*?u{floNHHV>Gv`vk-lKFJu z_ZZtR$cTTkVsfCnS8N-7T1G+GS))KhRvAEOZc=tw;ng+Gy>_Z7gOq-#?IQ$QG)^ZorF>H(TPH zvaqm-U;#6WkAu_08ci38Od*1m`LBf`$r`M!H+!165(&xCY}eP<{rGsexb;?(p^R8u z>PLWU0fv@WR$gCSjSLS@?zw!l4^!QGd2<(wwKG+!$_)}`%kjM3-CYb4-Y*p{L|nGv zv9UD1R2u^XOuk@`3MjfK5ELk8^YhTt4{9q;5QlGoc#;j|qnLuXT}G_`S=ndZSVl-Z z#G9J7&(jK*)F4u9$G&{Yb4xPG&qGvPA?V))iRMyL0wiQ6pGwmqXPI(b(xPH$Fr%eh ziizRmAHMvZZQI=@`>@KokL^35>c8g5{H;6U_6m(&QJWmn>7sSHX(=Dv?xV+hOxrV) zLJHmPQnKD}w5T3{d4ZiAE>g$<-u@*HPAr*_;_f?;$pXw$$l`4PldG<-&eDE~LlLZ4 zOvLZu@bTkEu!c&M^TCE3s2q3?fKf*!i?Qr>(B4*)MXq}jg@A&osY9^jiYGw|#H3yO zaraLyNa1;bxgbNIcV77)X1~Cb%1ep@rxd2g?S~sH9?kQ8C?L1gNJu@*ay5Tv z_zhzP$DC7Sy+x&lKD})T2jA4nC$6wRwauYsWU;lgI%So!*=3ySdgZ)MjXp{mM}vrR zA>jz=+wXN|8nvHo8ulo+j{@ISt%;gnDF^=;uP`tzS;c%s6@2K%7k>vBN25XqguW8E zo&edXsHgz>r{?73q@+m60xKw*y9>bK!-qe>+ks%^zxZU*1=#6~cQ!OhvY;Iah=_=Y ziTOb-%FD}_mh><&<3KNeS7UJEWM}`+j89oNwc7$jHdfUdfY)iW7QD-OO|aQw$ImygfHJ7eu@O zEH)nQMH-0JNea0?s@G{SSUl^qr74DLgvglg=|f$rId^& ze6Bmnjp%u$%$M5u>4;PQ+aj5Nn?ca@2kSp8e~#z9wwMUYOz4tDzh2b%;hTnTCoD2P zUhlUe>cWLsLe;1JTpjH@Zcmw_mHvkJ8$W#hor6whU|?X@Z`q8Ve!@)ShW?%udicpd zWE?2fpdUFLXJp)FKX0azxMy?=0DpEVq)xAk0Pl(mfdC6L0@Uauq|ai1T-`Zsjk z>i7;$x2)rjeF$O`>u2E6@zRu#S49{7N_XCr{XijWIe%J$rx*RqBBBup^5o~U=&)6f z-Mz2IHGCM`=6E)R#4*tPA-@6zYPZ01(&wVm1fmykWX0@dr!`IoXQ(!4?=tWyPYzks zSvy}PS2pajf4^Y2L3sY0eds1B|7B9*&996N_a|H=9H&N_u;F}L5hh}d^o)7t zDMeaF#;Rpx-T&()JIckvWEM?Z4W?;&Ue`7j1S6q(^HJdEheCBpdxsw~mdaSz!k;cA0$0l@zL%h$8suvk1zhlXO&}P z-=6V9R<^A?FXbZLlvv9y!bX&*3KjhtjsR7o&20XV_&oHQd8p--Y|UMMt#7h5^tPalQR+)eQ?QQ zCj92x#3U|*rDZwc?i7R8O9p{BBILVC*@FHEDZ2Kn& zv4t$=)9{Xz3i-O}M7kct`SJ468vL)j$Vw}D4K3cQls+~GVqERBwMkStG{h-5Am47& z#j~?_xvKY@-1!v@q|V)OtsK(ZaJ5XoW&YQEdMbknwJ#!daMlFP7;Pb7Lmncy@QmSF zZ>lolkl;fl|804FAKyLb=M`tYm{aN&T$G*Wz&9M9E=ZmxBFXz&RKTfjT4T#p&Qo#a z!B}Fi5>?5dXtH(GM&~iOJkkgoq>l;VN8N4{z@Ou=jzwV*j=POVVx`acrB&rM|9AG; z$BdPT`Hh9-X?)@~{KEqc7Bk4ypf@kT6B{j1T8lpN8~4Jwb6Jp1=sWy>v^|?_D-OAp zPqKv(qSB(zye;^__=J&{p)8mE%z`75k_g)~`g}TW@46K7-;s6Ws|L`e=LQtfr;Co_ zQJah#5=63P<2U_Ca@Pds+})b~I8j|b=A4(%)3A{pt4ws>EWHdD6<)Cdr#N<{?no## z1Yca2G|bmtwUoV}$sl*Sv{#_f5K(i|(~V&tT|TDX`hBeu^)nbNW)LoX(76#ZMW^g{ z>&6IJf8=H0aZlOQ^QceH?zQlFR~yy0a1xhPvRVGM(29_av+qxME?uZ3u^h~|Mv8qD zC9nJ12c<&uGIH6IliQX04Xf|t=5IM!+aKFK$304JEkkN>pqE6lUHoa%@QiZ^M50rv zyC1m~k8m>3{6mY}*DvZHT)mx`xD1BI@mF1J*bvd@Y`0d^vHW{~&gMwGg#CLT7>Qb^ zf9{>$(IEMb?!%egwG2yI7+zME#t*5Xp{y}i(E#XkQj^D^Z+{;@$MrYbTMUafP7|O`@?FFij{L_w|>Rx0k8J@Xi zRp!D0hr>3svgk27L}WySWeLO^Y;Fl)Qe&DLuMRl5%xfk0_i$3t{3S29Ke@zSF0fZE z{`%ByPGsM(x@2lr7ZpJQJDN^!fThkTTh+uewv%Ixja8bQcGBRv^czjzN5K2O_JEnJ z*?4LYU&EezzM6N4qn~*W27+rme~qgAlWJhp_9h|fjQPQATS2uzzx?4`SVYnfPJzmh zy2;Xf_GUPKgyPF9+Qa};^}{9P>yKtv&0hHrGtSDa0SZ_zgM3WX9%ko@ZJ20KMxX#O z+@2{v6u%|Slo^v~>^$B(_dPPM_tLM{6B5z<@h0E`g7BKM>HhJ*>(mc#(eC70eWk0W z!2bI;Y^;OniWN1Vva)Zv4ofjTy3wm%+CU$j7Hy$czoDKB#w#10SP87`*nNkVOB+;2 zxSr5nuYuM#n?0+sm+)S7V)k2|<)JTKuO;~;k+p*H;gP|Ae|=^*H?HTbYrOMF$}TK1 z9`S`M=pU;rr)>9XjPrD--ltNz zq&D(3j48Ss_7cy2yOw82$BGzbuHzLq&yEB(U9e^FNAw+f_25#0d;uS-W#6RCUg}qP zPeSo4C}jcmTD>N9S|4$Sm`n=QdjnoezKu? Date: Fri, 13 Jan 2017 13:25:56 +0100 Subject: [PATCH 080/407] Rename Transect to Volume --- src/ExportServiceProvider.php | 2 +- .../Annotations/AreaReportController.php | 4 +- .../Annotations/BasicReportController.php | 4 +- .../Annotations/CsvReportController.php | 4 +- .../Annotations/ExtendedReportController.php | 4 +- .../Annotations/FullReportController.php | 4 +- .../ImageLabels/BasicReportController.php | 8 +- .../ImageLabels/CsvReportController.php | 8 +- .../Annotations/AreaReportController.php | 28 ------- .../Annotations/BasicReportController.php | 28 ------- .../Annotations/CsvReportController.php | 28 ------- .../Annotations/ExtendedReportController.php | 28 ------- .../Annotations/FullReportController.php | 28 ------- .../ImageLabels/BasicReportController.php | 27 ------- .../ImageLabels/CsvReportController.php | 27 ------- ...ler.php => VolumeExportAreaController.php} | 60 +++++++-------- .../Annotations/AreaReportController.php | 28 +++++++ .../Annotations/BasicReportController.php | 28 +++++++ .../Annotations/CsvReportController.php | 28 +++++++ .../Annotations/ExtendedReportController.php | 28 +++++++ .../Annotations/FullReportController.php | 28 +++++++ .../ExportAreaController.php | 60 +++++++-------- .../ImageLabels/BasicReportController.php | 27 +++++++ .../ImageLabels/CsvReportController.php | 27 +++++++ .../VolumeReportController.php} | 10 +-- .../Views/TransectReportsController.php | 28 ------- .../Views/VolumeReportsController.php | 28 +++++++ src/Http/routes.php | 10 +-- .../Projects/Annotations/AreaReport.php | 6 +- .../Projects/Annotations/BasicReport.php | 6 +- .../Projects/Annotations/CsvReport.php | 6 +- .../Projects/Annotations/ExtendedReport.php | 6 +- .../Projects/Annotations/FullReport.php | 6 +- .../Reports/Projects/Annotations/Report.php | 2 +- .../Projects/ImageLabels/BasicReport.php | 6 +- .../Projects/ImageLabels/CsvReport.php | 6 +- src/Support/Reports/Projects/Report.php | 12 +-- .../Annotations/AreaReport.php | 6 +- .../Annotations/BasicReport.php | 4 +- .../Annotations/CsvReport.php | 6 +- .../Annotations/ExtendedReport.php | 6 +- .../Annotations/FullReport.php | 6 +- .../Annotations/Report.php | 16 ++-- .../ImageLabels/BasicReport.php | 10 +-- .../ImageLabels/CsvReport.php | 10 +-- .../Reports/{Transects => Volumes}/Report.php | 34 ++++----- src/{Transect.php => Volume.php} | 22 +++--- src/public/assets/scripts/annotations.js | 2 +- src/public/assets/scripts/main.js | 2 +- .../js/annotations/factories/ExportArea.js | 10 +-- .../js/annotations/services/exportArea.js | 6 +- .../ProjectReportRequestController.js | 2 +- ...er.js => VolumeReportRequestController.js} | 10 +-- .../{TransectReport.js => VolumeReport.js} | 16 ++-- src/resources/scripts/basic_report.py | 6 +- src/resources/scripts/extended_report.py | 2 +- .../views/annotationsScripts.blade.php | 2 +- .../views/annotationsSettings.blade.php | 6 +- .../manual/tutorials/reports-schema.blade.php | 14 ++-- src/resources/views/projectReports.blade.php | 8 +- .../views/transectsMenubar.blade.php | 3 - ...orts.blade.php => volumeReports.blade.php} | 20 ++--- src/resources/views/volumesMenubar.blade.php | 3 + .../Annotations/AreaReportControllerTest.php | 16 ++-- .../Annotations/BasicReportControllerTest.php | 16 ++-- .../Annotations/CsvReportControllerTest.php | 16 ++-- .../ExtendedReportControllerTest.php | 16 ++-- .../Annotations/FullReportControllerTest.php | 16 ++-- .../Api/Tolumes/ExportAreaControllerTest.php | 76 +++++++++++++++++++ .../ImageLabels/BasicReportControllerTest.php | 8 +- .../ImageLabels/CsvReportControllerTest.php | 8 +- .../Transects/ExportAreaControllerTest.php | 76 ------------------- ...st.php => VolumesReportControllerTest.php} | 10 +-- tests/Support/Reports/Projects/ReportTest.php | 12 +-- .../Annotations/AreaReportTest.php | 30 ++++---- .../Annotations/BasicReportTest.php | 18 ++--- .../Annotations/CsvReportTest.php | 20 ++--- .../Annotations/ExtendedReportTest.php | 20 ++--- .../Annotations/FullReportTest.php | 20 ++--- .../Annotations/ReportTest.php | 28 +++---- .../ImageLabels/BasicReportTest.php | 20 ++--- .../ImageLabels/CsvReportTest.php | 16 ++-- .../{Transects => Volumes}/ReportTest.php | 18 ++--- tests/TransectTest.php | 68 ----------------- tests/VolumeTest.php | 68 +++++++++++++++++ 85 files changed, 753 insertions(+), 753 deletions(-) delete mode 100644 src/Http/Controllers/Api/Transects/Annotations/AreaReportController.php delete mode 100644 src/Http/Controllers/Api/Transects/Annotations/BasicReportController.php delete mode 100644 src/Http/Controllers/Api/Transects/Annotations/CsvReportController.php delete mode 100644 src/Http/Controllers/Api/Transects/Annotations/ExtendedReportController.php delete mode 100644 src/Http/Controllers/Api/Transects/Annotations/FullReportController.php delete mode 100644 src/Http/Controllers/Api/Transects/ImageLabels/BasicReportController.php delete mode 100644 src/Http/Controllers/Api/Transects/ImageLabels/CsvReportController.php rename src/Http/Controllers/Api/{TransectExportAreaController.php => VolumeExportAreaController.php} (51%) create mode 100644 src/Http/Controllers/Api/Volumes/Annotations/AreaReportController.php create mode 100644 src/Http/Controllers/Api/Volumes/Annotations/BasicReportController.php create mode 100644 src/Http/Controllers/Api/Volumes/Annotations/CsvReportController.php create mode 100644 src/Http/Controllers/Api/Volumes/Annotations/ExtendedReportController.php create mode 100644 src/Http/Controllers/Api/Volumes/Annotations/FullReportController.php rename src/Http/Controllers/Api/{Transects => Volumes}/ExportAreaController.php (51%) create mode 100644 src/Http/Controllers/Api/Volumes/ImageLabels/BasicReportController.php create mode 100644 src/Http/Controllers/Api/Volumes/ImageLabels/CsvReportController.php rename src/Http/Controllers/Api/{Transects/TransectReportController.php => Volumes/VolumeReportController.php} (75%) delete mode 100644 src/Http/Controllers/Views/TransectReportsController.php create mode 100644 src/Http/Controllers/Views/VolumeReportsController.php rename src/Support/Reports/{Transects => Volumes}/Annotations/AreaReport.php (97%) rename src/Support/Reports/{Transects => Volumes}/Annotations/BasicReport.php (93%) rename src/Support/Reports/{Transects => Volumes}/Annotations/CsvReport.php (94%) rename src/Support/Reports/{Transects => Volumes}/Annotations/ExtendedReport.php (92%) rename src/Support/Reports/{Transects => Volumes}/Annotations/FullReport.php (93%) rename src/Support/Reports/{Transects => Volumes}/Annotations/Report.php (93%) rename src/Support/Reports/{Transects => Volumes}/ImageLabels/BasicReport.php (88%) rename src/Support/Reports/{Transects => Volumes}/ImageLabels/CsvReport.php (91%) rename src/Support/Reports/{Transects => Volumes}/Report.php (71%) rename src/{Transect.php => Volume.php} (75%) rename src/resources/assets/js/export/controllers/{TransectReportRequestController.js => VolumeReportRequestController.js} (77%) rename src/resources/assets/js/export/factories/{TransectReport.js => VolumeReport.js} (72%) delete mode 100644 src/resources/views/transectsMenubar.blade.php rename src/resources/views/{transectReports.blade.php => volumeReports.blade.php} (84%) create mode 100644 src/resources/views/volumesMenubar.blade.php rename tests/Http/Controllers/Api/{Transects => Tolumes}/Annotations/AreaReportControllerTest.php (61%) rename tests/Http/Controllers/Api/{Transects => Tolumes}/Annotations/BasicReportControllerTest.php (61%) rename tests/Http/Controllers/Api/{Transects => Tolumes}/Annotations/CsvReportControllerTest.php (61%) rename tests/Http/Controllers/Api/{Transects => Tolumes}/Annotations/ExtendedReportControllerTest.php (60%) rename tests/Http/Controllers/Api/{Transects => Tolumes}/Annotations/FullReportControllerTest.php (61%) create mode 100644 tests/Http/Controllers/Api/Tolumes/ExportAreaControllerTest.php rename tests/Http/Controllers/Api/{Transects => Tolumes}/ImageLabels/BasicReportControllerTest.php (55%) rename tests/Http/Controllers/Api/{Transects => Tolumes}/ImageLabels/CsvReportControllerTest.php (55%) delete mode 100644 tests/Http/Controllers/Api/Transects/ExportAreaControllerTest.php rename tests/Http/Controllers/Views/{ExportModuleHttpControllersViewsTransectsReportControllerTest.php => VolumesReportControllerTest.php} (56%) rename tests/Support/Reports/{Transects => Volumes}/Annotations/AreaReportTest.php (91%) rename tests/Support/Reports/{Transects => Volumes}/Annotations/BasicReportTest.php (86%) rename tests/Support/Reports/{Transects => Volumes}/Annotations/CsvReportTest.php (90%) rename tests/Support/Reports/{Transects => Volumes}/Annotations/ExtendedReportTest.php (87%) rename tests/Support/Reports/{Transects => Volumes}/Annotations/FullReportTest.php (88%) rename tests/Support/Reports/{Transects => Volumes}/Annotations/ReportTest.php (85%) rename tests/Support/Reports/{Transects => Volumes}/ImageLabels/BasicReportTest.php (87%) rename tests/Support/Reports/{Transects => Volumes}/ImageLabels/CsvReportTest.php (91%) rename tests/Support/Reports/{Transects => Volumes}/ReportTest.php (57%) delete mode 100644 tests/TransectTest.php create mode 100644 tests/VolumeTest.php diff --git a/src/ExportServiceProvider.php b/src/ExportServiceProvider.php index cf6e0205d..67120b8d6 100644 --- a/src/ExportServiceProvider.php +++ b/src/ExportServiceProvider.php @@ -39,7 +39,7 @@ public function boot(Modules $modules,Router $router) $modules->addMixin('export', 'annotationsSettings'); $modules->addMixin('export', 'annotationsScripts'); $modules->addMixin('export', 'manualTutorial'); - $modules->addMixin('export', 'transectsMenubar'); + $modules->addMixin('export', 'volumesMenubar'); } /** diff --git a/src/Http/Controllers/Api/Projects/Annotations/AreaReportController.php b/src/Http/Controllers/Api/Projects/Annotations/AreaReportController.php index 0ce6ec906..e13c5895f 100644 --- a/src/Http/Controllers/Api/Projects/Annotations/AreaReportController.php +++ b/src/Http/Controllers/Api/Projects/Annotations/AreaReportController.php @@ -18,8 +18,8 @@ class AreaReportController extends ProjectReportController * @api {post} projects/:id/reports/annotations/area Generate a new annotation area report * @apiGroup Projects * @apiName GenerateAreaProjectAnnotationReport - * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the individual transects of the project. - * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet for each transect. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the individual volumes of the project. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet for each volume. * @apiPermission projectMember * * @apiParam {Number} id The project ID. diff --git a/src/Http/Controllers/Api/Projects/Annotations/BasicReportController.php b/src/Http/Controllers/Api/Projects/Annotations/BasicReportController.php index 3bab8eef7..5422206c6 100644 --- a/src/Http/Controllers/Api/Projects/Annotations/BasicReportController.php +++ b/src/Http/Controllers/Api/Projects/Annotations/BasicReportController.php @@ -18,8 +18,8 @@ class BasicReportController extends ProjectReportController * @api {post} projects/:id/reports/annotations/basic Generate a new basic annotation report * @apiGroup Projects * @apiName GenerateBasicProjectAnnotationReport - * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the individual transects of the project. - * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different plots for each transect. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the individual volumes of the project. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different plots for each volume. * @apiPermission projectMember * * @apiParam {Number} id The project ID. diff --git a/src/Http/Controllers/Api/Projects/Annotations/CsvReportController.php b/src/Http/Controllers/Api/Projects/Annotations/CsvReportController.php index 36131ea1d..1d6d9f664 100644 --- a/src/Http/Controllers/Api/Projects/Annotations/CsvReportController.php +++ b/src/Http/Controllers/Api/Projects/Annotations/CsvReportController.php @@ -18,8 +18,8 @@ class CsvReportController extends ProjectReportController * @api {post} projects/:id/reports/annotations/csv Generate a new csv annotation report * @apiGroup Projects * @apiName GenerateCsvProjectAnnotationReport - * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the individual transects of the project. - * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different CSV files for each transect. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the individual volumes of the project. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different CSV files for each volume. * @apiPermission projectMember * * @apiParam {Number} id The project ID. diff --git a/src/Http/Controllers/Api/Projects/Annotations/ExtendedReportController.php b/src/Http/Controllers/Api/Projects/Annotations/ExtendedReportController.php index d45e51be2..d584afb4f 100644 --- a/src/Http/Controllers/Api/Projects/Annotations/ExtendedReportController.php +++ b/src/Http/Controllers/Api/Projects/Annotations/ExtendedReportController.php @@ -18,8 +18,8 @@ class ExtendedReportController extends ProjectReportController * @api {post} projects/:id/reports/annotations/extended Generate a new extended annotation report * @apiGroup Projects * @apiName GenerateExtendedProjectAnnotationReport - * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the individual transects of the project. - * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet for each transect. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the individual volumes of the project. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet for each volume. * @apiPermission projectMember * * @apiParam {Number} id The project ID. diff --git a/src/Http/Controllers/Api/Projects/Annotations/FullReportController.php b/src/Http/Controllers/Api/Projects/Annotations/FullReportController.php index 3f0a1577b..d96b516d9 100644 --- a/src/Http/Controllers/Api/Projects/Annotations/FullReportController.php +++ b/src/Http/Controllers/Api/Projects/Annotations/FullReportController.php @@ -18,8 +18,8 @@ class FullReportController extends ProjectReportController * @api {post} projects/:id/reports/annotations/full Generate a new full annotation report * @apiGroup Projects * @apiName GenerateFullProjectAnnotationReport - * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the individual transects of the project. - * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet for each transect. + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the individual volumes of the project. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet for each volume. * @apiPermission projectMember * * @apiParam {Number} id The project ID. diff --git a/src/Http/Controllers/Api/Projects/ImageLabels/BasicReportController.php b/src/Http/Controllers/Api/Projects/ImageLabels/BasicReportController.php index 2bcc9da60..4b2d90cfc 100644 --- a/src/Http/Controllers/Api/Projects/ImageLabels/BasicReportController.php +++ b/src/Http/Controllers/Api/Projects/ImageLabels/BasicReportController.php @@ -17,11 +17,11 @@ class BasicReportController extends ProjectReportController /** * @api {post} projects/:id/reports/image-labels/basic Generate a new basic image label report * @apiGroup Projects - * @apiName GenerateBasicTransectImageLabelReport - * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the transect. - * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate image labels of different label trees to different sheets of the spreadsheet for each transect. + * @apiName GenerateBasicVolumeImageLabelReport + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the volume. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate image labels of different label trees to different sheets of the spreadsheet for each volume. * @apiPermission projectMember * - * @apiParam {Number} id The transect ID. + * @apiParam {Number} id The volume ID. */ } diff --git a/src/Http/Controllers/Api/Projects/ImageLabels/CsvReportController.php b/src/Http/Controllers/Api/Projects/ImageLabels/CsvReportController.php index 44d0c3778..ddd859968 100644 --- a/src/Http/Controllers/Api/Projects/ImageLabels/CsvReportController.php +++ b/src/Http/Controllers/Api/Projects/ImageLabels/CsvReportController.php @@ -17,11 +17,11 @@ class CsvReportController extends ProjectReportController /** * @api {post} projects/:id/reports/image-labels/csv Generate a new csv image label report * @apiGroup Projects - * @apiName GenerateCsvTransectImageLabelReport - * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the transect. - * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate image labels of different label trees to different CSV files for each transect. + * @apiName GenerateCsvVolumeImageLabelReport + * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the volume. + * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate image labels of different label trees to different CSV files for each volume. * @apiPermission projectMember * - * @apiParam {Number} id The transect ID. + * @apiParam {Number} id The volume ID. */ } diff --git a/src/Http/Controllers/Api/Transects/Annotations/AreaReportController.php b/src/Http/Controllers/Api/Transects/Annotations/AreaReportController.php deleted file mode 100644 index 13c214beb..000000000 --- a/src/Http/Controllers/Api/Transects/Annotations/AreaReportController.php +++ /dev/null @@ -1,28 +0,0 @@ -authorize('access', $transect); + $volume = BaseVolume::findOrFail($id); + $this->authorize('access', $volume); - return Transect::convert($transect)->exportArea; + return Volume::convert($volume)->exportArea; } /** * Set the export area * - * @api {post} transects/:id/export-area Set the export area - * @apiGroup Transects - * @apiName StoreTransectsExportArea + * @api {post} volumes/:id/export-area Set the export area + * @apiGroup Volumes + * @apiName StoreVolumesExportArea * @apiPermission projectAdmin * * @apiParam (Required arguments) {Number[]} coordinates Coordinates of the export area formatted as `[x1, y1, x2, y2]` array of integers * * @param Request $request - * @param int $id Transect ID + * @param int $id Volume ID * @return \Illuminate\Http\Response */ public function store(Request $request, $id) { - $transect = BaseTransect::findOrFail($id); - $this->authorize('update', $transect); - $this->validate($request, Transect::$storeRules); + $volume = BaseVolume::findOrFail($id); + $this->authorize('update', $volume); + $this->validate($request, Volume::$storeRules); - $transect = Transect::convert($transect); + $volume = Volume::convert($volume); try { - $transect->exportArea = $request->input('coordinates'); - $transect->save(); + $volume->exportArea = $request->input('coordinates'); + $volume->save(); } catch (Exception $e) { return $this->buildFailedValidationResponse($request, [ 'coordinates' => $e->getMessage(), @@ -69,20 +69,20 @@ public function store(Request $request, $id) /** * Remove the export area * - * @api {delete} transects/:id/export-area Remove the export area - * @apiGroup Transects - * @apiName DestroyTransectsExportArea + * @api {delete} volumes/:id/export-area Remove the export area + * @apiGroup Volumes + * @apiName DestroyVolumesExportArea * @apiPermission projectAdmin * - * @param int $id Transect ID + * @param int $id Volume ID * @return \Illuminate\Http\Response */ public function destroy($id) { - $transect = BaseTransect::findOrFail($id); - $this->authorize('update', $transect); - $transect = Transect::convert($transect); - $transect->exportArea = null; - $transect->save(); + $volume = BaseVolume::findOrFail($id); + $this->authorize('update', $volume); + $volume = Volume::convert($volume); + $volume->exportArea = null; + $volume->save(); } } diff --git a/src/Http/Controllers/Api/Volumes/Annotations/AreaReportController.php b/src/Http/Controllers/Api/Volumes/Annotations/AreaReportController.php new file mode 100644 index 000000000..4817ae7ab --- /dev/null +++ b/src/Http/Controllers/Api/Volumes/Annotations/AreaReportController.php @@ -0,0 +1,28 @@ +authorize('access', $transect); + $volume = BaseVolume::findOrFail($id); + $this->authorize('access', $volume); - return Transect::convert($transect)->exportArea; + return Volume::convert($volume)->exportArea; } /** * Set the export area * - * @api {post} transects/:id/export-area Set the export area - * @apiGroup Transects - * @apiName StoreTransectsExportArea + * @api {post} volumes/:id/export-area Set the export area + * @apiGroup Volumes + * @apiName StoreVolumesExportArea * @apiPermission projectAdmin * * @apiParam (Required arguments) {Number[]} coordinates Coordinates of the export area formatted as `[x1, y1, x2, y2]` array of integers * * @param Request $request - * @param int $id Transect ID + * @param int $id Volume ID * @return \Illuminate\Http\Response */ public function store(Request $request, $id) { - $transect = BaseTransect::findOrFail($id); - $this->authorize('update', $transect); - $this->validate($request, Transect::$storeRules); + $volume = BaseVolume::findOrFail($id); + $this->authorize('update', $volume); + $this->validate($request, Volume::$storeRules); - $transect = Transect::convert($transect); + $volume = Volume::convert($volume); try { - $transect->exportArea = $request->input('coordinates'); - $transect->save(); + $volume->exportArea = $request->input('coordinates'); + $volume->save(); } catch (Exception $e) { return $this->buildFailedValidationResponse($request, [ 'coordinates' => $e->getMessage(), @@ -69,20 +69,20 @@ public function store(Request $request, $id) /** * Remove the export area * - * @api {delete} transects/:id/export-area Remove the export area - * @apiGroup Transects - * @apiName DestroyTransectsExportArea + * @api {delete} volumes/:id/export-area Remove the export area + * @apiGroup Volumes + * @apiName DestroyVolumesExportArea * @apiPermission projectAdmin * - * @param int $id Transect ID + * @param int $id Volume ID * @return \Illuminate\Http\Response */ public function destroy($id) { - $transect = BaseTransect::findOrFail($id); - $this->authorize('update', $transect); - $transect = Transect::convert($transect); - $transect->exportArea = null; - $transect->save(); + $volume = BaseVolume::findOrFail($id); + $this->authorize('update', $volume); + $volume = Volume::convert($volume); + $volume->exportArea = null; + $volume->save(); } } diff --git a/src/Http/Controllers/Api/Volumes/ImageLabels/BasicReportController.php b/src/Http/Controllers/Api/Volumes/ImageLabels/BasicReportController.php new file mode 100644 index 000000000..24d82770f --- /dev/null +++ b/src/Http/Controllers/Api/Volumes/ImageLabels/BasicReportController.php @@ -0,0 +1,27 @@ +validate($request, [ - 'annotationSession' => "nullable|exists:annotation_sessions,id,transect_id,{$this->model->id}" + 'annotationSession' => "nullable|exists:annotation_sessions,id,volume_id,{$this->model->id}" ]); return array_merge($options, [ @@ -35,6 +35,6 @@ public function getOptions(Request $request) */ protected function getModel($id) { - return Transect::findOrFail($id); + return Volume::findOrFail($id); } } diff --git a/src/Http/Controllers/Views/TransectReportsController.php b/src/Http/Controllers/Views/TransectReportsController.php deleted file mode 100644 index 14ab40515..000000000 --- a/src/Http/Controllers/Views/TransectReportsController.php +++ /dev/null @@ -1,28 +0,0 @@ -authorize('access', $transect); - $sessions = $transect->annotationSessions()->orderBy('starts_at', 'desc')->get(); - - return view('export::transectReports', [ - 'projects' => $transect->projects, - 'transect' => $transect, - 'annotationSessions' => $sessions, - ]); - } -} diff --git a/src/Http/Controllers/Views/VolumeReportsController.php b/src/Http/Controllers/Views/VolumeReportsController.php new file mode 100644 index 000000000..670f46d21 --- /dev/null +++ b/src/Http/Controllers/Views/VolumeReportsController.php @@ -0,0 +1,28 @@ +authorize('access', $volume); + $sessions = $volume->annotationSessions()->orderBy('starts_at', 'desc')->get(); + + return view('export::volumeReports', [ + 'projects' => $volume->projects, + 'volume' => $volume, + 'annotationSessions' => $sessions, + ]); + } +} diff --git a/src/Http/routes.php b/src/Http/routes.php index f524fb09d..d6a8d1ffe 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -7,8 +7,8 @@ ], function ($router) { $router->group([ - 'namespace' => 'Transects', - 'prefix' => 'transects', + 'namespace' => 'Volumes', + 'prefix' => 'volumes', ], function ($router) { $router->post('{id}/reports/annotations/basic', [ @@ -94,9 +94,9 @@ 'namespace' => 'Views', 'middleware' => 'auth', ], function ($router) { - $router->get('transects/{id}/reports', [ - 'uses' => 'TransectReportsController@show', - 'as' => 'transect-reports', + $router->get('volumes/{id}/reports', [ + 'uses' => 'VolumeReportsController@show', + 'as' => 'volume-reports', ]); $router->get('projects/{id}/reports', [ diff --git a/src/Support/Reports/Projects/Annotations/AreaReport.php b/src/Support/Reports/Projects/Annotations/AreaReport.php index 051183399..2c623fcf2 100644 --- a/src/Support/Reports/Projects/Annotations/AreaReport.php +++ b/src/Support/Reports/Projects/Annotations/AreaReport.php @@ -3,16 +3,16 @@ namespace Biigle\Modules\Export\Support\Reports\Projects\Annotations; -use Biigle\Modules\Export\Support\Reports\Transects\Annotations\AreaReport as TransectReport; +use Biigle\Modules\Export\Support\Reports\Volumes\Annotations\AreaReport as VolumeReport; class AreaReport extends Report { /** - * The class of the transect report to use for this project report. + * The class of the volume report to use for this project report. * * @var string */ - protected $transectReportClass = TransectReport::class; + protected $volumeReportClass = VolumeReport::class; /** * Name of the report for use in text. diff --git a/src/Support/Reports/Projects/Annotations/BasicReport.php b/src/Support/Reports/Projects/Annotations/BasicReport.php index 64f98f9f1..47ca0b0cf 100644 --- a/src/Support/Reports/Projects/Annotations/BasicReport.php +++ b/src/Support/Reports/Projects/Annotations/BasicReport.php @@ -3,16 +3,16 @@ namespace Biigle\Modules\Export\Support\Reports\Projects\Annotations; -use Biigle\Modules\Export\Support\Reports\Transects\Annotations\BasicReport as TransectReport; +use Biigle\Modules\Export\Support\Reports\Volumes\Annotations\BasicReport as VolumeReport; class BasicReport extends Report { /** - * The class of the transect report to use for this project report. + * The class of the volume report to use for this project report. * * @var string */ - protected $transectReportClass = TransectReport::class; + protected $volumeReportClass = VolumeReport::class; /** * Name of the report for use in text. diff --git a/src/Support/Reports/Projects/Annotations/CsvReport.php b/src/Support/Reports/Projects/Annotations/CsvReport.php index 125215097..fcd76a56d 100644 --- a/src/Support/Reports/Projects/Annotations/CsvReport.php +++ b/src/Support/Reports/Projects/Annotations/CsvReport.php @@ -3,16 +3,16 @@ namespace Biigle\Modules\Export\Support\Reports\Projects\Annotations; -use Biigle\Modules\Export\Support\Reports\Transects\Annotations\CsvReport as TransectReport; +use Biigle\Modules\Export\Support\Reports\Volumes\Annotations\CsvReport as VolumeReport; class CsvReport extends Report { /** - * The class of the transect report to use for this project report. + * The class of the volume report to use for this project report. * * @var string */ - protected $transectReportClass = TransectReport::class; + protected $volumeReportClass = VolumeReport::class; /** * Name of the report for use in text. diff --git a/src/Support/Reports/Projects/Annotations/ExtendedReport.php b/src/Support/Reports/Projects/Annotations/ExtendedReport.php index fc93f4aa1..41dcfbc2c 100644 --- a/src/Support/Reports/Projects/Annotations/ExtendedReport.php +++ b/src/Support/Reports/Projects/Annotations/ExtendedReport.php @@ -3,16 +3,16 @@ namespace Biigle\Modules\Export\Support\Reports\Projects\Annotations; -use Biigle\Modules\Export\Support\Reports\Transects\Annotations\ExtendedReport as TransectReport; +use Biigle\Modules\Export\Support\Reports\Volumes\Annotations\ExtendedReport as VolumeReport; class ExtendedReport extends Report { /** - * The class of the transect report to use for this project report. + * The class of the volume report to use for this project report. * * @var string */ - protected $transectReportClass = TransectReport::class; + protected $volumeReportClass = VolumeReport::class; /** * Name of the report for use in text. diff --git a/src/Support/Reports/Projects/Annotations/FullReport.php b/src/Support/Reports/Projects/Annotations/FullReport.php index 81c233938..d82981183 100644 --- a/src/Support/Reports/Projects/Annotations/FullReport.php +++ b/src/Support/Reports/Projects/Annotations/FullReport.php @@ -3,16 +3,16 @@ namespace Biigle\Modules\Export\Support\Reports\Projects\Annotations; -use Biigle\Modules\Export\Support\Reports\Transects\Annotations\FullReport as TransectReport; +use Biigle\Modules\Export\Support\Reports\Volumes\Annotations\FullReport as VolumeReport; class FullReport extends Report { /** - * The class of the transect report to use for this project report. + * The class of the volume report to use for this project report. * * @var string */ - protected $transectReportClass = TransectReport::class; + protected $volumeReportClass = VolumeReport::class; /** * Name of the report for use in text. diff --git a/src/Support/Reports/Projects/Annotations/Report.php b/src/Support/Reports/Projects/Annotations/Report.php index d8521eb97..0394a0990 100644 --- a/src/Support/Reports/Projects/Annotations/Report.php +++ b/src/Support/Reports/Projects/Annotations/Report.php @@ -3,7 +3,7 @@ namespace Biigle\Modules\Export\Support\Reports\Projects\Annotations; use DB; -use Biigle\Modules\Export\Transect; +use Biigle\Modules\Export\Volume; use Biigle\Modules\Export\Support\Reports\Projects\Report as BaseReport; class Report extends BaseReport diff --git a/src/Support/Reports/Projects/ImageLabels/BasicReport.php b/src/Support/Reports/Projects/ImageLabels/BasicReport.php index 4eb2806f6..e424c5111 100644 --- a/src/Support/Reports/Projects/ImageLabels/BasicReport.php +++ b/src/Support/Reports/Projects/ImageLabels/BasicReport.php @@ -4,16 +4,16 @@ use Biigle\Modules\Export\Support\Reports\Projects\Report; -use Biigle\Modules\Export\Support\Reports\Transects\ImageLabels\BasicReport as TransectReport; +use Biigle\Modules\Export\Support\Reports\Volumes\ImageLabels\BasicReport as VolumeReport; class BasicReport extends Report { /** - * The class of the transect report to use for this project report. + * The class of the volume report to use for this project report. * * @var string */ - protected $transectReportClass = TransectReport::class; + protected $volumeReportClass = VolumeReport::class; /** * Name of the report for use in text. diff --git a/src/Support/Reports/Projects/ImageLabels/CsvReport.php b/src/Support/Reports/Projects/ImageLabels/CsvReport.php index 0b1ce5911..9ca3f9d43 100644 --- a/src/Support/Reports/Projects/ImageLabels/CsvReport.php +++ b/src/Support/Reports/Projects/ImageLabels/CsvReport.php @@ -4,16 +4,16 @@ use Biigle\Modules\Export\Support\Reports\Projects\Report; -use Biigle\Modules\Export\Support\Reports\Transects\ImageLabels\CsvReport as TransectReport; +use Biigle\Modules\Export\Support\Reports\Volumes\ImageLabels\CsvReport as VolumeReport; class CsvReport extends Report { /** - * The class of the transect report to use for this project report. + * The class of the volume report to use for this project report. * * @var string */ - protected $transectReportClass = TransectReport::class; + protected $volumeReportClass = VolumeReport::class; /** * Name of the report for use in text. diff --git a/src/Support/Reports/Projects/Report.php b/src/Support/Reports/Projects/Report.php index cd99868dd..61937fbaf 100644 --- a/src/Support/Reports/Projects/Report.php +++ b/src/Support/Reports/Projects/Report.php @@ -20,11 +20,11 @@ class Report extends BaseReport public $project; /** - * The class of the transect report to use for this project report. + * The class of the volume report to use for this project report. * * @var string */ - protected $transectReportClass; + protected $volumeReportClass; /** * File extension of the report file. @@ -74,13 +74,13 @@ public function generateReport() { $filesForZip = []; - foreach ($this->project->transects as $transect) { - $report = App::make($this->transectReportClass, [ - 'transect' => $transect, + foreach ($this->project->volumes as $volume) { + $report = App::make($this->volumeReportClass, [ + 'volume' => $volume, 'options' => $this->options, ]); $report->generate(); - // The individual transect reports should be deleted again after + // The individual volume reports should be deleted again after // the ZIP of this report was created. $this->tmpFiles[] = $report->availableReport; $filesForZip[$report->availableReport->path] = $report->getDownloadFilename(); diff --git a/src/Support/Reports/Transects/Annotations/AreaReport.php b/src/Support/Reports/Volumes/Annotations/AreaReport.php similarity index 97% rename from src/Support/Reports/Transects/Annotations/AreaReport.php rename to src/Support/Reports/Volumes/Annotations/AreaReport.php index e86dde13a..92bdfa355 100644 --- a/src/Support/Reports/Transects/Annotations/AreaReport.php +++ b/src/Support/Reports/Volumes/Annotations/AreaReport.php @@ -1,6 +1,6 @@ tmpFiles[] = $this->createCsv($rows, $this->transect->name); + $this->tmpFiles[] = $this->createCsv($rows, $this->volume->name); } $this->executeScript('extended_report'); } /** - * Assemble a new DB query for the transect of this report. + * Assemble a new DB query for the volume of this report. * * @return \Illuminate\Database\Query\Builder */ diff --git a/src/Support/Reports/Transects/Annotations/BasicReport.php b/src/Support/Reports/Volumes/Annotations/BasicReport.php similarity index 93% rename from src/Support/Reports/Transects/Annotations/BasicReport.php rename to src/Support/Reports/Volumes/Annotations/BasicReport.php index adaf7f758..667a13be0 100644 --- a/src/Support/Reports/Transects/Annotations/BasicReport.php +++ b/src/Support/Reports/Volumes/Annotations/BasicReport.php @@ -1,6 +1,6 @@ createCsv($rows); $this->tmpFiles[] = $csv; - $toZip[$csv->getPath()] = $this->sanitizeFilename("{$this->transect->id}-{$this->transect->name}", 'csv'); + $toZip[$csv->getPath()] = $this->sanitizeFilename("{$this->volume->id}-{$this->volume->name}", 'csv'); } $this->makeZip($toZip); } /** - * Assemble a new DB query for the transect of this report. + * Assemble a new DB query for the volume of this report. * * @return \Illuminate\Database\Query\Builder */ diff --git a/src/Support/Reports/Transects/Annotations/ExtendedReport.php b/src/Support/Reports/Volumes/Annotations/ExtendedReport.php similarity index 92% rename from src/Support/Reports/Transects/Annotations/ExtendedReport.php rename to src/Support/Reports/Volumes/Annotations/ExtendedReport.php index 965aa387e..74f88bd98 100644 --- a/src/Support/Reports/Transects/Annotations/ExtendedReport.php +++ b/src/Support/Reports/Volumes/Annotations/ExtendedReport.php @@ -1,6 +1,6 @@ tmpFiles[] = $this->createCsv($rows, $this->transect->name); + $this->tmpFiles[] = $this->createCsv($rows, $this->volume->name); } $this->executeScript('extended_report'); } /** - * Assemble a new DB query for the transect of this report. + * Assemble a new DB query for the volume of this report. * * @return \Illuminate\Database\Query\Builder */ diff --git a/src/Support/Reports/Transects/Annotations/FullReport.php b/src/Support/Reports/Volumes/Annotations/FullReport.php similarity index 93% rename from src/Support/Reports/Transects/Annotations/FullReport.php rename to src/Support/Reports/Volumes/Annotations/FullReport.php index 25bc293b3..cfc915776 100644 --- a/src/Support/Reports/Transects/Annotations/FullReport.php +++ b/src/Support/Reports/Volumes/Annotations/FullReport.php @@ -1,6 +1,6 @@ tmpFiles[] = $this->createCsv($rows, $this->transect->name); + $this->tmpFiles[] = $this->createCsv($rows, $this->volume->name); } $this->executeScript('full_report'); } /** - * Assemble a new DB query for the transect of this report. + * Assemble a new DB query for the volume of this report. * * @return \Illuminate\Database\Query\Builder */ diff --git a/src/Support/Reports/Transects/Annotations/Report.php b/src/Support/Reports/Volumes/Annotations/Report.php similarity index 93% rename from src/Support/Reports/Transects/Annotations/Report.php rename to src/Support/Reports/Volumes/Annotations/Report.php index 0ebe3c327..3a965bfb6 100644 --- a/src/Support/Reports/Transects/Annotations/Report.php +++ b/src/Support/Reports/Volumes/Annotations/Report.php @@ -1,11 +1,11 @@ transect)->exportArea; + $exportArea = Volume::convert($this->volume)->exportArea; if (!$exportArea) { // take all annotations if no export area is specified @@ -146,7 +146,7 @@ protected function getSkipIds() DB::table('annotations') ->join('images', 'annotations.image_id', '=', 'images.id') - ->where('images.transect_id', $this->transect->id) + ->where('images.volume_id', $this->volume->id) ->select('annotations.id as id', 'annotations.points') ->chunkById(500, $handleChunk, 'annotations.id', 'id'); @@ -165,7 +165,7 @@ protected function initQuery($columns = []) ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') ->join('images', 'annotations.image_id', '=', 'images.id') ->join('labels', 'annotation_labels.label_id', '=', 'labels.id') - ->where('images.transect_id', $this->transect->id) + ->where('images.volume_id', $this->volume->id) ->when($this->isRestrictedToExportArea(), [$this, 'restrictToExportAreaQuery']) ->when($this->isRestrictedToAnnotationSession(), [$this, 'restrictToAnnotationSessionQuery']) ->select($columns); @@ -215,7 +215,7 @@ protected function isRestrictedToAnnotationSession() protected function getAnnotationSession() { if (!$this->annotationSession) { - $this->annotationSession = $this->transect + $this->annotationSession = $this->volume ->annotationSessions() ->find($this->options->get('annotationSession', null)); } diff --git a/src/Support/Reports/Transects/ImageLabels/BasicReport.php b/src/Support/Reports/Volumes/ImageLabels/BasicReport.php similarity index 88% rename from src/Support/Reports/Transects/ImageLabels/BasicReport.php rename to src/Support/Reports/Volumes/ImageLabels/BasicReport.php index 325d47a27..737018bd2 100644 --- a/src/Support/Reports/Transects/ImageLabels/BasicReport.php +++ b/src/Support/Reports/Volumes/ImageLabels/BasicReport.php @@ -1,11 +1,11 @@ tmpFiles[] = $this->createCsv($rows, $this->transect->name); + $this->tmpFiles[] = $this->createCsv($rows, $this->volume->name); } $this->executeScript('extended_report'); } /** - * Assemble a new DB query for the transect of this report. + * Assemble a new DB query for the volume of this report. * * @return \Illuminate\Database\Query\Builder */ @@ -64,7 +64,7 @@ protected function query() $query = DB::table('image_labels') ->join('images', 'image_labels.image_id', '=', 'images.id') ->select('images.id', 'images.filename', 'image_labels.label_id') - ->where('images.transect_id', $this->transect->id) + ->where('images.volume_id', $this->volume->id) ->orderBy('images.filename'); if ($this->shouldSeparateLabelTrees()) { diff --git a/src/Support/Reports/Transects/ImageLabels/CsvReport.php b/src/Support/Reports/Volumes/ImageLabels/CsvReport.php similarity index 91% rename from src/Support/Reports/Transects/ImageLabels/CsvReport.php rename to src/Support/Reports/Volumes/ImageLabels/CsvReport.php index 57378149f..140ae27f3 100644 --- a/src/Support/Reports/Transects/ImageLabels/CsvReport.php +++ b/src/Support/Reports/Volumes/ImageLabels/CsvReport.php @@ -1,11 +1,11 @@ createCsv($rows); $this->tmpFiles[] = $csv; - $toZip[$csv->getPath()] = $this->sanitizeFilename("{$this->transect->id}-{$this->transect->name}", 'csv'); + $toZip[$csv->getPath()] = $this->sanitizeFilename("{$this->volume->id}-{$this->volume->name}", 'csv'); } $this->makeZip($toZip); } /** - * Assemble a new DB query for the transect of this report. + * Assemble a new DB query for the volume of this report. * * @return \Illuminate\Database\Query\Builder */ @@ -83,7 +83,7 @@ protected function query() 'image_labels.label_id', 'labels.name as label_name', ]) - ->where('images.transect_id', $this->transect->id) + ->where('images.volume_id', $this->volume->id) ->orderBy('images.filename'); if ($this->shouldSeparateLabelTrees()) { diff --git a/src/Support/Reports/Transects/Report.php b/src/Support/Reports/Volumes/Report.php similarity index 71% rename from src/Support/Reports/Transects/Report.php rename to src/Support/Reports/Volumes/Report.php index 918ba98ba..1a9d5f50c 100644 --- a/src/Support/Reports/Transects/Report.php +++ b/src/Support/Reports/Volumes/Report.php @@ -1,33 +1,33 @@ transect = $transect; + $this->volume = $volume; } /** @@ -37,7 +37,7 @@ public function __construct(Transect $transect, $options = []) */ public function getId() { - return $this->transect->id; + return $this->volume->id; } /** @@ -47,7 +47,7 @@ public function getId() */ public function getSubject() { - return "transect {$this->transect->name}"; + return "volume {$this->volume->name}"; } /** @@ -62,19 +62,19 @@ public function expandLabelName($id) { if (is_null($this->labels)) { // We expect most of the used labels to belong to a label tree currently - // attached to the transect (through its projects). - $this->labels = $this->getTransectLabels()->keyBy('id'); + // attached to the volume (through its projects). + $this->labels = $this->getVolumeLabels()->keyBy('id'); } return parent::expandLabelName($id); } /** - * Get all labels that are attached to the transect of this report (through project label trees). + * Get all labels that are attached to the volume of this report (through project label trees). * * @return \Illuminate\Support\Collection */ - protected function getTransectLabels() + protected function getVolumeLabels() { return Label::select('id', 'name', 'parent_id') ->whereIn('label_tree_id', function ($query) { @@ -82,8 +82,8 @@ protected function getTransectLabels() ->from('label_tree_project') ->whereIn('project_id', function ($query) { $query->select('project_id') - ->from('project_transect') - ->where('transect_id', $this->transect->id); + ->from('project_volume') + ->where('volume_id', $this->volume->id); }); }) ->get(); @@ -105,7 +105,7 @@ protected function executeScript($name) }, $this->tmpFiles)); $exec = App::make(Exec::class, [ - 'command' => "{$python} {$script} \"{$this->transect->name}\" {$this->availableReport->path} {$csvs}", + 'command' => "{$python} {$script} \"{$this->volume->name}\" {$this->availableReport->path} {$csvs}", ]); if ($exec->code !== 0) { diff --git a/src/Transect.php b/src/Volume.php similarity index 75% rename from src/Transect.php rename to src/Volume.php index 2145bfef1..05d4b3c9a 100644 --- a/src/Transect.php +++ b/src/Volume.php @@ -3,15 +3,15 @@ namespace Biigle\Modules\Export; use Exception; -use Biigle\Transect as BaseTransect; +use Biigle\Volume as BaseVolume; /** - * Extends the base Biigle transect + * Extends the base Biigle volume */ -class Transect extends BaseTransect { +class Volume extends BaseVolume { /** - * Name of the attribute that stores export area rectangle for the transect + * Name of the attribute that stores export area rectangle for the volume * * @var string */ @@ -27,18 +27,18 @@ class Transect extends BaseTransect { ]; /** - * Converts a regular Biigle transect to an export transect + * Converts a regular Biigle volume to an export volume * - * @param BaseTransect $transect Regular Biigle transect instance + * @param BaseVolume $volume Regular Biigle volume instance * - * @return Transect + * @return Volume */ - public static function convert(BaseTransect $transect) + public static function convert(BaseVolume $volume) { $instance = new static; - $instance->setRawAttributes($transect->attributes); - $instance->exists = $transect->exists; - return $instance->setRelations($transect->relations); + $instance->setRawAttributes($volume->attributes); + $instance->exists = $volume->exists; + return $instance->setRelations($volume->relations); } /** diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index 2c84c08a2..aff29a580 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1 @@ -angular.module("biigle.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/transects/:transect_id/export-area")}]),angular.module("biigle.annotations").service("exportArea",["map","styles","ExportArea","TRANSECT_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature}).catch(function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n.delete({transect_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({transect_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]),angular.module("biigle.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e.delete=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]); +angular.module("biigle.annotations").factory("ExportArea",["$resource","URL",function(e,t){"use strict";return e(t+"/api/v1/volumes/:volume_id/export-area")}]),angular.module("biigle.annotations").service("exportArea",["map","styles","ExportArea","VOLUME_ID","EXPORT_AREA","msg",function(e,t,n,o,r,i){"use strict";var a,s,l=[new ol.style.Style({stroke:new ol.style.Stroke({color:t.colors.white,width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:t.colors.white,width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],c=!1,u=new ol.Collection,d=new ol.source.Vector({features:u}),f=new ol.layer.Vector({source:d,style:l,zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0});e.addLayer(f);var g=new ol.interaction.Draw({source:d,type:"Rectangle",style:l,minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var n=t;return n?n.setCoordinates([e]):n=new ol.geom.Rectangle([e]),n}});g.on("drawend",function(e){s&&d.removeFeature(s),m(e.feature).then(function(){s=e.feature}).catch(function(){d.removeFeature(e.feature),s&&d.addFeature(s)})});var h=new ol.interaction.Modify({features:u,style:l,deleteCondition:ol.events.condition.never}),y=function(){s&&(d.removeFeature(s),n.delete({volume_id:o},function(){s=void 0},function(e){d.addFeature(s),i.responseError(e)}))},m=function(e){var t=p(e.getGeometry().getCoordinates());return n.save({volume_id:o},{coordinates:t},function(){r=t},i.responseError).$promise};h.on("modifyend",function(){s&&m(s)});var w=function(e){return[[e[0],a-e[1]],[e[0],a-e[3]],[e[2],a-e[3]],[e[2],a-e[1]]]},p=function(e){return e=e[0],e=[e[0][0],a-e[0][1],e[2][0],a-e[2][1]],e.map(Math.round)},v=function(){if(r&&4===r.length){var e=new ol.geom.Rectangle([w(r)]);s?s.setGeometry(e):(s=new ol.Feature({geometry:e}),d.addFeature(s))}};this.updateHeight=function(e,t){a!==t.height&&(a=t.height,v())},this.toggleEdit=function(){c?(e.removeInteraction(g),e.removeInteraction(h)):(e.addInteraction(g),e.addInteraction(h)),c=!c},this.isEditing=function(){return c},this.setOpacity=function(e){f.setOpacity(e)},this.deleteArea=y,this.hasArea=function(){return!!s}}]),angular.module("biigle.annotations").controller("ExportAreaSettingsController",["$scope","exportArea","settings",function(e,t,n){"use strict";var o="export_area_opacity";n.setDefaultSettings(o,"1"),e[o]=n.getPermanentSettings(o),e.edit=function(){e.isShown()||(e[o]="1"),t.toggleEdit()},e.isEditing=t.isEditing,e.isShown=function(){return"0"!==e[o]},e.delete=function(){t.hasArea()&&confirm("Do you really want to delete the export area?")&&t.deleteArea()},e.$on("image.shown",t.updateHeight),e.$watch(o,function(e){n.setPermanentSettings(o,e),t.setOpacity(e)})}]); diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index f04c067c9..93b3155d5 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -angular.module("biigle.export",["biigle.api","biigle.ui"]),angular.module("biigle.export").config(["$compileProvider",function(t){"use strict";t.debugInfoEnabled(!1)}]),angular.module("biigle.export").controller("ProjectReportRequestController",["$scope","ProjectReport","ReportForm","PROJECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","area","full","csv"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees"],"image-labels":["separateLabelTrees"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{project_id:s})}}]),angular.module("biigle.export").controller("TransectReportRequestController",["$scope","TransectReport","ReportForm","TRANSECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","area","full","csv"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees","annotationSession"],"image-labels":["separateLabelTrees","annotationSession"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1,annotationSession:null}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{transect_id:s})}}]),angular.module("biigle.export").factory("ProjectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/projects/:project_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestAnnotationAreaReport:{method:"POST",params:{type:"annotations",variant:"area"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]),angular.module("biigle.export").factory("ReportForm",["msg",function(t){"use strict";function e(t,e,a){this.variants=t,this.allowedOptions=e,this.defaultForm=a,this.data=angular.copy(this.defaultForm),this.state={success:!1,loading:!1},this.availableVariants=this.variants[this.data.type]}return e.prototype.handleRequestSuccess=function(){this.state.success=!0,this.state.loading=!1,this.error={}},e.prototype.handleRequestError=function(e){this.state.loading=!1,this.success=!1,422===e.status?this.error=e.data:t.responseError(e)},e.prototype.selectType=function(t){this.data.type=t,this.availableVariants=this.variants[t],this.data.variant=this.availableVariants[0]},e.prototype.wantsType=function(t){return this.data.type===t},e.prototype.wantsCombination=function(t,e){return this.wantsType(t)&&this.data.variant===e},e.prototype.submit=function(t,e){for(var a=this,s={},r=this.allowedOptions[this.data.type],n=r.length-1;n>=0;n--)s[r[n]]=this.data.options[r[n]];this.state.loading=!0,this.state.success=!1,e=angular.extend(e,{type:this.data.type,variant:this.data.variant}),t.requestGenericReport(e,s,function(){a.handleRequestSuccess()},function(t){a.handleRequestError(t)})},e}]),angular.module("biigle.export").factory("TransectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/transects/:transect_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestAnnotationAreaReport:{method:"POST",params:{type:"annotations",variant:"area"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]); +angular.module("biigle.export",["biigle.api","biigle.ui"]),angular.module("biigle.export").config(["$compileProvider",function(t){"use strict";t.debugInfoEnabled(!1)}]),angular.module("biigle.export").controller("ProjectReportRequestController",["$scope","ProjectReport","ReportForm","PROJECT_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","area","full","csv"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees"],"image-labels":["separateLabelTrees"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{project_id:s})}}]),angular.module("biigle.export").controller("VolumeReportRequestController",["$scope","VolumeReport","ReportForm","VOLUME_ID",function(t,e,a,s){"use strict";var r={annotations:["basic","extended","area","full","csv"],"image-labels":["basic","csv"]},n={annotations:["exportArea","separateLabelTrees","annotationSession"],"image-labels":["separateLabelTrees","annotationSession"]},o={type:"annotations",variant:"basic",options:{exportArea:!1,separateLabelTrees:!1,annotationSession:null}};t.form=new a(r,n,o),t.submit=function(){t.form.submit(e,{volume_id:s})}}]),angular.module("biigle.export").factory("ProjectReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/projects/:project_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestAnnotationAreaReport:{method:"POST",params:{type:"annotations",variant:"area"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]),angular.module("biigle.export").factory("ReportForm",["msg",function(t){"use strict";function e(t,e,a){this.variants=t,this.allowedOptions=e,this.defaultForm=a,this.data=angular.copy(this.defaultForm),this.state={success:!1,loading:!1},this.availableVariants=this.variants[this.data.type]}return e.prototype.handleRequestSuccess=function(){this.state.success=!0,this.state.loading=!1,this.error={}},e.prototype.handleRequestError=function(e){this.state.loading=!1,this.success=!1,422===e.status?this.error=e.data:t.responseError(e)},e.prototype.selectType=function(t){this.data.type=t,this.availableVariants=this.variants[t],this.data.variant=this.availableVariants[0]},e.prototype.wantsType=function(t){return this.data.type===t},e.prototype.wantsCombination=function(t,e){return this.wantsType(t)&&this.data.variant===e},e.prototype.submit=function(t,e){for(var a=this,s={},r=this.allowedOptions[this.data.type],n=r.length-1;n>=0;n--)s[r[n]]=this.data.options[r[n]];this.state.loading=!0,this.state.success=!1,e=angular.extend(e,{type:this.data.type,variant:this.data.variant}),t.requestGenericReport(e,s,function(){a.handleRequestSuccess()},function(t){a.handleRequestError(t)})},e}]),angular.module("biigle.export").factory("VolumeReport",["$resource","URL",function(t,e){"use strict";return t(e+"/api/v1/volumes/:volume_id/reports/:type/:variant",{},{requestGenericReport:{method:"POST"},requestBasicAnnotationReport:{method:"POST",params:{type:"annotations",variant:"basic"}},requestExtendedAnnotationReport:{method:"POST",params:{type:"annotations",variant:"extended"}},requestFullAnnotationReport:{method:"POST",params:{type:"annotations",variant:"full"}},requestCsvAnnotationReport:{method:"POST",params:{type:"annotations",variant:"csv"}},requestAnnotationAreaReport:{method:"POST",params:{type:"annotations",variant:"area"}},requestBasicImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"basic"}},requestCsvImageLabelReport:{method:"POST",params:{type:"image-labels",variant:"csv"}}})}]); diff --git a/src/resources/assets/js/annotations/factories/ExportArea.js b/src/resources/assets/js/annotations/factories/ExportArea.js index 66e3920fd..237290bf1 100644 --- a/src/resources/assets/js/annotations/factories/ExportArea.js +++ b/src/resources/assets/js/annotations/factories/ExportArea.js @@ -2,24 +2,24 @@ * @ngdoc factory * @name ExportArea * @memberOf biigle.annotations - * @description Provides the resource for the export area of a transect + * @description Provides the resource for the export area of a volume * @requires $resource * @returns {Object} A new [ngResource](https://docs.angularjs.org/api/ngResource/service/$resource) object * @example // get the export area -var area = ExportArea.query({transect_id: 1}, function () { +var area = ExportArea.query({volume_id: 1}, function () { console.log(area); // [10, 20, 30, 40] }); // set the area -ExportArea.save({transect_id: 1}, {coordinates: [10, 20, 30, 40]}); +ExportArea.save({volume_id: 1}, {coordinates: [10, 20, 30, 40]}); // delete the area -ExportArea.delete({transect_id: 1}); +ExportArea.delete({volume_id: 1}); * */ angular.module('biigle.annotations').factory('ExportArea', function ($resource, URL) { "use strict"; - return $resource(URL + '/api/v1/transects/:transect_id/export-area'); + return $resource(URL + '/api/v1/volumes/:volume_id/export-area'); }); diff --git a/src/resources/assets/js/annotations/services/exportArea.js b/src/resources/assets/js/annotations/services/exportArea.js index 227b9db2d..13901625a 100644 --- a/src/resources/assets/js/annotations/services/exportArea.js +++ b/src/resources/assets/js/annotations/services/exportArea.js @@ -5,7 +5,7 @@ * @memberOf biigle.annotations * @description Manages the export area drawn on the map */ -angular.module('biigle.annotations').service('exportArea', function (map, styles, ExportArea, TRANSECT_ID, EXPORT_AREA, msg) { +angular.module('biigle.annotations').service('exportArea', function (map, styles, ExportArea, VOLUME_ID, EXPORT_AREA, msg) { "use strict"; // a circle with a red and white stroke @@ -106,7 +106,7 @@ angular.module('biigle.annotations').service('exportArea', function (map, styles } source.removeFeature(area); - ExportArea.delete({transect_id: TRANSECT_ID}, function () { + ExportArea.delete({volume_id: VOLUME_ID}, function () { area = undefined; }, function (response) { source.addFeature(area); @@ -117,7 +117,7 @@ angular.module('biigle.annotations').service('exportArea', function (map, styles var saveArea = function (feature) { var coordinates = fromOlCoordinates(feature.getGeometry().getCoordinates()); - return ExportArea.save({transect_id: TRANSECT_ID}, { + return ExportArea.save({volume_id: VOLUME_ID}, { coordinates: coordinates }, function () { EXPORT_AREA = coordinates; diff --git a/src/resources/assets/js/export/controllers/ProjectReportRequestController.js b/src/resources/assets/js/export/controllers/ProjectReportRequestController.js index a60b16da1..59daed45e 100644 --- a/src/resources/assets/js/export/controllers/ProjectReportRequestController.js +++ b/src/resources/assets/js/export/controllers/ProjectReportRequestController.js @@ -3,7 +3,7 @@ * @ngdoc controller * @name ProjectReportRequestController * @memberOf biigle.export - * @description Controller for requesting a new transect report + * @description Controller for requesting a new volume report */ angular.module('biigle.export').controller('ProjectReportRequestController', function ($scope, ProjectReport, ReportForm, PROJECT_ID) { "use strict"; diff --git a/src/resources/assets/js/export/controllers/TransectReportRequestController.js b/src/resources/assets/js/export/controllers/VolumeReportRequestController.js similarity index 77% rename from src/resources/assets/js/export/controllers/TransectReportRequestController.js rename to src/resources/assets/js/export/controllers/VolumeReportRequestController.js index ef8970653..4d1327b2b 100644 --- a/src/resources/assets/js/export/controllers/TransectReportRequestController.js +++ b/src/resources/assets/js/export/controllers/VolumeReportRequestController.js @@ -1,11 +1,11 @@ /** * @namespace biigle.export * @ngdoc controller - * @name TransectReportRequestController + * @name VolumeReportRequestController * @memberOf biigle.export - * @description Controller for requesting a new transect report + * @description Controller for requesting a new volume report */ -angular.module('biigle.export').controller('TransectReportRequestController', function ($scope, TransectReport, ReportForm, TRANSECT_ID) { +angular.module('biigle.export').controller('VolumeReportRequestController', function ($scope, VolumeReport, ReportForm, VOLUME_ID) { "use strict"; var variants = { @@ -47,8 +47,8 @@ angular.module('biigle.export').controller('TransectReportRequestController', fu $scope.form = new ReportForm(variants, allowedOptions, defaultForm); $scope.submit = function () { - $scope.form.submit(TransectReport, { - transect_id: TRANSECT_ID + $scope.form.submit(VolumeReport, { + volume_id: VOLUME_ID }); }; } diff --git a/src/resources/assets/js/export/factories/TransectReport.js b/src/resources/assets/js/export/factories/VolumeReport.js similarity index 72% rename from src/resources/assets/js/export/factories/TransectReport.js rename to src/resources/assets/js/export/factories/VolumeReport.js index a9bd7eb67..5acac7308 100644 --- a/src/resources/assets/js/export/factories/TransectReport.js +++ b/src/resources/assets/js/export/factories/VolumeReport.js @@ -1,28 +1,28 @@ /** * @ngdoc factory - * @name TransectReport + * @name VolumeReport * @memberOf biigle.export - * @description Provides the resource for requesting transect reports + * @description Provides the resource for requesting volume reports * @requires $resource * @returns {Object} A new [ngResource](https://docs.angularjs.org/api/ngResource/service/$resource) object * @example // request a basic report with restricted annotation area -TransectReport.requestBasicAnnotationReport({transect_id: 1}, {restrict: 1}); +VolumeReport.requestBasicAnnotationReport({volume_id: 1}, {restrict: 1}); // request a extended report without restricted annotation area -TransectReport.requestExtendedAnnotationReport({transect_id: 1}, {restrict: 0}); +VolumeReport.requestExtendedAnnotationReport({volume_id: 1}, {restrict: 0}); // request a full report without restricted annotation area -TransectReport.requestFullAnnotationReport({transect_id: 1}, {}); +VolumeReport.requestFullAnnotationReport({volume_id: 1}, {}); // request an image label report -TransectReport.requestBasicImageLabelReport({transect_id: 1}, {}); +VolumeReport.requestBasicImageLabelReport({volume_id: 1}, {}); */ -angular.module('biigle.export').factory('TransectReport', function ($resource, URL) { +angular.module('biigle.export').factory('VolumeReport', function ($resource, URL) { "use strict"; - return $resource(URL + '/api/v1/transects/:transect_id/reports/:type/:variant', {}, { + return $resource(URL + '/api/v1/volumes/:volume_id/reports/:type/:variant', {}, { requestGenericReport: { method: 'POST' }, diff --git a/src/resources/scripts/basic_report.py b/src/resources/scripts/basic_report.py index 5901e989b..8959b637b 100755 --- a/src/resources/scripts/basic_report.py +++ b/src/resources/scripts/basic_report.py @@ -30,7 +30,7 @@ def TitleSlide(text): return fig pdf = PdfPages(target_file) -fig = TitleSlide("BIIGLE basic report for transect\n" + title.decode('UTF-8')) +fig = TitleSlide("BIIGLE basic report for volume\n" + title.decode('UTF-8')) pdf.savefig(fig) width = 1. @@ -63,9 +63,9 @@ def TitleSlide(text): pdf.savefig() d = pdf.infodict() -d['Title'] = "BIIGLE basic report for transect " + title.decode('UTF-8') +d['Title'] = "BIIGLE basic report for volume " + title.decode('UTF-8') d['Author'] = 'Biodata Mining Group, Bielefeld University' -d['Subject'] = 'Histogram of label distribution of the transect' +d['Subject'] = 'Histogram of label distribution of the volume' d['Keywords'] = '' d['CreationDate'] = datetime.datetime.today() d['ModDate'] = datetime.datetime.today() diff --git a/src/resources/scripts/extended_report.py b/src/resources/scripts/extended_report.py index e2678c0ea..f9a872bd4 100755 --- a/src/resources/scripts/extended_report.py +++ b/src/resources/scripts/extended_report.py @@ -13,7 +13,7 @@ f = open(path, 'r') rows = np.array(list(csv.reader(f))) f.close() - # transect name is the first row + # volume name is the first row # column titles are in the second row if rows.shape[0] == 2: continue diff --git a/src/resources/views/annotationsScripts.blade.php b/src/resources/views/annotationsScripts.blade.php index 4ed0c148e..3df8dec7a 100644 --- a/src/resources/views/annotationsScripts.blade.php +++ b/src/resources/views/annotationsScripts.blade.php @@ -1,4 +1,4 @@ diff --git a/src/resources/views/annotationsSettings.blade.php b/src/resources/views/annotationsSettings.blade.php index 13d45b7a2..71b128402 100644 --- a/src/resources/views/annotationsSettings.blade.php +++ b/src/resources/views/annotationsSettings.blade.php @@ -1,9 +1,9 @@

    - @can('update', $transect) + @can('update', $volume) - - + + @endcan Export area diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index cb7e38450..fe0228e9c 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -7,12 +7,12 @@

    A description of the file formats of the different available reports.

    -

    Project and transect reports

    +

    Project and volume reports

    - Most report types can be requested for a whole project as well as for individual transects. A project report is a convenience feature which requests reports for all individual transects of the project at once and provides a ZIP file containing the transect reports for download. However, not all configuration options may be available for project reports. + Most report types can be requested for a whole project as well as for individual volumes. A project report is a convenience feature which requests reports for all individual volumes of the project at once and provides a ZIP file containing the volume reports for download. However, not all configuration options may be available for project reports.

    - The following sections describe the different types of transect reports but, per definition, apply for project reports as well. + The following sections describe the different types of volume reports but, per definition, apply for project reports as well.

    Annotation reports

    @@ -38,7 +38,7 @@ The extended annotation report is an XLSX spreadsheet which contains a list of the abundances of each label and image. If the annotations should be separated by label tree, there will be one worksheet for each label tree that was used.

    - For a single worksheet (not separated by label tree) the first line contains the transect name. For multiple worksheets the first lines contain the name of the respective label tree. The second line always contains the column headers. The columns are as follows: + For a single worksheet (not separated by label tree) the first line contains the volume name. For multiple worksheets the first lines contain the name of the respective label tree. The second line always contains the column headers. The columns are as follows:

    1. Image filename
    2. @@ -76,7 +76,7 @@

    - For a single worksheet (not separated by label tree) the first line contains the transect name. For multiple worksheets the first lines contain the name of the respective label tree. The second line always contains the column headers. The columns are as follows: + For a single worksheet (not separated by label tree) the first line contains the volume name. For multiple worksheets the first lines contain the name of the respective label tree. The second line always contains the column headers. The columns are as follows:

    1. Annotation ID
    2. @@ -134,7 +134,7 @@

      CSV

      - The CSV report is intended for subsequent processing. If you want the data in a machine readable format, choose this report. The report is a ZIP archive, containing a CSV file. The CSV file name consists of the transect ID and the transect name (cleaned up so it can be a file name) separated by an underscore. If the annotations should be separated by label tree, there will be one CSV file for each label tree and the CSV file name will consist of the label tree ID and name instead. + The CSV report is intended for subsequent processing. If you want the data in a machine readable format, choose this report. The report is a ZIP archive, containing a CSV file. The CSV file name consists of the volume ID and the volume name (cleaned up so it can be a file name) separated by an underscore. If the annotations should be separated by label tree, there will be one CSV file for each label tree and the CSV file name will consist of the label tree ID and name instead.

      Each CSV file contains one row for each annotation label. Since an annotation can have multiple labels, there may be multiple rows for a single annotation. The first row always contains the column headers. The columns are as follows: @@ -168,7 +168,7 @@

      Image label reports

      Basic

      - The basic image label report is an XLSX spreadsheet similar to the extended annotation report. It contains a list of all labels attached to each image of the transect. The columns are as follows: + The basic image label report is an XLSX spreadsheet similar to the extended annotation report. It contains a list of all labels attached to each image of the volume. The columns are as follows:

      1. Image ID
      2. diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index c52c9a37e..f8992a3e0 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -10,11 +10,11 @@ @endpush @push('styles') - + @endpush @section('navbar') - diff --git a/src/resources/views/transectsMenubar.blade.php b/src/resources/views/transectsMenubar.blade.php deleted file mode 100644 index 84fd1f775..000000000 --- a/src/resources/views/transectsMenubar.blade.php +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/src/resources/views/transectReports.blade.php b/src/resources/views/volumeReports.blade.php similarity index 84% rename from src/resources/views/transectReports.blade.php rename to src/resources/views/volumeReports.blade.php index c79813492..570656084 100644 --- a/src/resources/views/transectReports.blade.php +++ b/src/resources/views/volumeReports.blade.php @@ -1,21 +1,21 @@ @extends('app') -@section('title')Reports for {{ $transect->name }}@stop +@section('title')Reports for {{ $volume->name }}@stop @push('scripts') @endpush @push('styles') - + @endpush @section('navbar') -
      diff --git a/src/resources/views/partials/reportTypeInfo.blade.php b/src/resources/views/partials/reportTypeInfo.blade.php index f84ac6b65..366373efa 100644 --- a/src/resources/views/partials/reportTypeInfo.blade.php +++ b/src/resources/views/partials/reportTypeInfo.blade.php @@ -11,7 +11,7 @@ The CSV annotation report is intended for subsequent processing and lists the annotation labels at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema.
    - The annotation area report lists all rectangle, circle or polygon annotations with their dimensions and area in pixels (as XLSX). If a laserpoint detection was performed, the dimensions in m and area in m² is included, too. See the manual for the report schema. + The annotation area report lists all rectangle, circle, ellipse or polygon annotations with their dimensions and area in pixels (as XLSX). If a laser point detection was performed, the dimensions in m and area in m² is included, too. See the manual for the report schema.
    The basic image label report lists the image labels of all images (as XLSX). See the manual for the report schema. diff --git a/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php b/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php index 7be54f536..6b711d06a 100644 --- a/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php @@ -40,7 +40,7 @@ public function testProperties() $this->assertStringEndsWith('.xlsx', $generator->getFullFilename()); } - public function testGenerateReportShapes() + public function testGenerateReportPoint() { $volume = VolumeTest::create([ 'name' => 'My Cool Volume', @@ -50,49 +50,62 @@ public function testGenerateReportShapes() 'volume_id' => $volume->id, ]); - $a1 = AnnotationTest::create([ - 'shape_id' => Shape::$circleId, + // Should not be included. + $a = AnnotationTest::create([ + 'shape_id' => Shape::$pointId, 'image_id' => $image->id, - 'points' => [100, 100, 100], + 'points' => [100, 100], ]); - $al11 = AnnotationLabelTest::create([ - 'annotation_id' => $a1->id, - ]); - $al12 = AnnotationLabelTest::create([ - 'annotation_id' => $a1->id, + $al = AnnotationLabelTest::create([ + 'annotation_id' => $a->id, ]); - $a2 = AnnotationTest::create([ - 'shape_id' => Shape::$rectangleId, - 'image_id' => $image->id, - 'points' => [100, 100, 100, 300, 200, 300, 200, 100], - ]); + $mock = Mockery::mock(); + $mock->shouldReceive('put') + ->once() + ->with([$volume->name]); - $al2 = AnnotationLabelTest::create([ - 'annotation_id' => $a2->id, - ]); + $mock->shouldReceive('put') + ->once() + ->with($this->columns); - // It's a simple parallelogram so the area can be easily calculated manually. - $a3 = AnnotationTest::create([ - 'shape_id' => Shape::$polygonId, - 'image_id' => $image->id, - 'points' => [100, 100, 100, 200, 200, 100, 200, 0], + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $generator = new AreaReportGenerator; + $generator->setSource($volume); + $mock = Mockery::mock(); + $mock->shouldReceive('run')->once(); + $generator->setPythonScriptRunner($mock); + $generator->generateReport('my/path'); + } + + public function testGenerateReportCirlce() + { + $volume = VolumeTest::create([ + 'name' => 'My Cool Volume', ]); - $al3 = AnnotationLabelTest::create([ - 'annotation_id' => $a3->id, + $image = ImageTest::create([ + 'volume_id' => $volume->id, ]); - // Should not be included. - $a4 = AnnotationTest::create([ - 'shape_id' => Shape::$pointId, + $a = AnnotationTest::create([ + 'shape_id' => Shape::$circleId, 'image_id' => $image->id, - 'points' => [100, 100], + 'points' => [100, 100, 100], ]); - $al4 = AnnotationLabelTest::create([ - 'annotation_id' => $a4->id, + $al1 = AnnotationLabelTest::create([ + 'annotation_id' => $a->id, + ]); + $al2 = AnnotationLabelTest::create([ + 'annotation_id' => $a->id, ]); $mock = Mockery::mock(); @@ -107,32 +120,121 @@ public function testGenerateReportShapes() $mock->shouldReceive('put') ->once() ->with([ - $a1->id, + $a->id, Shape::$circleId, 'Circle', - "{$al11->label_id}, {$al12->label_id}", - "{$al11->label->name}, {$al12->label->name}", + "{$al1->label_id}, {$al2->label_id}", + "{$al1->label->name}, {$al2->label->name}", $image->id, $image->filename, '', '', '', 200, 200, 10000 * M_PI, ]); + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $generator = new AreaReportGenerator; + $generator->setSource($volume); + $mock = Mockery::mock(); + $mock->shouldReceive('run')->once(); + $generator->setPythonScriptRunner($mock); + $generator->generateReport('my/path'); + } + + public function testGenerateReportRectangle() + { + $volume = VolumeTest::create([ + 'name' => 'My Cool Volume', + ]); + + $image = ImageTest::create([ + 'volume_id' => $volume->id, + ]); + + $a = AnnotationTest::create([ + 'shape_id' => Shape::$rectangleId, + 'image_id' => $image->id, + 'points' => [100, 100, 100, 300, 200, 300, 200, 100], + ]); + + $al = AnnotationLabelTest::create([ + 'annotation_id' => $a->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('put') + ->once() + ->with([$volume->name]); + + $mock->shouldReceive('put') + ->once() + ->with($this->columns); + $mock->shouldReceive('put') ->once() ->with([ - $a2->id, + $a->id, Shape::$rectangleId, 'Rectangle', - $al2->id, $al2->label->name, + $al->id, $al->label->name, $image->id, $image->filename, '', '', '', 200, 100, 20000, ]); + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $generator = new AreaReportGenerator; + $generator->setSource($volume); + $mock = Mockery::mock(); + $mock->shouldReceive('run')->once(); + $generator->setPythonScriptRunner($mock); + $generator->generateReport('my/path'); + } + + public function testGenerateReportPolygon() + { + $volume = VolumeTest::create([ + 'name' => 'My Cool Volume', + ]); + + $image = ImageTest::create([ + 'volume_id' => $volume->id, + ]); + + // It's a simple parallelogram so the area can be easily calculated manually. + $a = AnnotationTest::create([ + 'shape_id' => Shape::$polygonId, + 'image_id' => $image->id, + 'points' => [100, 100, 100, 200, 200, 100, 200, 0], + ]); + + $al = AnnotationLabelTest::create([ + 'annotation_id' => $a->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('put') + ->once() + ->with([$volume->name]); + + $mock->shouldReceive('put') + ->once() + ->with($this->columns); + $mock->shouldReceive('put') ->once() ->with([ - $a3->id, + $a->id, Shape::$polygonId, 'Polygon', - $al3->id, $al3->label->name, + $al->id, $al->label->name, $image->id, $image->filename, '', '', '', 100, 200, 10000, @@ -153,6 +255,62 @@ public function testGenerateReportShapes() $generator->generateReport('my/path'); } + public function testGenerateReportEllipse() + { + $volume = VolumeTest::create([ + 'name' => 'My Cool Volume', + ]); + + $image = ImageTest::create([ + 'volume_id' => $volume->id, + ]); + + // It's a simple parallelogram so the area can be easily calculated manually. + $a = AnnotationTest::create([ + 'shape_id' => Shape::$ellipseId, + 'image_id' => $image->id, + 'points' => [0, 100, 100, 100, 50, 200, 50, 0], + ]); + + $al = AnnotationLabelTest::create([ + 'annotation_id' => $a->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('put') + ->once() + ->with([$volume->name]); + + $mock->shouldReceive('put') + ->once() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([ + $a->id, + Shape::$ellipseId, 'Ellipse', + $al->id, $al->label->name, + $image->id, $image->filename, + '', '', '', + 200, 100, 5000 * M_PI, + ]); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $generator = new AreaReportGenerator; + $generator->setSource($volume); + $mock = Mockery::mock(); + $mock->shouldReceive('run')->once(); + $generator->setPythonScriptRunner($mock); + $generator->generateReport('my/path'); + } + public function testGenerateReportSqm() { $volume = VolumeTest::create([ From ed15b26610bc2e8248f4ee13430cf441906b90c4 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 22 Sep 2017 13:00:27 +0200 Subject: [PATCH 119/407] Fix drawing of export area for new version of our OpenLayers fork --- src/public/assets/scripts/annotations.js | 2 +- .../assets/js/annotations/components/settingsTabPlugins.js | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index fad18b4c2..fe1893a74 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1 @@ -biigle.$require("annotations.components.settingsTabPlugins").exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},exportAreaApi:function(){return biigle.$require("export.api.volumes")},volumeId:function(){return biigle.$require("annotations.volumeId")},messages:function(){return biigle.$require("messages.store")},layer:function(){return new ol.layer.Vector({source:new ol.source.Vector({features:new ol.Collection}),style:[new ol.style.Style({stroke:new ol.style.Stroke({color:"white",width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:"white",width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new ol.interaction.Draw({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(e,t){e=e[0],e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var r=t;return r?r.setCoordinates([e]):r=new ol.geom.Rectangle([e]),r}})},modifyInteraction:function(){return new ol.interaction.Modify({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:ol.events.condition.never})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this,t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.exportAreaApi.delete({id:this.volumeId}).then(function(){e.exportArea=null}).catch(function(i){t.addFeature(r),e.messages.handleErrorResponse(i)})}},updateCurrentImage:function(e,t){this.currentImage=t},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var e=this.currentImage.tiled?0:this.height,t=new ol.geom.Rectangle([[[this.exportArea[0],e-this.exportArea[1]],[this.exportArea[0],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[1]]]]);this.layer.getSource().addFeature(new ol.Feature({geometry:t}))}},handleModifyend:function(e){this.updateExportArea(e.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(e){var t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.updateExportArea(e.feature).catch(function(){t.clear(),r&&t.addFeature(r)})},updateExportArea:function(e){var t=this,r=e.getGeometry().getCoordinates()[0],i=this.currentImage.tiled?0:this.height;r=[r[0][0],i-r[0][1],r[2][0],i-r[2][1]].map(Math.round);var n=this.exportAreaApi.save({id:this.volumeId},{coordinates:r}).then(function(){t.exportArea=r});return n.catch(this.messages.handleErrorResponse),n}},watch:{opacity:function(e,t){e<1?this.settings.set("exportAreaOpacity",e):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(e)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),biigle.$require("events").$on("images.change",this.updateCurrentImage);var e=biigle.$require("annotations.stores.map");e.addLayer(this.layer),this.drawInteraction.setActive(!1),e.addInteraction(this.drawInteraction),this.modifyInteraction.setActive(!1),e.addInteraction(this.modifyInteraction),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend)}},biigle.$declare("export.api.volumes",Vue.resource("/api/v1/volumes{/id}/export-area")); \ No newline at end of file +biigle.$declare("export.api.volumes",Vue.resource("/api/v1/volumes{/id}/export-area")),biigle.$require("annotations.components.settingsTabPlugins").exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},exportAreaApi:function(){return biigle.$require("export.api.volumes")},volumeId:function(){return biigle.$require("annotations.volumeId")},messages:function(){return biigle.$require("messages.store")},layer:function(){return new ol.layer.Vector({source:new ol.source.Vector({features:new ol.Collection}),style:[new ol.style.Style({stroke:new ol.style.Stroke({color:"white",width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:"white",width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new ol.interaction.Draw({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(e,t){e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var r=t;return r?r.setCoordinates([e]):r=new ol.geom.Rectangle([e]),r}})},modifyInteraction:function(){return new ol.interaction.Modify({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:ol.events.condition.never})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this,t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.exportAreaApi.delete({id:this.volumeId}).then(function(){e.exportArea=null}).catch(function(i){t.addFeature(r),e.messages.handleErrorResponse(i)})}},updateCurrentImage:function(e,t){this.currentImage=t},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var e=this.currentImage.tiled?0:this.height,t=new ol.geom.Rectangle([[[this.exportArea[0],e-this.exportArea[1]],[this.exportArea[0],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[1]]]]);this.layer.getSource().addFeature(new ol.Feature({geometry:t}))}},handleModifyend:function(e){this.updateExportArea(e.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(e){var t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.updateExportArea(e.feature).catch(function(){t.clear(),r&&t.addFeature(r)})},updateExportArea:function(e){var t=this,r=e.getGeometry().getCoordinates()[0],i=this.currentImage.tiled?0:this.height;r=[r[0][0],i-r[0][1],r[2][0],i-r[2][1]].map(Math.round);var n=this.exportAreaApi.save({id:this.volumeId},{coordinates:r}).then(function(){t.exportArea=r});return n.catch(this.messages.handleErrorResponse),n}},watch:{opacity:function(e,t){e<1?this.settings.set("exportAreaOpacity",e):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(e)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),biigle.$require("events").$on("images.change",this.updateCurrentImage);var e=biigle.$require("annotations.stores.map");e.addLayer(this.layer),this.drawInteraction.setActive(!1),e.addInteraction(this.drawInteraction),this.modifyInteraction.setActive(!1),e.addInteraction(this.modifyInteraction),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend)}}; \ No newline at end of file diff --git a/src/resources/assets/js/annotations/components/settingsTabPlugins.js b/src/resources/assets/js/annotations/components/settingsTabPlugins.js index 61952e8d5..8c8f2ad00 100644 --- a/src/resources/assets/js/annotations/components/settingsTabPlugins.js +++ b/src/resources/assets/js/annotations/components/settingsTabPlugins.js @@ -84,7 +84,6 @@ biigle.$require('annotations.components.settingsTabPlugins').exportArea = { minPoints: 2, maxPoints: 2, geometryFunction: function (coordinates, opt_geometry) { - coordinates = coordinates[0]; if (coordinates.length > 1) { coordinates = [ coordinates[0], From 55e03d5baa66817f554998756f5edcb92c47e5b9 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 9 Nov 2017 10:32:51 +0100 Subject: [PATCH 120/407] Push GenerateReportJobs to the high priority queue References BiodataMiningGroup/biigle-core#49 --- src/Http/Controllers/Api/ReportController.php | 2 +- .../Controllers/Api/Projects/ProjectReportControllerTest.php | 2 ++ .../Http/Controllers/Api/Volumes/VolumeReportControllerTest.php | 2 ++ 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Http/Controllers/Api/ReportController.php b/src/Http/Controllers/Api/ReportController.php index 58cec6a85..feb768e44 100644 --- a/src/Http/Controllers/Api/ReportController.php +++ b/src/Http/Controllers/Api/ReportController.php @@ -40,7 +40,7 @@ public function store(Request $request, Guard $auth, $id) $report->options = $this->getOptions($request); $report->save(); - $this->dispatch(new GenerateReportJob($report)); + $this->dispatch((new GenerateReportJob($report))->onQueue('high')); } /** diff --git a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php index 498e24865..a17887385 100644 --- a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php @@ -30,6 +30,7 @@ public function testStore() ->assertStatus(200); $job = end($this->dispatchedJobs); + $this->assertEquals('high', $job->queue); $report = $job->report; $this->assertEquals($typeId, $report->type_id); $this->assertEquals($projectId, $report->source_id); @@ -42,6 +43,7 @@ public function testStore() ->assertStatus(200); $job = end($this->dispatchedJobs); + $this->assertEquals('high', $job->queue); $report = $job->report; $this->assertEquals($typeId, $report->type_id); $this->assertEquals($projectId, $report->source_id); diff --git a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php index d37347050..bb94f850f 100644 --- a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php +++ b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php @@ -30,6 +30,7 @@ public function testStore() ->assertStatus(200); $job = end($this->dispatchedJobs); + $this->assertEquals('high', $job->queue); $report = $job->report; $this->assertEquals($typeId, $report->type_id); $this->assertEquals($volumeId, $report->source_id); @@ -42,6 +43,7 @@ public function testStore() ->assertStatus(200); $job = end($this->dispatchedJobs); + $this->assertEquals('high', $job->queue); $report = $job->report; $this->assertEquals($typeId, $report->type_id); $this->assertEquals($volumeId, $report->source_id); From 5fb5f18aa92d8345230d8a1d3fe8b9b99d6ba898 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 23 Nov 2017 15:47:45 +0100 Subject: [PATCH 121/407] Do some CS fix --- src/ExportServiceProvider.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ExportServiceProvider.php b/src/ExportServiceProvider.php index b1f656b5f..2a6d0b8cf 100644 --- a/src/ExportServiceProvider.php +++ b/src/ExportServiceProvider.php @@ -5,8 +5,8 @@ use Biigle\Services\Modules; use Illuminate\Routing\Router; use Illuminate\Database\Eloquent\Factory as EloquentFactory; -use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use Biigle\Modules\Export\Http\Controllers\Mixins\Views\SearchControllerMixin; +use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class ExportServiceProvider extends ServiceProvider { From 65657c34be29f89ae8d06354d5f329040e2aca11 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 8 Jan 2018 10:15:21 +0100 Subject: [PATCH 122/407] Add ready_at column to track ready state Fixes #46 --- .../Mixins/Views/SearchControllerMixin.php | 2 +- src/Jobs/GenerateReportJob.php | 3 ++ src/Report.php | 1 + ..._08_093041_add_reports_ready_at_column.php | 37 +++++++++++++++++++ .../views/searchTabContent.blade.php | 33 ++++++++++------- tests/Jobs/GenerateReportJobTest.php | 5 +++ tests/ReportTest.php | 9 +++++ 7 files changed, 76 insertions(+), 14 deletions(-) create mode 100644 src/database/migrations/2018_01_08_093041_add_reports_ready_at_column.php diff --git a/src/Http/Controllers/Mixins/Views/SearchControllerMixin.php b/src/Http/Controllers/Mixins/Views/SearchControllerMixin.php index 8f6110a3d..e819823eb 100644 --- a/src/Http/Controllers/Mixins/Views/SearchControllerMixin.php +++ b/src/Http/Controllers/Mixins/Views/SearchControllerMixin.php @@ -53,7 +53,7 @@ public function index(User $user, $query, $type) $values = []; if ($type === 'reports') { - $values['results'] = $queryBuilder->orderBy('reports.created_at', 'desc') + $values['results'] = $queryBuilder->orderBy('reports.ready_at', 'desc') ->with('source') ->paginate(10); diff --git a/src/Jobs/GenerateReportJob.php b/src/Jobs/GenerateReportJob.php index cdba01c1a..2201b1345 100644 --- a/src/Jobs/GenerateReportJob.php +++ b/src/Jobs/GenerateReportJob.php @@ -3,6 +3,7 @@ namespace Biigle\Modules\Export\Jobs; use Biigle\User; +use Carbon\Carbon; use Biigle\Jobs\Job; use Biigle\Modules\Export\Report; use Illuminate\Queue\SerializesModels; @@ -55,6 +56,8 @@ public function handle() ini_set('memory_limit', $memoryLimit); } + $this->report->ready_at = new Carbon; + $this->report->save(); $this->report->user->notify(new ReportReady($this->report)); } } diff --git a/src/Report.php b/src/Report.php index c6feb46c3..c8bd2c408 100644 --- a/src/Report.php +++ b/src/Report.php @@ -27,6 +27,7 @@ class Report extends Model 'type_id' => 'int', 'source_id' => 'int', 'options' => 'array', + 'ready_at' => 'datetime', ]; /** diff --git a/src/database/migrations/2018_01_08_093041_add_reports_ready_at_column.php b/src/database/migrations/2018_01_08_093041_add_reports_ready_at_column.php new file mode 100644 index 000000000..dcc2459e4 --- /dev/null +++ b/src/database/migrations/2018_01_08_093041_add_reports_ready_at_column.php @@ -0,0 +1,37 @@ +timestamp('ready_at')->nullable(); + }); + + // Set ready_at of existing reports to equal updated_at. + DB::table('reports') + ->whereNull('ready_at') + ->update(['ready_at' => DB::raw("updated_at")]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('reports', function (Blueprint $table) { + $table->dropColumn('ready_at'); + }); + } +} diff --git a/src/resources/views/searchTabContent.blade.php b/src/resources/views/searchTabContent.blade.php index 94a89019f..53f69b9ae 100644 --- a/src/resources/views/searchTabContent.blade.php +++ b/src/resources/views/searchTabContent.blade.php @@ -3,23 +3,30 @@
      @foreach ($results as $report)
    • - Created on + @if ($report->ready_at) + Created on + @else + Pending for {{$report->created_at->diffForHumans(null, true)}} + @endif - {{$report->subject}} + @if ($report->ready_at) + {{$report->subject}} + @else + {{$report->subject}} + @endif
      {{$report->name}}
    • @endforeach - - @if ($results->isEmpty()) -

      - We couldn't find any reports - @if ($query) - matching '{{$query}}'. - @else - for you. - @endif -

      - @endif
    +@if ($results->isEmpty()) +

    + We couldn't find any reports + @if ($query) + matching '{{$query}}'. + @else + for you. + @endif +

    +@endif @endif diff --git a/tests/Jobs/GenerateReportJobTest.php b/tests/Jobs/GenerateReportJobTest.php index d7af2431f..601500a44 100644 --- a/tests/Jobs/GenerateReportJobTest.php +++ b/tests/Jobs/GenerateReportJobTest.php @@ -5,6 +5,7 @@ use Mockery; use TestCase; use Biigle\User; +use Carbon\Carbon; use Biigle\Modules\Export\Report; use Biigle\Modules\Export\Jobs\GenerateReportJob; use Biigle\Modules\Export\Notifications\ReportReady; @@ -18,6 +19,10 @@ public function testHandle() $user = Mockery::mock(User::class); $user->shouldReceive('notify')->once()->with(Mockery::type(ReportReady::class)); $report->shouldReceive('getAttribute')->with('user')->andReturn($user); + $report->shouldReceive('setAttribute') + ->once() + ->with('ready_at', Mockery::type(Carbon::class)); + $report->shouldReceive('save')->once(); with(new GenerateReportJob($report))->handle(); } } diff --git a/tests/ReportTest.php b/tests/ReportTest.php index c7f4521d8..27ea4507d 100644 --- a/tests/ReportTest.php +++ b/tests/ReportTest.php @@ -5,6 +5,7 @@ use File; use Mockery; use ModelTestCase; +use Carbon\Carbon; use Biigle\Tests\VolumeTest; use Biigle\Tests\ProjectTest; use Biigle\Modules\Export\Report; @@ -26,6 +27,7 @@ public function testAttributes() $this->assertNotNull($this->model->created_at); $this->assertNotNull($this->model->updated_at); $this->assertNotNull($this->model->source_name); + $this->assertNull($this->model->ready_at); } public function testCastsOptions() @@ -142,4 +144,11 @@ public function testObserveVolumes() $this->assertNotNull($this->model->fresh()->source_type); $this->assertEquals($volume->name, $this->model->fresh()->source_name); } + + public function testCastsReadyAt() + { + $this->model->ready_at = new Carbon; + $this->model->save(); + $this->assertInstanceOf(Carbon::class, $this->model->fresh()->ready_at); + } } From 49f50de5326018fb2dec9fc5530287c1dd437e5b Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 19 Jan 2018 13:39:12 +0100 Subject: [PATCH 123/407] Fix tests --- tests/ReportTest.php | 2 +- .../Volumes/Annotations/AreaReportGeneratorTest.php | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/ReportTest.php b/tests/ReportTest.php index 27ea4507d..1ae033918 100644 --- a/tests/ReportTest.php +++ b/tests/ReportTest.php @@ -96,7 +96,7 @@ public function testGetFilenameAttribute() $mock = Mockery::mock(ReportGenerator::class); $mock->shouldReceive('getFullFilename')->once()->andReturn('abc.pdf'); $this->model->setReportGenerator($mock); - $this->assertEquals($this->model->id.'_abc.pdf', $this->model->filename); + $this->assertEquals($this->model->source_id.'_abc.pdf', $this->model->filename); } public function testGetUrl() diff --git a/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php b/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php index 6b711d06a..2310a3b39 100644 --- a/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php @@ -178,7 +178,7 @@ public function testGenerateReportRectangle() ->with([ $a->id, Shape::$rectangleId, 'Rectangle', - $al->id, $al->label->name, + $al->label_id, $al->label->name, $image->id, $image->filename, '', '', '', 200, 100, 20000, @@ -234,7 +234,7 @@ public function testGenerateReportPolygon() ->with([ $a->id, Shape::$polygonId, 'Polygon', - $al->id, $al->label->name, + $al->label_id, $al->label->name, $image->id, $image->filename, '', '', '', 100, 200, 10000, @@ -290,7 +290,7 @@ public function testGenerateReportEllipse() ->with([ $a->id, Shape::$ellipseId, 'Ellipse', - $al->id, $al->label->name, + $al->label_id, $al->label->name, $image->id, $image->filename, '', '', '', 200, 100, 5000 * M_PI, @@ -346,7 +346,7 @@ public function testGenerateReportSqm() ->with([ $a->id, Shape::$rectangleId, 'Rectangle', - $al->id, $al->label->name, + $al->label_id, $al->label->name, $image->id, $image->filename, 0.2, 0.1, 0.02, 200, 100, 20000, @@ -407,7 +407,7 @@ public function testGenerateReportSeparateLabelTrees() ->with([ $annotation->id, Shape::$rectangleId, 'Rectangle', - $al1->id, $al1->label->name, + $al1->label_id, $al1->label->name, $image->id, $image->filename, '', '', '', 200, 100, 20000, @@ -418,7 +418,7 @@ public function testGenerateReportSeparateLabelTrees() ->with([ $annotation->id, Shape::$rectangleId, 'Rectangle', - $al2->id, $al2->label->name, + $al2->label_id, $al2->label->name, $image->id, $image->filename, '', '', '', 200, 100, 20000, From 324e68fdc849a17cab118a877e701b201e32aad9 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 21 Feb 2018 16:13:53 +0100 Subject: [PATCH 124/407] Use new style for annotation tool settings tab --- src/resources/views/annotationsSettingsTab.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/resources/views/annotationsSettingsTab.blade.php b/src/resources/views/annotationsSettingsTab.blade.php index a5a239493..cb7bba1e8 100644 --- a/src/resources/views/annotationsSettingsTab.blade.php +++ b/src/resources/views/annotationsSettingsTab.blade.php @@ -1,6 +1,6 @@ -
    - +
    diff --git a/src/resources/views/volumeReports.blade.php b/src/resources/views/volumeReports.blade.php index 74dee2db2..85ef1abb6 100644 --- a/src/resources/views/volumeReports.blade.php +++ b/src/resources/views/volumeReports.blade.php @@ -83,6 +83,17 @@
    Annotations that are outside of the export area will be discarded for this report.
    +
    +
    + +
    +
    +
    +
    + Only the newest label of each annotation will be included in the report. +
    diff --git a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php index a17887385..53198d901 100644 --- a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php @@ -35,10 +35,12 @@ public function testStore() $this->assertEquals($typeId, $report->type_id); $this->assertEquals($projectId, $report->source_id); $this->assertEquals(false, $report->options['exportArea']); + $this->assertEquals(false, $report->options['newestLabel']); $response = $this->json('POST', "api/v1/projects/{$projectId}/reports", [ 'type_id' => $typeId, 'export_area' => true, + 'newest_label' => true, ]) ->assertStatus(200); @@ -48,5 +50,6 @@ public function testStore() $this->assertEquals($typeId, $report->type_id); $this->assertEquals($projectId, $report->source_id); $this->assertEquals(true, $report->options['exportArea']); + $this->assertEquals(true, $report->options['newestLabel']); } } diff --git a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php index bb94f850f..e6476e970 100644 --- a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php +++ b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php @@ -35,10 +35,12 @@ public function testStore() $this->assertEquals($typeId, $report->type_id); $this->assertEquals($volumeId, $report->source_id); $this->assertEquals(false, $report->options['exportArea']); + $this->assertEquals(false, $report->options['newestLabel']); $response = $this->json('POST', "api/v1/volumes/{$volumeId}/reports", [ 'type_id' => $typeId, 'export_area' => true, + 'newest_label' => true, ]) ->assertStatus(200); @@ -48,5 +50,6 @@ public function testStore() $this->assertEquals($typeId, $report->type_id); $this->assertEquals($volumeId, $report->source_id); $this->assertEquals(true, $report->options['exportArea']); + $this->assertEquals(true, $report->options['newestLabel']); } } diff --git a/tests/Http/Controllers/Mixins/Views/SearchControllerMixinTest.php b/tests/Http/Controllers/Mixins/Views/SearchControllerMixinTest.php index ae7f4c69f..1f86e1423 100644 --- a/tests/Http/Controllers/Mixins/Views/SearchControllerMixinTest.php +++ b/tests/Http/Controllers/Mixins/Views/SearchControllerMixinTest.php @@ -1,6 +1,6 @@ source->name; + $r1 = ReportTest::create([ + 'source_id' => VolumeTest::create(['name' => 'my volume']), + 'source_type' => Volume::class, + ]); $r1->source()->delete(); $this->be($r1->user); - $this->get('search?t=reports')->assertSeeText($name); + $this->get('search?t=reports')->assertSeeText('my volume'); } } diff --git a/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php b/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php index 2a35f77c2..70c7c5d2f 100644 --- a/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php @@ -100,13 +100,23 @@ public function testGetNameAndFilename() $this->assertContains($session->name, $generator->getName()); $this->assertContains('restricted_to_annotation_session', $generator->getFilename()); + $generator = new AnnotationReportGenerator([ + 'newestLabel' => true, + ]); + + $this->assertContains('restricted to newest label of each annotation', $generator->getName()); + $this->assertContains('restricted_to_newest_label', $generator->getFilename()); + $generator = new AnnotationReportGenerator([ 'exportArea' => true, + 'newestLabel' => true, 'annotationSession' => $session->id, ]); $this->assertContains('export area', $generator->getName()); $this->assertContains('export_area', $generator->getFilename()); + $this->assertContains('newest label', $generator->getName()); + $this->assertContains('newest_label', $generator->getFilename()); $this->assertContains('annotation session', $generator->getName()); $this->assertContains($session->name, $generator->getName()); $this->assertContains('annotation_session', $generator->getFilename()); @@ -163,4 +173,35 @@ public function testRestrictToAnnotationSessionQuery() $this->assertEquals(1, count($results)); $this->assertEquals($al2->id, $results[0]->id); } + + public function testRestrictToNewestLabelQuery() + { + $a = AnnotationTest::create(); + + $al1 = AnnotationLabelTest::create([ + 'created_at' => '2016-10-05 09:15:00', + 'annotation_id' => $a->id, + ]); + + // Even if there are two labels created in the same second, we only want the + // newest one (as determined by the ID). + $al2 = AnnotationLabelTest::create([ + 'created_at' => '2016-10-05 09:16:00', + 'annotation_id' => $a->id, + ]); + + $al3 = AnnotationLabelTest::create([ + 'created_at' => '2016-10-05 09:16:00', + 'annotation_id' => $a->id, + ]); + + $generator = new AnnotationReportGenerator([ + 'newestLabel' => true, + ]); + $generator->setSource($a->image->volume); + $results = AnnotationLabel::when(true, [$generator, 'restrictToNewestLabelQuery'])->get(); + + $this->assertEquals(1, count($results)); + $this->assertEquals($al3->id, $results[0]->id); + } } From c8a4a849667835617597f169e68375862fd8c241 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 18 Apr 2018 10:22:10 +0200 Subject: [PATCH 127/407] Rename the module to biigle/reports References #48 --- README.md | 16 +++++----- composer.json | 4 +-- gulpfile.js | 6 ++-- package.json | 2 +- src/AvailableReport.php | 6 ++-- src/Console/Commands/Publish.php | 6 ++-- .../Api/AvailableReportController.php | 4 +-- .../Api/Projects/ProjectReportController.php | 4 +-- src/Http/Controllers/Api/ReportController.php | 8 ++--- .../Controllers/Api/ReportsController.php | 4 +-- .../Controllers/Api/SettingsController.php | 8 ++--- .../Api/Volumes/ExportAreaController.php | 4 +-- .../Api/Volumes/VolumeReportController.php | 4 +-- .../Mixins/Views/SearchControllerMixin.php | 4 +-- .../Views/ProjectReportsController.php | 6 ++-- .../Controllers/Views/ReportsController.php | 2 +- .../Views/VolumeReportsController.php | 6 ++-- src/Http/routes.php | 2 +- src/Jobs/GenerateReportJob.php | 6 ++-- src/Notifications/ReportReady.php | 8 ++--- src/Observers/ProjectObserver.php | 4 +-- src/Observers/ReportObserver.php | 4 +-- src/Observers/UserObserver.php | 4 +-- src/Observers/VolumeObserver.php | 4 +-- src/Policies/ReportPolicy.php | 4 +-- src/Report.php | 6 ++-- src/ReportType.php | 2 +- ...rovider.php => ReportsServiceProvider.php} | 30 +++++++++---------- src/Support/CsvFile.php | 2 +- src/Support/File.php | 4 +-- src/Support/Reports/MakesZipArchives.php | 2 +- .../Annotations/AnnotationReportGenerator.php | 4 +-- .../Annotations/AreaReportGenerator.php | 4 +-- .../Annotations/BasicReportGenerator.php | 4 +-- .../Annotations/CsvReportGenerator.php | 4 +-- .../Annotations/ExtendedReportGenerator.php | 4 +-- .../Annotations/FullReportGenerator.php | 4 +-- .../ImageLabels/BasicReportGenerator.php | 6 ++-- .../ImageLabels/CsvReportGenerator.php | 6 ++-- .../Projects/ProjectReportGenerator.php | 10 +++---- src/Support/Reports/ReportGenerator.php | 4 +-- .../Annotations/AnnotationReportGenerator.php | 6 ++-- .../Annotations/AreaReportGenerator.php | 6 ++-- .../Annotations/BasicReportGenerator.php | 4 +-- .../Annotations/CsvReportGenerator.php | 6 ++-- .../Annotations/ExtendedReportGenerator.php | 4 +-- .../Annotations/FullReportGenerator.php | 4 +-- .../ImageLabels/BasicReportGenerator.php | 6 ++-- .../ImageLabels/CsvReportGenerator.php | 8 ++--- .../Reports/Volumes/PythonScriptRunner.php | 8 ++--- .../Reports/Volumes/VolumeReportGenerator.php | 8 ++--- src/Volume.php | 2 +- src/config/{export.php => reports.php} | 0 src/database/factories/ModelFactory.php | 6 ++-- ...2017_06_09_092100_create_reports_table.php | 2 +- .../assets/js/annotations/api/volumes.js | 4 +-- .../components/settingsTabPlugins.js | 2 +- .../{export => reports}/api/projectReports.js | 4 +-- .../{export => reports}/api/volumeReports.js | 4 +-- .../exportProjectReportForm.js | 8 ++--- .../exportVolumeReportForm.js | 8 ++--- .../{export => reports}/mixins/reportForm.js | 4 +-- .../views/annotationsScripts.blade.php | 4 +-- .../manual/tutorials/reports-schema.blade.php | 4 +-- src/resources/views/manualTutorial.blade.php | 2 +- .../views/partials/reportTypeInfo.blade.php | 14 ++++----- src/resources/views/projectReports.blade.php | 10 +++---- .../views/settings/notifications.blade.php | 4 +-- src/resources/views/volumeReports.blade.php | 10 +++---- src/resources/views/volumesSidebar.blade.php | 2 +- .../Projects/ProjectReportControllerTest.php | 6 ++-- .../Controllers/Api/ReportsControllerTest.php | 4 +-- .../Api/Volumes/ExportAreaControllerTest.php | 4 +-- .../Volumes/VolumeReportControllerTest.php | 6 ++-- .../Views/SearchControllerMixinTest.php | 4 +-- .../Controllers/SettingsControllerTest.php | 18 +++++------ .../Views/ProjectsReportControllerTest.php | 2 +- .../Views/ReportsControllerTest.php | 2 +- .../Views/VolumesReportControllerTest.php | 2 +- tests/Jobs/GenerateReportJobTest.php | 8 ++--- tests/Policies/ReportPolicyTest.php | 6 ++-- tests/ReportTest.php | 8 ++--- .../Annotations/AreaReportGeneratorTest.php | 4 +-- .../Annotations/BasicReportGeneratorTest.php | 4 +-- .../Annotations/CsvReportGeneratorTest.php | 4 +-- .../ExtendedReportGeneratorTest.php | 4 +-- .../Annotations/FullReportGeneratorTest.php | 4 +-- .../Projects/ImageLabels/BasicReportTest.php | 4 +-- ...eportsProjectsImageLabelsCsvReportTest.php | 4 +-- .../Projects/ProjectReportGeneratorTest.php | 6 ++-- tests/Support/Reports/ReportGeneratorTest.php | 8 ++--- .../AnnotationReportGeneratorTest.php | 6 ++-- .../Annotations/AreaReportGeneratorTest.php | 6 ++-- .../Annotations/BasicReportGeneratorTest.php | 8 ++--- .../Annotations/CsvReportGeneratorTest.php | 6 ++-- .../ExtendedReportGeneratorTest.php | 8 ++--- .../Annotations/FullReportGeneratorTest.php | 8 ++--- .../ImageLabels/BasicReportGeneratorTest.php | 6 ++-- .../ImageLabels/CsvReportGeneratorTest.php | 6 ++-- .../Volumes/VolumeReportGeneratorTest.php | 6 ++-- tests/VolumeTest.php | 12 ++++---- 101 files changed, 282 insertions(+), 282 deletions(-) rename src/{ExportServiceProvider.php => ReportsServiceProvider.php} (72%) rename src/config/{export.php => reports.php} (100%) rename src/resources/assets/js/{export => reports}/api/projectReports.js (58%) rename src/resources/assets/js/{export => reports}/api/volumeReports.js (62%) rename src/resources/assets/js/{export => reports}/exportProjectReportForm.js (64%) rename src/resources/assets/js/{export => reports}/exportVolumeReportForm.js (71%) rename src/resources/assets/js/{export => reports}/mixins/reportForm.js (95%) diff --git a/README.md b/README.md index 5b910ed9e..e5b32b189 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Biigle Export Module +# Biigle Reports Module Install the module: @@ -6,13 +6,13 @@ Add the following to the repositories array of your `composer.json`: ``` { "type": "vcs", - "url": "https://github.com/BiodataMiningGroup/biigle-export.git" + "url": "https://github.com/BiodataMiningGroup/biigle-reports.git" } ``` -1. Run `php composer.phar require biigle/export`. -2. Add `'Biigle\Modules\Export\ExportServiceProvider'` to the `providers` array in `config/app.php`. -3. Run `php artisan export:publish` to refresh the public assets of this package. Do this for every update of the package. -4. Run `pip install -r vendor/biigle/export/requirements.txt` to install python requirements. -5. Create a `storage/reports` directory that is read/writable for the web application. The location can be configured via the `export.exports_storage` key. -6. Make sure the `export.tmp_storage` directory is read/writable for the web application (default is `sys_get_temp_dir()`). +1. Run `php composer.phar require biigle/reports`. +2. Add `'Biigle\Modules\Reports\ReportsServiceProvider'` to the `providers` array in `config/app.php`. +3. Run `php artisan reports:publish` to refresh the public assets of this package. Do this for every update of the package. +4. Run `pip install -r vendor/biigle/reports/requirements.txt` to install python requirements. +5. Create a `storage/reports` directory that is read/writable for the web application. The location can be configured via the `reports.reports_storage` key. +6. Make sure the `reports.tmp_storage` directory is read/writable for the web application (default is `sys_get_temp_dir()`). diff --git a/composer.json b/composer.json index 29ac07d2f..66eef8b2c 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,5 @@ { - "name": "biigle/export", + "name": "biigle/reports", "require": { "ext-zip": "*", "biigle/projects": "~1.4" @@ -8,7 +8,7 @@ }, "autoload": { "psr-4": { - "Biigle\\Modules\\Export\\": "src" + "Biigle\\Modules\\Reports\\": "src" } } } diff --git a/gulpfile.js b/gulpfile.js index ef6f149cd..6a490386f 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -2,14 +2,14 @@ var gulp = require('gulp'); var h = require('gulp-helpers'); -var publish = h.publish('Biigle\\Modules\\Export\\ExportServiceProvider', 'public'); +var publish = h.publish('Biigle\\Modules\\Reports\\ReportsServiceProvider', 'public'); h.paths.sass = 'src/resources/assets/sass/'; h.paths.js = 'src/resources/assets/js/'; h.paths.public = 'src/public/assets/'; gulp.task('js-main', function (cb) { - h.js('export/**/*.js', 'main.js', cb); + h.js('reports/**/*.js', 'main.js', cb); }); gulp.task('js-annotations', function (cb) { @@ -19,7 +19,7 @@ gulp.task('js-annotations', function (cb) { gulp.task('js', ['js-main', 'js-annotations']); gulp.task('watch', function () { - gulp.watch(h.paths.js + 'export/**/*.js', ['js-main']); + gulp.watch(h.paths.js + 'reports/**/*.js', ['js-main']); gulp.watch(h.paths.js + 'annotations/**/*.js', ['js-annotations']); gulp.watch(h.paths.public + '**/*', publish); }); diff --git a/package.json b/package.json index dbc7d70c9..c7d96ce47 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "biigle-export", + "name": "biigle-reports", "version": "0.0.1", "directories": { "test": "tests" diff --git a/src/AvailableReport.php b/src/AvailableReport.php index 6ea6a588c..227ec34df 100644 --- a/src/AvailableReport.php +++ b/src/AvailableReport.php @@ -1,6 +1,6 @@ path = config('export.reports_storage').'/'.$basename; + $this->path = config('reports.reports_storage').'/'.$basename; } else { do { // use str_random to generate a cryptographically secure random string // because it will be used to retrieve the file via a public url - $path = config('export.reports_storage').'/'.str_random(); + $path = config('reports.reports_storage').'/'.str_random(); } while (File::exists($path)); $this->path = $path; diff --git a/src/Console/Commands/Publish.php b/src/Console/Commands/Publish.php index 0b3c804e9..6e8c7f45c 100644 --- a/src/Console/Commands/Publish.php +++ b/src/Console/Commands/Publish.php @@ -1,9 +1,9 @@ validate($request, self::VALIDATION_RULES); $settings = $request->only(array_keys(self::VALIDATION_RULES)); - if (config('export.notifications.allow_user_settings') === false) { + if (config('reports.notifications.allow_user_settings') === false) { unset($settings['report_notifications']); } $auth->user()->setSettings($settings); diff --git a/src/Http/Controllers/Api/Volumes/ExportAreaController.php b/src/Http/Controllers/Api/Volumes/ExportAreaController.php index 554df9959..29f713d52 100644 --- a/src/Http/Controllers/Api/Volumes/ExportAreaController.php +++ b/src/Http/Controllers/Api/Volumes/ExportAreaController.php @@ -1,10 +1,10 @@ authorize('access', $project); $types = ReportType::all(); - return view('export::projectReports', [ + return view('reports::projectReports', [ 'project' => $project, 'reportTypes' => $types, ]); diff --git a/src/Http/Controllers/Views/ReportsController.php b/src/Http/Controllers/Views/ReportsController.php index 604ad891f..98d949230 100644 --- a/src/Http/Controllers/Views/ReportsController.php +++ b/src/Http/Controllers/Views/ReportsController.php @@ -1,6 +1,6 @@ annotationSessions()->orderBy('starts_at', 'desc')->get(); $types = ReportType::all(); - return view('export::volumeReports', [ + return view('reports::volumeReports', [ 'projects' => $volume->projects, 'volume' => $volume, 'annotationSessions' => $sessions, diff --git a/src/Http/routes.php b/src/Http/routes.php index abddd76de..90877966e 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -35,7 +35,7 @@ 'as' => 'show-reports', ]); - $router->post('users/my/settings/export', [ + $router->post('users/my/settings/reports', [ 'uses' => 'SettingsController@store', ]); }); diff --git a/src/Jobs/GenerateReportJob.php b/src/Jobs/GenerateReportJob.php index 2201b1345..74d39150e 100644 --- a/src/Jobs/GenerateReportJob.php +++ b/src/Jobs/GenerateReportJob.php @@ -1,15 +1,15 @@ getSettings('report_notifications', $settings); } diff --git a/src/Observers/ProjectObserver.php b/src/Observers/ProjectObserver.php index aaefdfa77..00b77a592 100644 --- a/src/Observers/ProjectObserver.php +++ b/src/Observers/ProjectObserver.php @@ -1,9 +1,9 @@ id; + return config('reports.reports_storage').'/'.$this->id; } /** diff --git a/src/ReportType.php b/src/ReportType.php index b90a2fef1..315e62333 100644 --- a/src/ReportType.php +++ b/src/ReportType.php @@ -1,6 +1,6 @@ loadViewsFrom(__DIR__.'/resources/views', 'export'); + $this->loadViewsFrom(__DIR__.'/resources/views', 'reports'); $this->loadMigrationsFrom(__DIR__.'/database/migrations'); $router->group([ - 'namespace' => 'Biigle\Modules\Export\Http\Controllers', + 'namespace' => 'Biigle\Modules\Reports\Http\Controllers', 'middleware' => 'web', ], function ($router) { require __DIR__.'/Http/routes.php'; }); $this->publishes([ - __DIR__.'/public/assets' => public_path('vendor/export'), + __DIR__.'/public/assets' => public_path('vendor/reports'), ], 'public'); $this->publishes([ - __DIR__.'/config/export.php' => config_path('export.php'), + __DIR__.'/config/reports.php' => config_path('reports.php'), ], 'config'); - $modules->register('export', [ + $modules->register('reports', [ 'viewMixins' => [ 'projectsShowToolbar', 'annotationsSettingsTab', @@ -64,8 +64,8 @@ public function boot(Modules $modules, Router $router) ], ]); - if (config('export.notifications.allow_user_settings')) { - $modules->registerViewMixin('export', 'settings.notifications'); + if (config('reports.notifications.allow_user_settings')) { + $modules->registerViewMixin('reports', 'settings.notifications'); } $this->registerPolicies(); @@ -82,14 +82,14 @@ public function boot(Modules $modules, Router $router) */ public function register() { - $this->mergeConfigFrom(__DIR__.'/config/export.php', 'export'); + $this->mergeConfigFrom(__DIR__.'/config/reports.php', 'reports'); - $this->app->singleton('command.export.publish', function ($app) { - return new \Biigle\Modules\Export\Console\Commands\Publish(); + $this->app->singleton('command.reports.publish', function ($app) { + return new \Biigle\Modules\Reports\Console\Commands\Publish(); }); $this->commands([ - 'command.export.publish', + 'command.reports.publish', ]); if (config('app.env') === 'testing') { @@ -105,7 +105,7 @@ public function register() public function provides() { return [ - 'command.export.publish', + 'command.reports.publish', ]; } diff --git a/src/Support/CsvFile.php b/src/Support/CsvFile.php index 96f178b68..05d003293 100644 --- a/src/Support/CsvFile.php +++ b/src/Support/CsvFile.php @@ -1,6 +1,6 @@ path = tempnam(config('export.tmp_storage').'/', 'biigle-export-csv-'); + $this->path = tempnam(config('reports.tmp_storage').'/', 'biigle-reports-csv-'); } else { $this->path = $path; } diff --git a/src/Support/Reports/MakesZipArchives.php b/src/Support/Reports/MakesZipArchives.php index 2693c4611..2fd88c52e 100644 --- a/src/Support/Reports/MakesZipArchives.php +++ b/src/Support/Reports/MakesZipArchives.php @@ -1,6 +1,6 @@ join('shapes', 'annotations.shape_id', '=', 'shapes.id') - // We can only compute the area from annotations that have and area. + // We can only compute the area from annotations that have an area. ->whereIn('shapes.id', [ Shape::$circleId, Shape::$rectangleId, diff --git a/src/Support/Reports/Volumes/Annotations/BasicReportGenerator.php b/src/Support/Reports/Volumes/Annotations/BasicReportGenerator.php index 750756aac..b6bd1e1d0 100644 --- a/src/Support/Reports/Volumes/Annotations/BasicReportGenerator.php +++ b/src/Support/Reports/Volumes/Annotations/BasicReportGenerator.php @@ -1,10 +1,10 @@ getPath(); diff --git a/src/Support/Reports/Volumes/VolumeReportGenerator.php b/src/Support/Reports/Volumes/VolumeReportGenerator.php index 16033eddd..6c7c867cb 100644 --- a/src/Support/Reports/Volumes/VolumeReportGenerator.php +++ b/src/Support/Reports/Volumes/VolumeReportGenerator.php @@ -1,14 +1,14 @@ define(Biigle\Modules\Export\ReportType::class, function ($faker) { +$factory->define(Biigle\Modules\Reports\ReportType::class, function ($faker) { return [ 'name' => $faker->username(), ]; }); -$factory->define(Biigle\Modules\Export\Report::class, function ($faker) { +$factory->define(Biigle\Modules\Reports\Report::class, function ($faker) { if (rand(0, 1) > 0) { $sourceType = Biigle\Volume::class; } else { @@ -18,7 +18,7 @@ return factory(Biigle\User::class)->create()->id; }, 'type_id' => function () { - return Biigle\Modules\Export\ReportType::inRandomOrder()->first()->id; + return Biigle\Modules\Reports\ReportType::inRandomOrder()->first()->id; }, 'source_id' => function () use ($sourceType) { return factory($sourceType)->create()->id; diff --git a/src/database/migrations/2017_06_09_092100_create_reports_table.php b/src/database/migrations/2017_06_09_092100_create_reports_table.php index d614c6bfe..c8c46b1a4 100644 --- a/src/database/migrations/2017_06_09_092100_create_reports_table.php +++ b/src/database/migrations/2017_06_09_092100_create_reports_table.php @@ -20,7 +20,7 @@ public function up() }); // Must be compatible with the namespaces of the report generators in - // \Biigle\Modules\Export\Support\Reports. + // \Biigle\Modules\Reports\Support\Reports. DB::table('report_types')->insert([ ['name' => 'Annotations\Area'], ['name' => 'Annotations\Basic'], diff --git a/src/resources/assets/js/annotations/api/volumes.js b/src/resources/assets/js/annotations/api/volumes.js index 1c4276652..a854cb698 100644 --- a/src/resources/assets/js/annotations/api/volumes.js +++ b/src/resources/assets/js/annotations/api/volumes.js @@ -1,7 +1,7 @@ /** * Resource for editing the export area of a volume * - * var resource = biigle.$require('export.api.volumes'); + * var resource = biigle.$require('reports.api.volumes'); * * Get the export area: * resource.get({id: volumeId}).then(...); @@ -13,4 +13,4 @@ * resource.delete({id: columeId}).then(...); * */ -biigle.$declare('export.api.volumes', Vue.resource('/api/v1/volumes{/id}/export-area')); +biigle.$declare('reports.api.volumes', Vue.resource('/api/v1/volumes{/id}/export-area')); diff --git a/src/resources/assets/js/annotations/components/settingsTabPlugins.js b/src/resources/assets/js/annotations/components/settingsTabPlugins.js index 8c8f2ad00..270292f9f 100644 --- a/src/resources/assets/js/annotations/components/settingsTabPlugins.js +++ b/src/resources/assets/js/annotations/components/settingsTabPlugins.js @@ -32,7 +32,7 @@ biigle.$require('annotations.components.settingsTabPlugins').exportArea = { return this.exportArea !== null; }, exportAreaApi: function () { - return biigle.$require('export.api.volumes'); + return biigle.$require('reports.api.volumes'); }, volumeId: function () { return biigle.$require('annotations.volumeId'); diff --git a/src/resources/assets/js/export/api/projectReports.js b/src/resources/assets/js/reports/api/projectReports.js similarity index 58% rename from src/resources/assets/js/export/api/projectReports.js rename to src/resources/assets/js/reports/api/projectReports.js index 05222b827..950a47ea0 100644 --- a/src/resources/assets/js/export/api/projectReports.js +++ b/src/resources/assets/js/reports/api/projectReports.js @@ -1,7 +1,7 @@ /** * Resource for requesting reports for projects * - * var resource = biigle.$require('export.api.projectReports'); + * var resource = biigle.$require('reports.api.projectReports'); * * Request a basic annotation report: * @@ -12,4 +12,4 @@ * }).then(...) * */ -biigle.$declare('export.api.projectReports', Vue.resource('/api/v1/projects{/id}/reports')); +biigle.$declare('reports.api.projectReports', Vue.resource('/api/v1/projects{/id}/reports')); diff --git a/src/resources/assets/js/export/api/volumeReports.js b/src/resources/assets/js/reports/api/volumeReports.js similarity index 62% rename from src/resources/assets/js/export/api/volumeReports.js rename to src/resources/assets/js/reports/api/volumeReports.js index c48285b6b..48202afa3 100644 --- a/src/resources/assets/js/export/api/volumeReports.js +++ b/src/resources/assets/js/reports/api/volumeReports.js @@ -1,7 +1,7 @@ /** * Resource for requesting reports for volumes * - * var resource = biigle.$require('export.api.volumeReports'); + * var resource = biigle.$require('reports.api.volumeReports'); * * Request a basic annotation report: * @@ -13,4 +13,4 @@ * }).then(...) * */ -biigle.$declare('export.api.volumeReports', Vue.resource('/api/v1/volumes{/id}/reports')); +biigle.$declare('reports.api.volumeReports', Vue.resource('/api/v1/volumes{/id}/reports')); diff --git a/src/resources/assets/js/export/exportProjectReportForm.js b/src/resources/assets/js/reports/exportProjectReportForm.js similarity index 64% rename from src/resources/assets/js/export/exportProjectReportForm.js rename to src/resources/assets/js/reports/exportProjectReportForm.js index b370d9adb..d4a0dabb7 100644 --- a/src/resources/assets/js/export/exportProjectReportForm.js +++ b/src/resources/assets/js/reports/exportProjectReportForm.js @@ -1,12 +1,12 @@ /** * The form for requesting a project report */ -biigle.$viewModel('export-project-report-form', function (element) { - var projectId = biigle.$require('export.projectId'); +biigle.$viewModel('project-report-form', function (element) { + var projectId = biigle.$require('reports.projectId'); new Vue({ el: element, - mixins: [biigle.$require('export.mixins.reportForm')], + mixins: [biigle.$require('reports.mixins.reportForm')], data: { allowedOptions: { 'Annotations': [ @@ -21,7 +21,7 @@ biigle.$viewModel('export-project-report-form', function (element) { }, methods: { submit: function () { - this.request(projectId, biigle.$require('export.api.projectReports')); + this.request(projectId, biigle.$require('reports.api.projectReports')); } }, }); diff --git a/src/resources/assets/js/export/exportVolumeReportForm.js b/src/resources/assets/js/reports/exportVolumeReportForm.js similarity index 71% rename from src/resources/assets/js/export/exportVolumeReportForm.js rename to src/resources/assets/js/reports/exportVolumeReportForm.js index 5dc7ba2fa..7e34020f7 100644 --- a/src/resources/assets/js/export/exportVolumeReportForm.js +++ b/src/resources/assets/js/reports/exportVolumeReportForm.js @@ -1,12 +1,12 @@ /** * The form for requesting a volume report */ -biigle.$viewModel('export-volume-report-form', function (element) { - var volumeId = biigle.$require('export.volumeId'); +biigle.$viewModel('volume-report-form', function (element) { + var volumeId = biigle.$require('reports.volumeId'); new Vue({ el: element, - mixins: [biigle.$require('export.mixins.reportForm')], + mixins: [biigle.$require('reports.mixins.reportForm')], data: { allowedOptions: { 'Annotations': [ @@ -26,7 +26,7 @@ biigle.$viewModel('export-volume-report-form', function (element) { }, methods: { submit: function () { - this.request(volumeId, biigle.$require('export.api.volumeReports')); + this.request(volumeId, biigle.$require('reports.api.volumeReports')); }, }, }); diff --git a/src/resources/assets/js/export/mixins/reportForm.js b/src/resources/assets/js/reports/mixins/reportForm.js similarity index 95% rename from src/resources/assets/js/export/mixins/reportForm.js rename to src/resources/assets/js/reports/mixins/reportForm.js index 9c24281d6..ea77a6ab5 100644 --- a/src/resources/assets/js/export/mixins/reportForm.js +++ b/src/resources/assets/js/reports/mixins/reportForm.js @@ -3,7 +3,7 @@ * * @type {Object} */ -biigle.$component('export.mixins.reportForm', { +biigle.$component('reports.mixins.reportForm', { mixins: [biigle.$require('core.mixins.loader')], data: { variants: { @@ -33,7 +33,7 @@ biigle.$component('export.mixins.reportForm', { computed: { availableReportTypes: function () { var types = {}; - biigle.$require('export.reportTypes').forEach(function (type) { + biigle.$require('reports.reportTypes').forEach(function (type) { types[type.name] = type.id; }); diff --git a/src/resources/views/annotationsScripts.blade.php b/src/resources/views/annotationsScripts.blade.php index e61cc191a..6a038a719 100644 --- a/src/resources/views/annotationsScripts.blade.php +++ b/src/resources/views/annotationsScripts.blade.php @@ -1,4 +1,4 @@ - + diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index 047995ba3..b1a2d9503 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -23,8 +23,8 @@

    Example plot:

    - - + +

    diff --git a/src/resources/views/manualTutorial.blade.php b/src/resources/views/manualTutorial.blade.php index c0f861900..6bbd4e9b3 100644 --- a/src/resources/views/manualTutorial.blade.php +++ b/src/resources/views/manualTutorial.blade.php @@ -1,5 +1,5 @@

    - Reports schema + Reports schema

    diff --git a/src/resources/views/partials/reportTypeInfo.blade.php b/src/resources/views/partials/reportTypeInfo.blade.php index 366373efa..2c5c5793a 100644 --- a/src/resources/views/partials/reportTypeInfo.blade.php +++ b/src/resources/views/partials/reportTypeInfo.blade.php @@ -1,21 +1,21 @@

    - The basic annotation report contains graphical plots of abundances of the different annotation labels (as PDF). See the manual for the report schema. + The basic annotation report contains graphical plots of abundances of the different annotation labels (as PDF). See the manual for the report schema.
    - The extended annotation report lists the abundances of annotation labels for each image (as XLSX). See the manual for the report schema. + The extended annotation report lists the abundances of annotation labels for each image (as XLSX). See the manual for the report schema.
    - The full annotation report lists the labels, shape and coordinates of all annotations (as XLSX). See the manual for the report schema. + The full annotation report lists the labels, shape and coordinates of all annotations (as XLSX). See the manual for the report schema.
    - The CSV annotation report is intended for subsequent processing and lists the annotation labels at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. + The CSV annotation report is intended for subsequent processing and lists the annotation labels at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema.
    - The annotation area report lists all rectangle, circle, ellipse or polygon annotations with their dimensions and area in pixels (as XLSX). If a laser point detection was performed, the dimensions in m and area in m² is included, too. See the manual for the report schema. + The annotation area report lists all rectangle, circle, ellipse or polygon annotations with their dimensions and area in pixels (as XLSX). If a laser point detection was performed, the dimensions in m and area in m² is included, too. See the manual for the report schema.
    - The basic image label report lists the image labels of all images (as XLSX). See the manual for the report schema. + The basic image label report lists the image labels of all images (as XLSX). See the manual for the report schema.
    - The CSV image label report is intended for subsequent processing and lists the image labels at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. + The CSV image label report is intended for subsequent processing and lists the image labels at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema.
    diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index d0a7cb43b..9b3660c90 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -3,10 +3,10 @@ @section('title', "Reports for {$project->name}") @push('scripts') - + @endpush @@ -21,7 +21,7 @@ @endsection @section('content') -
    +

    Request report for {{$project->name}}

    @@ -50,7 +50,7 @@
    - @include('export::partials.reportTypeInfo') + @include('reports::partials.reportTypeInfo')
    diff --git a/src/resources/views/settings/notifications.blade.php b/src/resources/views/settings/notifications.blade.php index 2f5657800..149372399 100644 --- a/src/resources/views/settings/notifications.blade.php +++ b/src/resources/views/settings/notifications.blade.php @@ -27,7 +27,7 @@ el: element, mixins: [biigle.$require('core.mixins.loader')], data: { - settings: '{!! $user->getSettings('report_notifications', config('export.notifications.default_settings')) !!}', + settings: '{!! $user->getSettings('report_notifications', config('reports.notifications.default_settings')) !!}', saved: false, error: false, }, @@ -45,7 +45,7 @@ watch: { settings: function (settings) { this.startLoading(); - this.$http.post('api/v1/users/my/settings/export', { + this.$http.post('api/v1/users/my/settings/reports', { report_notifications: this.settings, }) .then(this.handleSuccess, this.handleError) diff --git a/src/resources/views/volumeReports.blade.php b/src/resources/views/volumeReports.blade.php index 85ef1abb6..3238ee3c0 100644 --- a/src/resources/views/volumeReports.blade.php +++ b/src/resources/views/volumeReports.blade.php @@ -3,10 +3,10 @@ @section('title', "Reports for {$volume->name}") @push('scripts') - + @endpush @@ -21,7 +21,7 @@ @endsection @section('content') -
    +

    Request report for {{$volume->name}}

    @@ -50,7 +50,7 @@
    - @include('export::partials.reportTypeInfo') + @include('reports::partials.reportTypeInfo')
    @if ($annotationSessions->count() > 0) diff --git a/src/resources/views/volumesSidebar.blade.php b/src/resources/views/volumesSidebar.blade.php index 22812273c..f7d039d8b 100644 --- a/src/resources/views/volumesSidebar.blade.php +++ b/src/resources/views/volumesSidebar.blade.php @@ -1 +1 @@ - + diff --git a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php index 53198d901..803d2afa2 100644 --- a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php @@ -1,10 +1,10 @@ json('POST', 'api/v1/users/my/settings/export') + $response = $this->json('POST', 'api/v1/users/my/settings/reports') ->assertStatus(401); $this->beUser(); - $response = $this->post('api/v1/users/my/settings/export') + $response = $this->post('api/v1/users/my/settings/reports') ->assertStatus(200); $this->assertNull($this->user()->fresh()->settings); - $response = $this->post('api/v1/users/my/settings/export', [ + $response = $this->post('api/v1/users/my/settings/reports', [ 'unknown_key' => 'somevalue', ]) ->assertStatus(200); @@ -32,30 +32,30 @@ public function testStoreNotificationSettings() $this->assertNull($this->user()->fresh()->getSettings('report_notifications')); - $response = $this->json('POST', 'api/v1/users/my/settings/export', [ + $response = $this->json('POST', 'api/v1/users/my/settings/reports', [ 'report_notifications' => 'unknown value', ]) ->assertStatus(422); $this->assertNull($this->user()->fresh()->getSettings('report_notifications')); - $response = $this->json('POST', 'api/v1/users/my/settings/export', [ + $response = $this->json('POST', 'api/v1/users/my/settings/reports', [ 'report_notifications' => 'email', ]) ->assertStatus(200); $this->assertEquals('email', $this->user()->fresh()->getSettings('report_notifications')); - $response = $this->json('POST', 'api/v1/users/my/settings/export', [ + $response = $this->json('POST', 'api/v1/users/my/settings/reports', [ 'report_notifications' => 'web', ]) ->assertStatus(200); $this->assertEquals('web', $this->user()->fresh()->getSettings('report_notifications')); - config(['export.notifications.allow_user_settings' => false]); + config(['reports.notifications.allow_user_settings' => false]); - $response = $this->json('POST', 'api/v1/users/my/settings/export', [ + $response = $this->json('POST', 'api/v1/users/my/settings/reports', [ 'report_notifications' => 'email', ]) ->assertStatus(200); diff --git a/tests/Http/Controllers/Views/ProjectsReportControllerTest.php b/tests/Http/Controllers/Views/ProjectsReportControllerTest.php index aa8f66541..3646ff32e 100644 --- a/tests/Http/Controllers/Views/ProjectsReportControllerTest.php +++ b/tests/Http/Controllers/Views/ProjectsReportControllerTest.php @@ -1,6 +1,6 @@ model->id; - $path = config('export.reports_storage'); + $path = config('reports.reports_storage'); $mock = Mockery::mock(ReportGenerator::class); $mock->shouldReceive('generate')->once()->with($this->model->source, "{$path}/{$id}"); diff --git a/tests/Support/Reports/Projects/Annotations/AreaReportGeneratorTest.php b/tests/Support/Reports/Projects/Annotations/AreaReportGeneratorTest.php index f493732a6..a55d91e1b 100644 --- a/tests/Support/Reports/Projects/Annotations/AreaReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/Annotations/AreaReportGeneratorTest.php @@ -1,10 +1,10 @@ [Volume::EXPORT_AREA_ATTRIBUTE => [1, 2, 3, 4]], ]); - $exportVolume = Volume::convert($volume); - $this->assertEquals($volume->id, $exportVolume->id); - $this->assertTrue($exportVolume instanceof Volume); - $this->assertEquals(3, $exportVolume->exportArea[2]); + $reportsVolume = Volume::convert($volume); + $this->assertEquals($volume->id, $reportsVolume->id); + $this->assertTrue($reportsVolume instanceof Volume); + $this->assertEquals(3, $reportsVolume->exportArea[2]); } public function testExportArea() From f292a1d9954e567bdc5bf2c2732af4f0c9cb7c15 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 18 Apr 2018 10:43:48 +0200 Subject: [PATCH 128/407] Recompile JS --- src/public/assets/scripts/annotations.js | 2 +- src/public/assets/scripts/main.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index fe1893a74..ad9bb37b3 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1 @@ -biigle.$declare("export.api.volumes",Vue.resource("/api/v1/volumes{/id}/export-area")),biigle.$require("annotations.components.settingsTabPlugins").exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},exportAreaApi:function(){return biigle.$require("export.api.volumes")},volumeId:function(){return biigle.$require("annotations.volumeId")},messages:function(){return biigle.$require("messages.store")},layer:function(){return new ol.layer.Vector({source:new ol.source.Vector({features:new ol.Collection}),style:[new ol.style.Style({stroke:new ol.style.Stroke({color:"white",width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:"white",width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new ol.interaction.Draw({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(e,t){e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var r=t;return r?r.setCoordinates([e]):r=new ol.geom.Rectangle([e]),r}})},modifyInteraction:function(){return new ol.interaction.Modify({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:ol.events.condition.never})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this,t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.exportAreaApi.delete({id:this.volumeId}).then(function(){e.exportArea=null}).catch(function(i){t.addFeature(r),e.messages.handleErrorResponse(i)})}},updateCurrentImage:function(e,t){this.currentImage=t},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var e=this.currentImage.tiled?0:this.height,t=new ol.geom.Rectangle([[[this.exportArea[0],e-this.exportArea[1]],[this.exportArea[0],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[1]]]]);this.layer.getSource().addFeature(new ol.Feature({geometry:t}))}},handleModifyend:function(e){this.updateExportArea(e.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(e){var t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.updateExportArea(e.feature).catch(function(){t.clear(),r&&t.addFeature(r)})},updateExportArea:function(e){var t=this,r=e.getGeometry().getCoordinates()[0],i=this.currentImage.tiled?0:this.height;r=[r[0][0],i-r[0][1],r[2][0],i-r[2][1]].map(Math.round);var n=this.exportAreaApi.save({id:this.volumeId},{coordinates:r}).then(function(){t.exportArea=r});return n.catch(this.messages.handleErrorResponse),n}},watch:{opacity:function(e,t){e<1?this.settings.set("exportAreaOpacity",e):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(e)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),biigle.$require("events").$on("images.change",this.updateCurrentImage);var e=biigle.$require("annotations.stores.map");e.addLayer(this.layer),this.drawInteraction.setActive(!1),e.addInteraction(this.drawInteraction),this.modifyInteraction.setActive(!1),e.addInteraction(this.modifyInteraction),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend)}}; \ No newline at end of file +biigle.$declare("reports.api.volumes",Vue.resource("/api/v1/volumes{/id}/export-area")),biigle.$require("annotations.components.settingsTabPlugins").exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},exportAreaApi:function(){return biigle.$require("reports.api.volumes")},volumeId:function(){return biigle.$require("annotations.volumeId")},messages:function(){return biigle.$require("messages.store")},layer:function(){return new ol.layer.Vector({source:new ol.source.Vector({features:new ol.Collection}),style:[new ol.style.Style({stroke:new ol.style.Stroke({color:"white",width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:"white",width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new ol.interaction.Draw({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(e,t){e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var r=t;return r?r.setCoordinates([e]):r=new ol.geom.Rectangle([e]),r}})},modifyInteraction:function(){return new ol.interaction.Modify({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:ol.events.condition.never})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this,t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.exportAreaApi.delete({id:this.volumeId}).then(function(){e.exportArea=null}).catch(function(i){t.addFeature(r),e.messages.handleErrorResponse(i)})}},updateCurrentImage:function(e,t){this.currentImage=t},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var e=this.currentImage.tiled?0:this.height,t=new ol.geom.Rectangle([[[this.exportArea[0],e-this.exportArea[1]],[this.exportArea[0],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[1]]]]);this.layer.getSource().addFeature(new ol.Feature({geometry:t}))}},handleModifyend:function(e){this.updateExportArea(e.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(e){var t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.updateExportArea(e.feature).catch(function(){t.clear(),r&&t.addFeature(r)})},updateExportArea:function(e){var t=this,r=e.getGeometry().getCoordinates()[0],i=this.currentImage.tiled?0:this.height;r=[r[0][0],i-r[0][1],r[2][0],i-r[2][1]].map(Math.round);var n=this.exportAreaApi.save({id:this.volumeId},{coordinates:r}).then(function(){t.exportArea=r});return n.catch(this.messages.handleErrorResponse),n}},watch:{opacity:function(e,t){e<1?this.settings.set("exportAreaOpacity",e):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(e)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),biigle.$require("events").$on("images.change",this.updateCurrentImage);var e=biigle.$require("annotations.stores.map");e.addLayer(this.layer),this.drawInteraction.setActive(!1),e.addInteraction(this.drawInteraction),this.modifyInteraction.setActive(!1),e.addInteraction(this.modifyInteraction),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend)}}; \ No newline at end of file diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index 35ed20394..91f27c56c 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -biigle.$viewModel("export-project-report-form",function(e){var t=biigle.$require("export.projectId");new Vue({el:e,mixins:[biigle.$require("export.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees"],ImageLabels:["separate_label_trees"]}},methods:{submit:function(){this.request(t,biigle.$require("export.api.projectReports"))}}})}),biigle.$viewModel("export-volume-report-form",function(e){var t=biigle.$require("export.volumeId");new Vue({el:e,mixins:[biigle.$require("export.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id"],ImageLabels:["separate_label_trees","annotation_session_id"]},options:{annotation_session_id:null}},methods:{submit:function(){this.request(t,biigle.$require("export.api.volumeReports"))}}})}),biigle.$declare("export.api.projectReports",Vue.resource("/api/v1/projects{/id}/reports")),biigle.$declare("export.api.volumeReports",Vue.resource("/api/v1/volumes{/id}/reports")),biigle.$component("export.mixins.reportForm",{mixins:[biigle.$require("core.mixins.loader")],data:{variants:{Annotations:["Basic","Extended","Area","Full","Csv"],ImageLabels:["Basic","Csv"]},allowedOptions:{},selectedType:"Annotations",selectedVariant:"Basic",success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1}},computed:{availableReportTypes:function(){var e={};return biigle.$require("export.reportTypes").forEach(function(t){e[t.name]=t.id}),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},selectedOptions:function(){var e={};return this.allowedOptions[this.selectedType].forEach(function(t){e[t]=this.options[t]},this),e.type_id=this.selectedReportTypeId,e}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:biigle.$require("messages.store").handleErrorResponse(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.selectedType===e&&this.selectedVariant===t}}}); \ No newline at end of file +biigle.$viewModel("project-report-form",function(e){var t=biigle.$require("reports.projectId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees"],ImageLabels:["separate_label_trees"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.projectReports"))}}})}),biigle.$viewModel("volume-report-form",function(e){var t=biigle.$require("reports.volumeId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id"],ImageLabels:["separate_label_trees","annotation_session_id"]},options:{annotation_session_id:null}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.volumeReports"))}}})}),biigle.$declare("reports.api.projectReports",Vue.resource("/api/v1/projects{/id}/reports")),biigle.$declare("reports.api.volumeReports",Vue.resource("/api/v1/volumes{/id}/reports")),biigle.$component("reports.mixins.reportForm",{mixins:[biigle.$require("core.mixins.loader")],data:{variants:{Annotations:["Basic","Extended","Area","Full","Csv"],ImageLabels:["Basic","Csv"]},allowedOptions:{},selectedType:"Annotations",selectedVariant:"Basic",success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1}},computed:{availableReportTypes:function(){var e={};return biigle.$require("reports.reportTypes").forEach(function(t){e[t.name]=t.id}),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},selectedOptions:function(){var e={};return this.allowedOptions[this.selectedType].forEach(function(t){e[t]=this.options[t]},this),e.type_id=this.selectedReportTypeId,e}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:biigle.$require("messages.store").handleErrorResponse(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.selectedType===e&&this.selectedVariant===t}}}); \ No newline at end of file From d51a979a13d0030fa7746828196fb38ea08dd755 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 19 Apr 2018 17:15:53 +0200 Subject: [PATCH 129/407] Update tests for new version of PHPUnit --- tests/ReportTest.php | 2 +- tests/Support/Reports/ReportGeneratorTest.php | 4 ++-- tests/VolumeTest.php | 7 ++++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/tests/ReportTest.php b/tests/ReportTest.php index f2930c387..ecd71fd64 100644 --- a/tests/ReportTest.php +++ b/tests/ReportTest.php @@ -52,7 +52,7 @@ public function testGenerate() public function testGenerateSourceDeleted() { $this->model->source()->delete(); - $this->setExpectedException(\Exception::class); + $this->expectException(\Exception::class); $this->model->fresh()->generate(); } diff --git a/tests/Support/Reports/ReportGeneratorTest.php b/tests/Support/Reports/ReportGeneratorTest.php index 4e794b150..661fa8fb8 100644 --- a/tests/Support/Reports/ReportGeneratorTest.php +++ b/tests/Support/Reports/ReportGeneratorTest.php @@ -45,13 +45,13 @@ public function testHandleException() File::shouldReceive('exists')->with('somepath')->andReturn(true); File::shouldReceive('delete')->with('somepath')->once(); - $this->setExpectedException(Exception::class); + $this->expectException(Exception::class); with(new GeneratorStub(['throw' => true]))->generate(VolumeTest::make(), 'somepath'); } public function testHandleSourceEmpty() { - $this->setExpectedException(Exception::class); + $this->expectException(Exception::class); with(new GeneratorStub)->generate(null, 'somepath'); } diff --git a/tests/VolumeTest.php b/tests/VolumeTest.php index 7fac4e58e..de7ffa9df 100644 --- a/tests/VolumeTest.php +++ b/tests/VolumeTest.php @@ -3,6 +3,7 @@ namespace Biigle\Tests\Modules\Reports; use TestCase; +use Exception; use Biigle\Modules\Reports\Volume; use Biigle\Tests\VolumeTest as BaseVolumeTest; @@ -48,21 +49,21 @@ public function testExportAreaNotThere() public function testExportAreaTooShort() { $volume = static::create(); - $this->setExpectedException('Exception'); + $this->expectException(Exception::class); $volume->exportArea = [10]; } public function testExportInvalidType() { $volume = static::create(); - $this->setExpectedException('Exception'); + $this->expectException(Exception::class); $volume->exportArea = 'abc'; } public function testExportAreaNoInteger() { $volume = static::create(); - $this->setExpectedException('Exception'); + $this->expectException(Exception::class); $volume->exportArea = ['10', 20, 30, 40]; } } From 6ccd9da26437cc1e3fff1642aff842c2c7244ea7 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 20 Apr 2018 10:21:13 +0200 Subject: [PATCH 130/407] Implement package auto-discoverability by Laravel 5.5 --- README.md | 9 ++++----- composer.json | 9 +++++++-- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e5b32b189..c75878c41 100644 --- a/README.md +++ b/README.md @@ -11,8 +11,7 @@ Add the following to the repositories array of your `composer.json`: ``` 1. Run `php composer.phar require biigle/reports`. -2. Add `'Biigle\Modules\Reports\ReportsServiceProvider'` to the `providers` array in `config/app.php`. -3. Run `php artisan reports:publish` to refresh the public assets of this package. Do this for every update of the package. -4. Run `pip install -r vendor/biigle/reports/requirements.txt` to install python requirements. -5. Create a `storage/reports` directory that is read/writable for the web application. The location can be configured via the `reports.reports_storage` key. -6. Make sure the `reports.tmp_storage` directory is read/writable for the web application (default is `sys_get_temp_dir()`). +2. Run `php artisan vendor:publish --tag=public` to refresh the public assets of this package. Do this for every update of the package. +3. Run `pip install -r vendor/biigle/reports/requirements.txt` to install python requirements. +4. Create a `storage/reports` directory that is read/writable for the web application. The location can be configured via the `reports.reports_storage` key. +5. Make sure the `reports.tmp_storage` directory is read/writable for the web application (default is `sys_get_temp_dir()`). diff --git a/composer.json b/composer.json index 66eef8b2c..971fd89ea 100644 --- a/composer.json +++ b/composer.json @@ -4,12 +4,17 @@ "ext-zip": "*", "biigle/projects": "~1.4" }, - "require-dev": { - }, "autoload": { "psr-4": { "Biigle\\Modules\\Reports\\": "src" } + }, + "extra": { + "laravel": { + "providers": [ + "Biigle\\Modules\\Reports\\ReportsServiceProvider" + ] + } } } From d86acf446fa5b0ef828d2869ed353e1a4be5f955 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 20 Apr 2018 10:45:10 +0200 Subject: [PATCH 131/407] Revert "Implement package auto-discoverability by Laravel 5.5" This reverts commit 6ccd9da26437cc1e3fff1642aff842c2c7244ea7. --- README.md | 9 +++++---- composer.json | 9 ++------- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index c75878c41..e5b32b189 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,8 @@ Add the following to the repositories array of your `composer.json`: ``` 1. Run `php composer.phar require biigle/reports`. -2. Run `php artisan vendor:publish --tag=public` to refresh the public assets of this package. Do this for every update of the package. -3. Run `pip install -r vendor/biigle/reports/requirements.txt` to install python requirements. -4. Create a `storage/reports` directory that is read/writable for the web application. The location can be configured via the `reports.reports_storage` key. -5. Make sure the `reports.tmp_storage` directory is read/writable for the web application (default is `sys_get_temp_dir()`). +2. Add `'Biigle\Modules\Reports\ReportsServiceProvider'` to the `providers` array in `config/app.php`. +3. Run `php artisan reports:publish` to refresh the public assets of this package. Do this for every update of the package. +4. Run `pip install -r vendor/biigle/reports/requirements.txt` to install python requirements. +5. Create a `storage/reports` directory that is read/writable for the web application. The location can be configured via the `reports.reports_storage` key. +6. Make sure the `reports.tmp_storage` directory is read/writable for the web application (default is `sys_get_temp_dir()`). diff --git a/composer.json b/composer.json index 971fd89ea..66eef8b2c 100644 --- a/composer.json +++ b/composer.json @@ -4,17 +4,12 @@ "ext-zip": "*", "biigle/projects": "~1.4" }, + "require-dev": { + }, "autoload": { "psr-4": { "Biigle\\Modules\\Reports\\": "src" } - }, - "extra": { - "laravel": { - "providers": [ - "Biigle\\Modules\\Reports\\ReportsServiceProvider" - ] - } } } From 6a67ab83087e67ad3667e0f36eb2954bfdf57d9b Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 20 Apr 2018 12:27:50 +0200 Subject: [PATCH 132/407] Use new way of throwing validation exceptions --- src/Http/Controllers/Api/Volumes/ExportAreaController.php | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Http/Controllers/Api/Volumes/ExportAreaController.php b/src/Http/Controllers/Api/Volumes/ExportAreaController.php index 29f713d52..2fdbfe148 100644 --- a/src/Http/Controllers/Api/Volumes/ExportAreaController.php +++ b/src/Http/Controllers/Api/Volumes/ExportAreaController.php @@ -4,9 +4,10 @@ use Exception; use Illuminate\Http\Request; -use Biigle\Modules\Reports\Volume; use Biigle\Volume as BaseVolume; +use Biigle\Modules\Reports\Volume; use Biigle\Http\Controllers\Api\Controller; +use Illuminate\Validation\ValidationException; class ExportAreaController extends Controller { @@ -60,9 +61,7 @@ public function store(Request $request, $id) $volume->exportArea = $request->input('coordinates'); $volume->save(); } catch (Exception $e) { - return $this->buildFailedValidationResponse($request, [ - 'coordinates' => $e->getMessage(), - ]); + throw ValidationException::withMessages(['coordinates' => $e->getMessage()]); } } From bf1d911c78ae37d64a98d6a4ba27cd8c6d492679 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 27 Apr 2018 11:20:28 +0200 Subject: [PATCH 133/407] Fix basic report if label names contain non utf-8 characters Resolves #50 --- src/resources/scripts/basic_report.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/resources/scripts/basic_report.py b/src/resources/scripts/basic_report.py index 8959b637b..8b5b79acd 100755 --- a/src/resources/scripts/basic_report.py +++ b/src/resources/scripts/basic_report.py @@ -56,7 +56,8 @@ def TitleSlide(text): ax.bar(ind, counts, width, color=np.core.defchararray.add(hashes, rows[:, 1]), log=counts.max() > 100) ax.set_xticks(ind + width / 2) - ax.set_xticklabels(rows[:, 0], rotation=45, fontsize=8, ha = 'right') + labels = [label.decode('UTF-8') for label in rows[:, 0]] + ax.set_xticklabels(labels, rotation=45, fontsize=8, ha = 'right') if plot_title: plt.title(plot_title[0].decode('UTF-8')) plt.xlim([0, ind.size]) From 3d31683ce6ebbb9c0637ab92d32e6d2a748d0e49 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 27 Apr 2018 16:31:53 +0200 Subject: [PATCH 134/407] Update repository URL --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e5b32b189..756bced38 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Add the following to the repositories array of your `composer.json`: ``` { "type": "vcs", - "url": "https://github.com/BiodataMiningGroup/biigle-reports.git" + "url": "https://github.com/biigle/reports.git" } ``` From 66d8ec131883d58aacce3f76f40cc9ef17aee878 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 30 Jul 2018 10:40:58 +0200 Subject: [PATCH 135/407] Updates for FontAwesome 5.2 --- .../views/annotationsManualSidebarSettings.blade.php | 2 +- src/resources/views/annotationsSettingsTab.blade.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/resources/views/annotationsManualSidebarSettings.blade.php b/src/resources/views/annotationsManualSidebarSettings.blade.php index de574fc88..b6a720143 100644 --- a/src/resources/views/annotationsManualSidebarSettings.blade.php +++ b/src/resources/views/annotationsManualSidebarSettings.blade.php @@ -1,5 +1,5 @@

    Export Area

    - The export area can be used to restrict generated reports to a specific area of the images of a volume. Click edit to draw or edit the export area. The area can be drawn similar to a rectangle annotation and will be permanently displayed on all images of the volume. If a report is set to be restricted to the export area, only annotations inside this area will be considered. Delete the export area with the delete button. Set the export area opacity to 0 to hide it. + The export area can be used to restrict generated reports to a specific area of the images of a volume. Click edit to draw or edit the export area. The area can be drawn similar to a rectangle annotation and will be permanently displayed on all images of the volume. If a report is set to be restricted to the export area, only annotations inside this area will be considered. Delete the export area with the delete button. Set the export area opacity to 0 to hide it.

    diff --git a/src/resources/views/annotationsSettingsTab.blade.php b/src/resources/views/annotationsSettingsTab.blade.php index cb7bba1e8..955eb3eaa 100644 --- a/src/resources/views/annotationsSettingsTab.blade.php +++ b/src/resources/views/annotationsSettingsTab.blade.php @@ -5,8 +5,8 @@
    @can('update', $volume) - - + + @endcan
    From 3449f32ad8a4f105510eed6c00c2b8dda61e4e1c Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 30 Jul 2018 16:07:28 +0200 Subject: [PATCH 136/407] Replace Glyphicons with Font Awesome References biigle/core#87 --- src/resources/views/notificationTabs.blade.php | 2 +- src/resources/views/projectsShowToolbar.blade.php | 2 +- src/resources/views/settings/notifications.blade.php | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/resources/views/notificationTabs.blade.php b/src/resources/views/notificationTabs.blade.php index ee28b27e3..df735d748 100644 --- a/src/resources/views/notificationTabs.blade.php +++ b/src/resources/views/notificationTabs.blade.php @@ -1,3 +1,3 @@
  • - Reports + Reports
  • diff --git a/src/resources/views/projectsShowToolbar.blade.php b/src/resources/views/projectsShowToolbar.blade.php index a11169bbc..c46bf2a3a 100644 --- a/src/resources/views/projectsShowToolbar.blade.php +++ b/src/resources/views/projectsShowToolbar.blade.php @@ -1,3 +1,3 @@ - Request reports + Request reports diff --git a/src/resources/views/settings/notifications.blade.php b/src/resources/views/settings/notifications.blade.php index 149372399..ddcda6a5d 100644 --- a/src/resources/views/settings/notifications.blade.php +++ b/src/resources/views/settings/notifications.blade.php @@ -13,8 +13,8 @@ - - + +
    From 38f14e75753955d06a154124ca088056e14d6169 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 22 Aug 2018 14:36:42 +0200 Subject: [PATCH 137/407] Use new global admin sudo ability --- src/Policies/ReportPolicy.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Policies/ReportPolicy.php b/src/Policies/ReportPolicy.php index 6a1ef6755..a1bd8126b 100644 --- a/src/Policies/ReportPolicy.php +++ b/src/Policies/ReportPolicy.php @@ -8,8 +8,6 @@ class ReportPolicy { - const TABLE = 'reports'; - use HandlesAuthorization; /** @@ -21,7 +19,7 @@ class ReportPolicy */ public function before($user, $ability) { - if ($user->isAdmin) { + if ($user->can('sudo')) { return true; } } From a49e366a8e3b13cdb6a31a272ab062e1c59aace0 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 24 Aug 2018 14:20:04 +0200 Subject: [PATCH 138/407] Remove use of Guard contract in controllers --- src/Http/Controllers/Api/ReportController.php | 6 ++---- src/Http/Controllers/Api/ReportsController.php | 1 - src/Http/Controllers/Api/SettingsController.php | 6 ++---- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/Http/Controllers/Api/ReportController.php b/src/Http/Controllers/Api/ReportController.php index 41dac91c4..ecbef6b71 100644 --- a/src/Http/Controllers/Api/ReportController.php +++ b/src/Http/Controllers/Api/ReportController.php @@ -4,7 +4,6 @@ use Illuminate\Http\Request; use Biigle\Modules\Reports\Report; -use Illuminate\Contracts\Auth\Guard; use Biigle\Modules\Reports\ReportType; use Biigle\Http\Controllers\Api\Controller; use Biigle\Modules\Reports\Jobs\GenerateReportJob; @@ -22,12 +21,11 @@ abstract class ReportController extends Controller * Generate a report. * * @param Request $request - * @param Guard $auth * @param int $id Source ID * * @return \Illuminate\Http\Response */ - public function store(Request $request, Guard $auth, $id) + public function store(Request $request, $id) { $this->source = $this->getSource($id); $this->authorize('access', $this->source); @@ -36,7 +34,7 @@ public function store(Request $request, Guard $auth, $id) $report = new Report; $report->source()->associate($this->source); $report->type_id = $request->input('type_id'); - $report->user()->associate($auth->user()); + $report->user()->associate($request->user()); $report->options = $this->getOptions($request); $report->save(); diff --git a/src/Http/Controllers/Api/ReportsController.php b/src/Http/Controllers/Api/ReportsController.php index 73b59d343..257b0ded4 100644 --- a/src/Http/Controllers/Api/ReportsController.php +++ b/src/Http/Controllers/Api/ReportsController.php @@ -4,7 +4,6 @@ use Response; use Biigle\Modules\Reports\Report; -use Illuminate\Contracts\Auth\Guard; use Biigle\Http\Controllers\Api\Controller; class ReportsController extends Controller diff --git a/src/Http/Controllers/Api/SettingsController.php b/src/Http/Controllers/Api/SettingsController.php index 9ac120b15..87f300bbf 100644 --- a/src/Http/Controllers/Api/SettingsController.php +++ b/src/Http/Controllers/Api/SettingsController.php @@ -4,7 +4,6 @@ use Biigle\User; use Illuminate\Http\Request; -use Illuminate\Contracts\Auth\Guard; use Biigle\Http\Controllers\Api\Controller; class SettingsController extends Controller @@ -31,17 +30,16 @@ class SettingsController extends Controller * @apiParam (Optional arguments) {String} report_notifications Set to `'email'` or `'web'` to receive notifications for finished reports either via email or the BIIGLE notification center. * * @param Request $request - * @param Guard $auth * @param int $id Volume ID * @return \Illuminate\Http\Response */ - public function store(Request $request, Guard $auth) + public function store(Request $request) { $this->validate($request, self::VALIDATION_RULES); $settings = $request->only(array_keys(self::VALIDATION_RULES)); if (config('reports.notifications.allow_user_settings') === false) { unset($settings['report_notifications']); } - $auth->user()->setSettings($settings); + $request->user()->setSettings($settings); } } From 212bd651725d05e74c410b4b0d15ca1b0283f7f9 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 24 Aug 2018 14:37:57 +0200 Subject: [PATCH 139/407] Apply CS fixes --- src/Http/Controllers/Api/AvailableReportController.php | 1 + src/Http/Controllers/Api/ReportController.php | 1 - src/Http/Controllers/Api/SettingsController.php | 2 +- src/Http/routes.php | 2 +- src/Jobs/GenerateReportJob.php | 1 - src/Report.php | 7 +++---- src/Support/Reports/Projects/ProjectReportGenerator.php | 2 -- src/Support/Reports/ReportGenerator.php | 4 ++-- src/Support/Reports/Volumes/VolumeReportGenerator.php | 2 -- .../2018_01_08_093041_add_reports_ready_at_column.php | 2 +- tests/Policies/ReportPolicyTest.php | 1 - .../Projects/Annotations/AreaReportGeneratorTest.php | 1 - .../Projects/Annotations/BasicReportGeneratorTest.php | 1 - .../Projects/Annotations/CsvReportGeneratorTest.php | 1 - .../Projects/Annotations/ExtendedReportGeneratorTest.php | 1 - .../Projects/Annotations/FullReportGeneratorTest.php | 1 - .../Reports/Projects/ImageLabels/BasicReportTest.php | 1 - ...oduleSupportReportsProjectsImageLabelsCsvReportTest.php | 1 - tests/Support/Reports/ReportGeneratorTest.php | 1 - .../Support/Reports/Volumes/VolumeReportGeneratorTest.php | 4 ---- 20 files changed, 9 insertions(+), 28 deletions(-) diff --git a/src/Http/Controllers/Api/AvailableReportController.php b/src/Http/Controllers/Api/AvailableReportController.php index e7ba379b1..0fee3c048 100644 --- a/src/Http/Controllers/Api/AvailableReportController.php +++ b/src/Http/Controllers/Api/AvailableReportController.php @@ -28,6 +28,7 @@ class AvailableReportController extends Controller public function show($uid, $filename) { $report = AvailableReport::findOrFail($uid); + return response() ->download($report->path, $filename) ->deleteFileAfterSend(true); diff --git a/src/Http/Controllers/Api/ReportController.php b/src/Http/Controllers/Api/ReportController.php index ecbef6b71..54e004f73 100644 --- a/src/Http/Controllers/Api/ReportController.php +++ b/src/Http/Controllers/Api/ReportController.php @@ -4,7 +4,6 @@ use Illuminate\Http\Request; use Biigle\Modules\Reports\Report; -use Biigle\Modules\Reports\ReportType; use Biigle\Http\Controllers\Api\Controller; use Biigle\Modules\Reports\Jobs\GenerateReportJob; diff --git a/src/Http/Controllers/Api/SettingsController.php b/src/Http/Controllers/Api/SettingsController.php index 87f300bbf..4dfffa924 100644 --- a/src/Http/Controllers/Api/SettingsController.php +++ b/src/Http/Controllers/Api/SettingsController.php @@ -20,7 +20,7 @@ class SettingsController extends Controller ]; /** - * Update the user settings for reports + * Update the user settings for reports. * * @api {post} users/my/settings/reports Update the user settings for reports * @apiGroup Users diff --git a/src/Http/routes.php b/src/Http/routes.php index 90877966e..e8af4e827 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -60,7 +60,7 @@ ]); }); -/** +/* * @deprecated Will be deleted after a grace period that still allows downloading of old * reports. * diff --git a/src/Jobs/GenerateReportJob.php b/src/Jobs/GenerateReportJob.php index 74d39150e..74821b45c 100644 --- a/src/Jobs/GenerateReportJob.php +++ b/src/Jobs/GenerateReportJob.php @@ -44,7 +44,6 @@ public function __construct(Report $report) */ public function handle() { - try { $memoryLimit = ini_get('memory_limit'); // increase memory limit for generating large reports diff --git a/src/Report.php b/src/Report.php index 57f536fb3..5b5a81573 100644 --- a/src/Report.php +++ b/src/Report.php @@ -3,7 +3,6 @@ namespace Biigle\Modules\Reports; use File; -use Exception; use ReflectionClass; use Illuminate\Database\Eloquent\Model; use Biigle\Modules\Reports\Support\Reports\ReportGenerator; @@ -41,7 +40,7 @@ public function user() } /** - * Type of the report + * Type of the report. * * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ @@ -51,7 +50,7 @@ public function type() } /** - * Source of the report (\Biigle\Volume or \Biigle\Project) + * Source of the report (\Biigle\Volume or \Biigle\Project). * * @return \Illuminate\Database\Eloquent\Relations\MorphTo */ @@ -85,7 +84,7 @@ public function setReportGenerator(ReportGenerator $generator) } /** - * Get the report generator for this report; + * Get the report generator for this report;. * * @return ReportGenerator */ diff --git a/src/Support/Reports/Projects/ProjectReportGenerator.php b/src/Support/Reports/Projects/ProjectReportGenerator.php index 874a8587b..c5bc3574d 100644 --- a/src/Support/Reports/Projects/ProjectReportGenerator.php +++ b/src/Support/Reports/Projects/ProjectReportGenerator.php @@ -2,8 +2,6 @@ namespace Biigle\Modules\Reports\Support\Reports\Projects; -use App; -use Exception; use Biigle\Volume; use Biigle\Project; use Biigle\Modules\Reports\Support\File; diff --git a/src/Support/Reports/ReportGenerator.php b/src/Support/Reports/ReportGenerator.php index d38ff944e..f637808bf 100644 --- a/src/Support/Reports/ReportGenerator.php +++ b/src/Support/Reports/ReportGenerator.php @@ -18,7 +18,7 @@ class ReportGenerator public $options; /** - * Source this report belongs to (e.g. a volume) + * Source this report belongs to (e.g. a volume). * * @var mixed */ @@ -80,7 +80,7 @@ public static function get($sourceClass, ReportType $type, $options = []) } } - return null; + return; } /** diff --git a/src/Support/Reports/Volumes/VolumeReportGenerator.php b/src/Support/Reports/Volumes/VolumeReportGenerator.php index 6c7c867cb..f116392d1 100644 --- a/src/Support/Reports/Volumes/VolumeReportGenerator.php +++ b/src/Support/Reports/Volumes/VolumeReportGenerator.php @@ -2,12 +2,10 @@ namespace Biigle\Modules\Reports\Support\Reports\Volumes; -use App; use File; use Exception; use Biigle\Label; use Biigle\Volume; -use Biigle\Modules\Reports\Support\Exec; use Biigle\Modules\Reports\Support\Reports\ReportGenerator; class VolumeReportGenerator extends ReportGenerator diff --git a/src/database/migrations/2018_01_08_093041_add_reports_ready_at_column.php b/src/database/migrations/2018_01_08_093041_add_reports_ready_at_column.php index dcc2459e4..97185e019 100644 --- a/src/database/migrations/2018_01_08_093041_add_reports_ready_at_column.php +++ b/src/database/migrations/2018_01_08_093041_add_reports_ready_at_column.php @@ -20,7 +20,7 @@ public function up() // Set ready_at of existing reports to equal updated_at. DB::table('reports') ->whereNull('ready_at') - ->update(['ready_at' => DB::raw("updated_at")]); + ->update(['ready_at' => DB::raw('updated_at')]); } /** diff --git a/tests/Policies/ReportPolicyTest.php b/tests/Policies/ReportPolicyTest.php index b86a044d2..01fdbd125 100644 --- a/tests/Policies/ReportPolicyTest.php +++ b/tests/Policies/ReportPolicyTest.php @@ -4,7 +4,6 @@ use TestCase; use Biigle\Tests\UserTest; -use Biigle\Modules\Reports\Report; use Biigle\Tests\Modules\Reports\ReportTest; class ReportPolicyTest extends TestCase diff --git a/tests/Support/Reports/Projects/Annotations/AreaReportGeneratorTest.php b/tests/Support/Reports/Projects/Annotations/AreaReportGeneratorTest.php index a55d91e1b..d51f2a372 100644 --- a/tests/Support/Reports/Projects/Annotations/AreaReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/Annotations/AreaReportGeneratorTest.php @@ -3,7 +3,6 @@ namespace Biigle\Tests\Modules\Reports\Support\Reports\Projects\Annotations; use TestCase; -use Biigle\Tests\ProjectTest; use Biigle\Modules\Reports\Support\Reports\Projects\Annotations\AreaReportGenerator; class AreaReportGeneratorTest extends TestCase diff --git a/tests/Support/Reports/Projects/Annotations/BasicReportGeneratorTest.php b/tests/Support/Reports/Projects/Annotations/BasicReportGeneratorTest.php index 76dfc4b19..92536ba72 100644 --- a/tests/Support/Reports/Projects/Annotations/BasicReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/Annotations/BasicReportGeneratorTest.php @@ -3,7 +3,6 @@ namespace Biigle\Tests\Modules\Reports\Support\Reports\Projects\Annotations; use TestCase; -use Biigle\Tests\ProjectTest; use Biigle\Modules\Reports\Support\Reports\Projects\Annotations\BasicReportGenerator; class BasicReportGeneratorTest extends TestCase diff --git a/tests/Support/Reports/Projects/Annotations/CsvReportGeneratorTest.php b/tests/Support/Reports/Projects/Annotations/CsvReportGeneratorTest.php index b2a0774d9..3664475c6 100644 --- a/tests/Support/Reports/Projects/Annotations/CsvReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/Annotations/CsvReportGeneratorTest.php @@ -3,7 +3,6 @@ namespace Biigle\Tests\Modules\Reports\Support\Reports\Projects\Annotations; use TestCase; -use Biigle\Tests\ProjectTest; use Biigle\Modules\Reports\Support\Reports\Projects\Annotations\CsvReportGenerator; class CsvReportGeneratorTest extends TestCase diff --git a/tests/Support/Reports/Projects/Annotations/ExtendedReportGeneratorTest.php b/tests/Support/Reports/Projects/Annotations/ExtendedReportGeneratorTest.php index d62cbbfbc..3bad62f4a 100644 --- a/tests/Support/Reports/Projects/Annotations/ExtendedReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/Annotations/ExtendedReportGeneratorTest.php @@ -3,7 +3,6 @@ namespace Biigle\Tests\Modules\Reports\Support\Reports\Projects\Annotations; use TestCase; -use Biigle\Tests\ProjectTest; use Biigle\Modules\Reports\Support\Reports\Projects\Annotations\ExtendedReportGenerator; class ExtendedReportGeneratorTest extends TestCase diff --git a/tests/Support/Reports/Projects/Annotations/FullReportGeneratorTest.php b/tests/Support/Reports/Projects/Annotations/FullReportGeneratorTest.php index 0c9d7949d..92f3bebab 100644 --- a/tests/Support/Reports/Projects/Annotations/FullReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/Annotations/FullReportGeneratorTest.php @@ -3,7 +3,6 @@ namespace Biigle\Tests\Modules\Reports\Support\Reports\Projects\Annotations; use TestCase; -use Biigle\Tests\ProjectTest; use Biigle\Modules\Reports\Support\Reports\Projects\Annotations\FullReportGenerator; class FullReportGeneratorTest extends TestCase diff --git a/tests/Support/Reports/Projects/ImageLabels/BasicReportTest.php b/tests/Support/Reports/Projects/ImageLabels/BasicReportTest.php index cf25e4a9d..b7f8ebb3e 100644 --- a/tests/Support/Reports/Projects/ImageLabels/BasicReportTest.php +++ b/tests/Support/Reports/Projects/ImageLabels/BasicReportTest.php @@ -3,7 +3,6 @@ namespace Biigle\Tests\Modules\Reports\Support\Reports\Projects\ImageLabels; use TestCase; -use Biigle\Tests\ProjectTest; use Biigle\Modules\Reports\Support\Reports\Projects\ImageLabels\BasicReportGenerator; class BasicReportGeneratorTest extends TestCase diff --git a/tests/Support/Reports/Projects/ImageLabels/ExportModuleSupportReportsProjectsImageLabelsCsvReportTest.php b/tests/Support/Reports/Projects/ImageLabels/ExportModuleSupportReportsProjectsImageLabelsCsvReportTest.php index 7cb99a053..23a229a27 100644 --- a/tests/Support/Reports/Projects/ImageLabels/ExportModuleSupportReportsProjectsImageLabelsCsvReportTest.php +++ b/tests/Support/Reports/Projects/ImageLabels/ExportModuleSupportReportsProjectsImageLabelsCsvReportTest.php @@ -3,7 +3,6 @@ namespace Biigle\Tests\Modules\Reports\Support\Reports\Projects\ImageLabels; use TestCase; -use Biigle\Tests\ProjectTest; use Biigle\Modules\Reports\Support\Reports\Projects\ImageLabels\CsvReportGenerator; class CsvReportGeneratorTest extends TestCase diff --git a/tests/Support/Reports/ReportGeneratorTest.php b/tests/Support/Reports/ReportGeneratorTest.php index 661fa8fb8..fb35b6e30 100644 --- a/tests/Support/Reports/ReportGeneratorTest.php +++ b/tests/Support/Reports/ReportGeneratorTest.php @@ -9,7 +9,6 @@ use Biigle\Volume; use Biigle\Tests\LabelTest; use Biigle\Tests\VolumeTest; -use Biigle\Tests\ProjectTest; use Biigle\Modules\Reports\ReportType; use Biigle\Modules\Reports\Support\Reports\ReportGenerator; use Biigle\Modules\Reports\Support\Reports\Volumes\Annotations\BasicReportGenerator; diff --git a/tests/Support/Reports/Volumes/VolumeReportGeneratorTest.php b/tests/Support/Reports/Volumes/VolumeReportGeneratorTest.php index 1388c219f..b153affc5 100644 --- a/tests/Support/Reports/Volumes/VolumeReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/VolumeReportGeneratorTest.php @@ -2,14 +2,10 @@ namespace Biigle\Tests\Modules\Reports\Support\Reports\Volumes; -use App; -use File; -use Mockery; use TestCase; use Biigle\Tests\LabelTest; use Biigle\Tests\VolumeTest; use Biigle\Tests\ProjectTest; -use Biigle\Modules\Reports\Support\Exec; use Biigle\Modules\Reports\Support\Reports\Volumes\VolumeReportGenerator; class VolumeReportGeneratorTest extends TestCase From 26df2a11b6948d7bcfafa4771d3369302cef24eb Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 24 Aug 2018 14:52:15 +0200 Subject: [PATCH 140/407] Apply further CS fixes --- .../Reports/Volumes/Annotations/AnnotationReportGenerator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Support/Reports/Volumes/Annotations/AnnotationReportGenerator.php b/src/Support/Reports/Volumes/Annotations/AnnotationReportGenerator.php index 89c99a308..620e15313 100644 --- a/src/Support/Reports/Volumes/Annotations/AnnotationReportGenerator.php +++ b/src/Support/Reports/Volumes/Annotations/AnnotationReportGenerator.php @@ -188,7 +188,7 @@ protected function getSkipIds() $points[$y] <= $exportArea[3]) { // As long as one point of the annotation is inside the // area, don't skip it. - continue 2; + continue 2; } } From e7b1f5c4a7eaaf1f5687f66659759b9fa7690f6a Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 10 Sep 2018 16:25:39 +0200 Subject: [PATCH 141/407] Remove storeRules property from Volume model --- .../Controllers/Api/Volumes/ExportAreaController.php | 2 +- src/Volume.php | 9 --------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/src/Http/Controllers/Api/Volumes/ExportAreaController.php b/src/Http/Controllers/Api/Volumes/ExportAreaController.php index 2fdbfe148..9663e8c9f 100644 --- a/src/Http/Controllers/Api/Volumes/ExportAreaController.php +++ b/src/Http/Controllers/Api/Volumes/ExportAreaController.php @@ -53,7 +53,7 @@ public function store(Request $request, $id) { $volume = BaseVolume::findOrFail($id); $this->authorize('update', $volume); - $this->validate($request, Volume::$storeRules); + $this->validate($request, ['coordinates' => 'required|array']); $volume = Volume::convert($volume); diff --git a/src/Volume.php b/src/Volume.php index 17a4eb2ba..9127a1c09 100644 --- a/src/Volume.php +++ b/src/Volume.php @@ -17,15 +17,6 @@ class Volume extends BaseVolume */ const EXPORT_AREA_ATTRIBUTE = 'export_area'; - /** - * Validation rules for setting the export area. - * - * @var array - */ - public static $storeRules = [ - 'coordinates' => 'required|array', - ]; - /** * Converts a regular Biigle volume to an export volume. * From 479c891f5590b467c7c9bc2c2789fcedabc3a787 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 17 Sep 2018 13:22:49 +0200 Subject: [PATCH 142/407] Return 404 from settings endpoint is user settings are disabled --- .../Controllers/Api/SettingsController.php | 20 +++++-------------- .../Controllers/SettingsControllerTest.php | 2 +- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/src/Http/Controllers/Api/SettingsController.php b/src/Http/Controllers/Api/SettingsController.php index 4dfffa924..d574dafa9 100644 --- a/src/Http/Controllers/Api/SettingsController.php +++ b/src/Http/Controllers/Api/SettingsController.php @@ -8,17 +8,6 @@ class SettingsController extends Controller { - /** - * Validation rules for the settings handled by this controller. - * - * Only setting keys that are present in this array will be accepted. - * - * @var array - */ - const VALIDATION_RULES = [ - 'report_notifications' => 'filled|in:email,web', - ]; - /** * Update the user settings for reports. * @@ -30,16 +19,17 @@ class SettingsController extends Controller * @apiParam (Optional arguments) {String} report_notifications Set to `'email'` or `'web'` to receive notifications for finished reports either via email or the BIIGLE notification center. * * @param Request $request - * @param int $id Volume ID * @return \Illuminate\Http\Response */ public function store(Request $request) { - $this->validate($request, self::VALIDATION_RULES); - $settings = $request->only(array_keys(self::VALIDATION_RULES)); if (config('reports.notifications.allow_user_settings') === false) { - unset($settings['report_notifications']); + abort(404); } + $this->validate($request, [ + 'report_notifications' => 'filled|in:email,web', + ]); + $settings = $request->only(['report_notifications']); $request->user()->setSettings($settings); } } diff --git a/tests/Http/Controllers/SettingsControllerTest.php b/tests/Http/Controllers/SettingsControllerTest.php index bb8d8b994..321ef7b50 100644 --- a/tests/Http/Controllers/SettingsControllerTest.php +++ b/tests/Http/Controllers/SettingsControllerTest.php @@ -58,7 +58,7 @@ public function testStoreNotificationSettings() $response = $this->json('POST', 'api/v1/users/my/settings/reports', [ 'report_notifications' => 'email', ]) - ->assertStatus(200); + ->assertStatus(404); $this->assertEquals('web', $this->user()->fresh()->getSettings('report_notifications')); } From 771964dd50efb6a7b9ad9120e1d40b3ab6c68158 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 18 Sep 2018 13:22:58 +0200 Subject: [PATCH 143/407] Remove old endpoint to download reports This reverts commit a0e5d33eac718173e8713b751b8a5b39e704f9e7 Resolves #32 --- src/AvailableReport.php | 88 ------------------- .../Api/AvailableReportController.php | 36 -------- src/Http/routes.php | 11 --- 3 files changed, 135 deletions(-) delete mode 100644 src/AvailableReport.php delete mode 100644 src/Http/Controllers/Api/AvailableReportController.php diff --git a/src/AvailableReport.php b/src/AvailableReport.php deleted file mode 100644 index 227ec34df..000000000 --- a/src/AvailableReport.php +++ /dev/null @@ -1,88 +0,0 @@ -exists()) { - throw (new ModelNotFoundException)->setModel(static::class); - } - - return $report; - } - - /** - * Create a new report object. - * - * @param string $basename Optional basename of an existing report file. If not specified, a new one will be generated. - */ - public function __construct($basename = null) - { - if ($basename) { - $this->path = config('reports.reports_storage').'/'.$basename; - } else { - do { - // use str_random to generate a cryptographically secure random string - // because it will be used to retrieve the file via a public url - $path = config('reports.reports_storage').'/'.str_random(); - } while (File::exists($path)); - - $this->path = $path; - } - } - - /** - * Return the basename of the file of this report. - * - * @return string - */ - public function basename() - { - return File::basename($this->path); - } - - /** - * Return the dirname of the file of this report. - * - * @return string - */ - public function dirname() - { - return File::dirname($this->path); - } - - /** - * Delete the report file. - */ - public function delete() - { - return File::delete($this->path); - } - - /** - * Check if the report exists. - * - * @return bool - */ - public function exists() - { - return File::exists($this->path); - } -} diff --git a/src/Http/Controllers/Api/AvailableReportController.php b/src/Http/Controllers/Api/AvailableReportController.php deleted file mode 100644 index 0fee3c048..000000000 --- a/src/Http/Controllers/Api/AvailableReportController.php +++ /dev/null @@ -1,36 +0,0 @@ -download($report->path, $filename) - ->deleteFileAfterSend(true); - } -} diff --git a/src/Http/routes.php b/src/Http/routes.php index e8af4e827..01ae7b53d 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -59,14 +59,3 @@ 'as' => 'reports', ]); }); - -/* - * @deprecated Will be deleted after a grace period that still allows downloading of old - * reports. - * - * This route should be public (is protected by random uids). - */ -$router->get('api/v1/reports/{uid}/{filename}', [ - 'as' => 'download_report', - 'uses' => 'Api\AvailableReportController@show', -]); From 2edcffb25e08a4a2d3da3b0b3181d4b160281d76 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 12 Oct 2018 10:04:19 +0200 Subject: [PATCH 144/407] Add author --- composer.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/composer.json b/composer.json index 66eef8b2c..c7dfafada 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,11 @@ { "name": "biigle/reports", + "authors": [ + { + "name": "Martin Zurowietz", + "email": "martin@cebitec.uni-bielefeld.de" + } + ], "require": { "ext-zip": "*", "biigle/projects": "~1.4" From 7ad6d48c46ba703ea27ae6c7c666fd2634ab7829 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 5 Nov 2018 10:38:43 +0100 Subject: [PATCH 145/407] Make use of new API for constant model instances --- .../Annotations/AreaReportGenerator.php | 16 +++++------ .../AnnotationReportGeneratorTest.php | 12 ++++---- .../Annotations/AreaReportGeneratorTest.php | 28 +++++++++---------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php b/src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php index 9926e1ecc..4360bc3a1 100644 --- a/src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php +++ b/src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php @@ -87,10 +87,10 @@ protected function query() ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') // We can only compute the area from annotations that have an area. ->whereIn('shapes.id', [ - Shape::$circleId, - Shape::$rectangleId, - Shape::$polygonId, - Shape::$ellipseId, + Shape::circleId(), + Shape::rectangleId(), + Shape::polygonId(), + Shape::ellipseId(), ]) ->orderBy('annotation_labels.id'); @@ -201,14 +201,14 @@ protected function setSize($annotation, $row) $annotation->area_sqm = ''; switch ($annotation->shape_id) { - case Shape::$circleId: + case Shape::circleId(): // width and height are the diameter $annotation->width_px = 2 * $points[2]; $annotation->height_px = $annotation->width_px; $annotation->area_sqpx = pow($points[2], 2) * M_PI; break; - case Shape::$rectangleId: + case Shape::rectangleId(): // A --- B // | | // D --- C @@ -223,7 +223,7 @@ protected function setSize($annotation, $row) $annotation->area_sqpx = $dim1 * $dim2; break; - case Shape::$polygonId: + case Shape::polygonId(): // See: http://www.mathopenref.com/coordpolygonarea.html and // http://www.mathopenref.com/coordpolygonarea2.html // For a description of the polygon area algorithm. @@ -252,7 +252,7 @@ protected function setSize($annotation, $row) $annotation->area_sqpx = abs($area / 2); break; - case Shape::$ellipseId: + case Shape::ellipseId(): // $a and $b are *double* the lengths of the semi-major axis and the // semi-minor axis, respectively. // See: https://www.math.hmc.edu/funfacts/ffiles/10006.3.shtml diff --git a/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php b/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php index bbd2f3e3d..c8e660530 100644 --- a/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php @@ -31,32 +31,32 @@ public function testRestrictToExportAreaQuery() $annotations = [ AnnotationTest::create([ - 'shape_id' => Shape::$pointId, + 'shape_id' => Shape::pointId(), 'points' => [150, 150], 'image_id' => $image->id, ]), AnnotationTest::create([ - 'shape_id' => Shape::$polygonId, + 'shape_id' => Shape::polygonId(), 'points' => [50, 50, 150, 150, 90, 90], 'image_id' => $image->id, ]), AnnotationTest::create([ - 'shape_id' => Shape::$pointId, + 'shape_id' => Shape::pointId(), 'points' => [50, 50], 'image_id' => $image->id, ]), AnnotationTest::create([ - 'shape_id' => Shape::$polygonId, + 'shape_id' => Shape::polygonId(), 'points' => [50, 50, 10, 10, 25, 25], 'image_id' => $image->id, ]), AnnotationTest::create([ - 'shape_id' => Shape::$circleId, + 'shape_id' => Shape::circleId(), 'points' => [150, 150, 10], 'image_id' => $image->id, ]), AnnotationTest::create([ - 'shape_id' => Shape::$circleId, + 'shape_id' => Shape::circleId(), 'points' => [50, 50, 10], 'image_id' => $image->id, ]), diff --git a/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php b/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php index 75c60a8c2..0dbc7fc36 100644 --- a/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php @@ -52,7 +52,7 @@ public function testGenerateReportPoint() // Should not be included. $a = AnnotationTest::create([ - 'shape_id' => Shape::$pointId, + 'shape_id' => Shape::pointId(), 'image_id' => $image->id, 'points' => [100, 100], ]); @@ -96,7 +96,7 @@ public function testGenerateReportCirlce() ]); $a = AnnotationTest::create([ - 'shape_id' => Shape::$circleId, + 'shape_id' => Shape::circleId(), 'image_id' => $image->id, 'points' => [100, 100, 100], ]); @@ -121,7 +121,7 @@ public function testGenerateReportCirlce() ->once() ->with([ $a->id, - Shape::$circleId, 'Circle', + Shape::circleId(), 'Circle', "{$al1->label_id}, {$al2->label_id}", "{$al1->label->name}, {$al2->label->name}", $image->id, $image->filename, @@ -155,7 +155,7 @@ public function testGenerateReportRectangle() ]); $a = AnnotationTest::create([ - 'shape_id' => Shape::$rectangleId, + 'shape_id' => Shape::rectangleId(), 'image_id' => $image->id, 'points' => [100, 100, 100, 300, 200, 300, 200, 100], ]); @@ -177,7 +177,7 @@ public function testGenerateReportRectangle() ->once() ->with([ $a->id, - Shape::$rectangleId, 'Rectangle', + Shape::rectangleId(), 'Rectangle', $al->label_id, $al->label->name, $image->id, $image->filename, '', '', '', @@ -211,7 +211,7 @@ public function testGenerateReportPolygon() // It's a simple parallelogram so the area can be easily calculated manually. $a = AnnotationTest::create([ - 'shape_id' => Shape::$polygonId, + 'shape_id' => Shape::polygonId(), 'image_id' => $image->id, 'points' => [100, 100, 100, 200, 200, 100, 200, 0], ]); @@ -233,7 +233,7 @@ public function testGenerateReportPolygon() ->once() ->with([ $a->id, - Shape::$polygonId, 'Polygon', + Shape::polygonId(), 'Polygon', $al->label_id, $al->label->name, $image->id, $image->filename, '', '', '', @@ -267,7 +267,7 @@ public function testGenerateReportEllipse() // It's a simple parallelogram so the area can be easily calculated manually. $a = AnnotationTest::create([ - 'shape_id' => Shape::$ellipseId, + 'shape_id' => Shape::ellipseId(), 'image_id' => $image->id, 'points' => [0, 100, 100, 100, 50, 200, 50, 0], ]); @@ -289,7 +289,7 @@ public function testGenerateReportEllipse() ->once() ->with([ $a->id, - Shape::$ellipseId, 'Ellipse', + Shape::ellipseId(), 'Ellipse', $al->label_id, $al->label->name, $image->id, $image->filename, '', '', '', @@ -323,7 +323,7 @@ public function testGenerateReportSqm() ]); $a = AnnotationTest::create([ - 'shape_id' => Shape::$rectangleId, + 'shape_id' => Shape::rectangleId(), 'image_id' => $image->id, 'points' => [100, 100, 100, 300, 200, 300, 200, 100], ]); @@ -345,7 +345,7 @@ public function testGenerateReportSqm() ->once() ->with([ $a->id, - Shape::$rectangleId, 'Rectangle', + Shape::rectangleId(), 'Rectangle', $al->label_id, $al->label->name, $image->id, $image->filename, 0.2, 0.1, 0.02, @@ -375,7 +375,7 @@ public function testGenerateReportSeparateLabelTrees() $image = ImageTest::create(); $annotation = AnnotationTest::create([ - 'shape_id' => Shape::$rectangleId, + 'shape_id' => Shape::rectangleId(), 'image_id' => $image->id, 'points' => [100, 100, 100, 300, 200, 300, 200, 100], ]); @@ -406,7 +406,7 @@ public function testGenerateReportSeparateLabelTrees() ->once() ->with([ $annotation->id, - Shape::$rectangleId, 'Rectangle', + Shape::rectangleId(), 'Rectangle', $al1->label_id, $al1->label->name, $image->id, $image->filename, '', '', '', @@ -417,7 +417,7 @@ public function testGenerateReportSeparateLabelTrees() ->once() ->with([ $annotation->id, - Shape::$rectangleId, 'Rectangle', + Shape::rectangleId(), 'Rectangle', $al2->label_id, $al2->label->name, $image->id, $image->filename, '', '', '', From 3f0805a705f735a8d82cc543d349d866b7d20762 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 8 Nov 2018 10:26:29 +0100 Subject: [PATCH 146/407] Replace DispatchesJob trait with use of static dispatch function --- src/Http/Controllers/Api/ReportController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Controllers/Api/ReportController.php b/src/Http/Controllers/Api/ReportController.php index 54e004f73..40588427e 100644 --- a/src/Http/Controllers/Api/ReportController.php +++ b/src/Http/Controllers/Api/ReportController.php @@ -37,7 +37,7 @@ public function store(Request $request, $id) $report->options = $this->getOptions($request); $report->save(); - $this->dispatch((new GenerateReportJob($report))->onQueue('high')); + GenerateReportJob::dispatch($report)->onQueue('high'); } /** From 2cb1fd3d51df2f0afbda553a8c0247fc503febe7 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 6 Dec 2018 13:36:13 +0100 Subject: [PATCH 147/407] Support removes annotation map store --- src/public/assets/scripts/annotations.js | 2 +- .../components/settingsTabPlugins.js | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index ad9bb37b3..8eb124bca 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1 @@ -biigle.$declare("reports.api.volumes",Vue.resource("/api/v1/volumes{/id}/export-area")),biigle.$require("annotations.components.settingsTabPlugins").exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},exportAreaApi:function(){return biigle.$require("reports.api.volumes")},volumeId:function(){return biigle.$require("annotations.volumeId")},messages:function(){return biigle.$require("messages.store")},layer:function(){return new ol.layer.Vector({source:new ol.source.Vector({features:new ol.Collection}),style:[new ol.style.Style({stroke:new ol.style.Stroke({color:"white",width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:"white",width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new ol.interaction.Draw({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(e,t){e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var r=t;return r?r.setCoordinates([e]):r=new ol.geom.Rectangle([e]),r}})},modifyInteraction:function(){return new ol.interaction.Modify({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:ol.events.condition.never})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this,t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.exportAreaApi.delete({id:this.volumeId}).then(function(){e.exportArea=null}).catch(function(i){t.addFeature(r),e.messages.handleErrorResponse(i)})}},updateCurrentImage:function(e,t){this.currentImage=t},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var e=this.currentImage.tiled?0:this.height,t=new ol.geom.Rectangle([[[this.exportArea[0],e-this.exportArea[1]],[this.exportArea[0],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[1]]]]);this.layer.getSource().addFeature(new ol.Feature({geometry:t}))}},handleModifyend:function(e){this.updateExportArea(e.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(e){var t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.updateExportArea(e.feature).catch(function(){t.clear(),r&&t.addFeature(r)})},updateExportArea:function(e){var t=this,r=e.getGeometry().getCoordinates()[0],i=this.currentImage.tiled?0:this.height;r=[r[0][0],i-r[0][1],r[2][0],i-r[2][1]].map(Math.round);var n=this.exportAreaApi.save({id:this.volumeId},{coordinates:r}).then(function(){t.exportArea=r});return n.catch(this.messages.handleErrorResponse),n}},watch:{opacity:function(e,t){e<1?this.settings.set("exportAreaOpacity",e):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(e)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),biigle.$require("events").$on("images.change",this.updateCurrentImage);var e=biigle.$require("annotations.stores.map");e.addLayer(this.layer),this.drawInteraction.setActive(!1),e.addInteraction(this.drawInteraction),this.modifyInteraction.setActive(!1),e.addInteraction(this.modifyInteraction),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend)}}; \ No newline at end of file +biigle.$declare("reports.api.volumes",Vue.resource("/api/v1/volumes{/id}/export-area")),biigle.$require("annotations.components.settingsTabPlugins").exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},exportAreaApi:function(){return biigle.$require("reports.api.volumes")},volumeId:function(){return biigle.$require("annotations.volumeId")},messages:function(){return biigle.$require("messages.store")},layer:function(){return new ol.layer.Vector({source:new ol.source.Vector({features:new ol.Collection}),style:[new ol.style.Style({stroke:new ol.style.Stroke({color:"white",width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:"white",width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new ol.interaction.Draw({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(e,t){e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var r=t;return r?r.setCoordinates([e]):r=new ol.geom.Rectangle([e]),r}})},modifyInteraction:function(){return new ol.interaction.Modify({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:ol.events.condition.never})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this,t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.exportAreaApi.delete({id:this.volumeId}).then(function(){e.exportArea=null}).catch(function(i){t.addFeature(r),e.messages.handleErrorResponse(i)})}},updateCurrentImage:function(e,t){this.currentImage=t},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var e=this.currentImage.tiled?0:this.height,t=new ol.geom.Rectangle([[[this.exportArea[0],e-this.exportArea[1]],[this.exportArea[0],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[1]]]]);this.layer.getSource().addFeature(new ol.Feature({geometry:t}))}},handleModifyend:function(e){this.updateExportArea(e.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(e){var t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.updateExportArea(e.feature).catch(function(){t.clear(),r&&t.addFeature(r)})},updateExportArea:function(e){var t=this,r=e.getGeometry().getCoordinates()[0],i=this.currentImage.tiled?0:this.height;r=[r[0][0],i-r[0][1],r[2][0],i-r[2][1]].map(Math.round);var n=this.exportAreaApi.save({id:this.volumeId},{coordinates:r}).then(function(){t.exportArea=r});return n.catch(this.messages.handleErrorResponse),n},extendMap:function(e){e.addLayer(this.layer),e.addInteraction(this.drawInteraction),e.addInteraction(this.modifyInteraction)}},watch:{opacity:function(e,t){e<1?this.settings.set("exportAreaOpacity",e):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(e)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend);var e=biigle.$require("events");e.$on("images.change",this.updateCurrentImage),e.$on("annotations.map.init",this.extendMap)}}; \ No newline at end of file diff --git a/src/resources/assets/js/annotations/components/settingsTabPlugins.js b/src/resources/assets/js/annotations/components/settingsTabPlugins.js index 270292f9f..3bc2c1498 100644 --- a/src/resources/assets/js/annotations/components/settingsTabPlugins.js +++ b/src/resources/assets/js/annotations/components/settingsTabPlugins.js @@ -193,6 +193,11 @@ biigle.$require('annotations.components.settingsTabPlugins').exportArea = { return promise; }, + extendMap: function (map) { + map.addLayer(this.layer); + map.addInteraction(this.drawInteraction); + map.addInteraction(this.modifyInteraction); + }, }, watch: { opacity: function (opacity, oldOpacity) { @@ -218,17 +223,13 @@ biigle.$require('annotations.components.settingsTabPlugins').exportArea = { this.exportArea = biigle.$require('annotations.exportArea'); - var events = biigle.$require('events'); - events.$on('images.change', this.updateCurrentImage); - - var map = biigle.$require('annotations.stores.map'); - map.addLayer(this.layer); this.drawInteraction.setActive(false); - map.addInteraction(this.drawInteraction); this.modifyInteraction.setActive(false); - map.addInteraction(this.modifyInteraction); - this.drawInteraction.on('drawend', this.handleDrawend); this.modifyInteraction.on('modifyend', this.handleModifyend); + + var events = biigle.$require('events'); + events.$on('images.change', this.updateCurrentImage); + events.$on('annotations.map.init', this.extendMap); }, }; From a6b3912a31c86d1e7606c4555764db17aa8c9fbc Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 11 Dec 2018 11:13:41 +0100 Subject: [PATCH 148/407] Register API controllers for apidoc --- .../Controllers/Api/Projects/ProjectReportController.php | 6 +++--- src/Http/Controllers/Api/ReportsController.php | 2 +- src/Http/Controllers/Api/SettingsController.php | 2 +- src/Http/Controllers/Api/Volumes/ExportAreaController.php | 4 ++-- src/Http/Controllers/Api/Volumes/VolumeReportController.php | 6 +++--- src/ReportsServiceProvider.php | 1 + 6 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/Http/Controllers/Api/Projects/ProjectReportController.php b/src/Http/Controllers/Api/Projects/ProjectReportController.php index 86f1918ca..b63044636 100644 --- a/src/Http/Controllers/Api/Projects/ProjectReportController.php +++ b/src/Http/Controllers/Api/Projects/ProjectReportController.php @@ -7,9 +7,9 @@ class ProjectReportController extends ReportController { - /* - * @api {post} projects/:id/reports Generate a new project report - * @apiGroup Projects + /** + * @api {post} projects/:id/reports Request a project report + * @apiGroup Reports * @apiName GenerateProjectReport * * @apiParam {Number} id The project ID. diff --git a/src/Http/Controllers/Api/ReportsController.php b/src/Http/Controllers/Api/ReportsController.php index 257b0ded4..cc2d11a74 100644 --- a/src/Http/Controllers/Api/ReportsController.php +++ b/src/Http/Controllers/Api/ReportsController.php @@ -16,7 +16,7 @@ class ReportsController extends Controller /** * Shows the specified report file. * - * @api {get} reports/:id Get the report file + * @api {get} reports/:id Get a report file * @apiGroup Reports * @apiName ShowReport * @apiPermission reportOwner diff --git a/src/Http/Controllers/Api/SettingsController.php b/src/Http/Controllers/Api/SettingsController.php index d574dafa9..3fc3986a5 100644 --- a/src/Http/Controllers/Api/SettingsController.php +++ b/src/Http/Controllers/Api/SettingsController.php @@ -11,7 +11,7 @@ class SettingsController extends Controller /** * Update the user settings for reports. * - * @api {post} users/my/settings/reports Update the user settings for reports + * @api {post} users/my/settings/reports Update reports settings * @apiGroup Users * @apiName StoreUsersReportsSettings * @apiPermission user diff --git a/src/Http/Controllers/Api/Volumes/ExportAreaController.php b/src/Http/Controllers/Api/Volumes/ExportAreaController.php index 9663e8c9f..0697b55a3 100644 --- a/src/Http/Controllers/Api/Volumes/ExportAreaController.php +++ b/src/Http/Controllers/Api/Volumes/ExportAreaController.php @@ -14,8 +14,8 @@ class ExportAreaController extends Controller /** * Show the export area of the volume. * - * @api {get} volumes/:id/export-area Show the export area - * @apiGroup Volumes + * @api {get} volumes/:id/export-area Get the export area + * @apiGroup Reports * @apiName IndexVolumesExportArea * @apiPermission projectMember * @apiDescription The export area is a rectangle defined by two points. This endpoint returns an array containing the coordinates as follows: `[x1, y1, x2, y2]`. diff --git a/src/Http/Controllers/Api/Volumes/VolumeReportController.php b/src/Http/Controllers/Api/Volumes/VolumeReportController.php index e7b48cf99..8bf106765 100644 --- a/src/Http/Controllers/Api/Volumes/VolumeReportController.php +++ b/src/Http/Controllers/Api/Volumes/VolumeReportController.php @@ -8,9 +8,9 @@ class VolumeReportController extends ReportController { - /* - * @api {post} volumes/:id/reports Generate a new volume report - * @apiGroup Volumes + /** + * @api {post} volumes/:id/reports Request a volume report + * @apiGroup Reports * @apiName GenerateVolumeReport * * @apiParam {Number} id The volume ID. diff --git a/src/ReportsServiceProvider.php b/src/ReportsServiceProvider.php index cb6198210..8c604551c 100644 --- a/src/ReportsServiceProvider.php +++ b/src/ReportsServiceProvider.php @@ -62,6 +62,7 @@ public function boot(Modules $modules, Router $router) 'controllerMixins' => [ 'search' => SearchControllerMixin::class.'@index', ], + 'apidoc' => [__DIR__.'/Http/Controllers/Api/'], ]); if (config('reports.notifications.allow_user_settings')) { From ef05345ba78ca031d9c1876c12f4b53cb77e9a2f Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 19 Feb 2019 15:55:29 +0100 Subject: [PATCH 149/407] Disable export area checkbox if no area is specified Resolves #53 --- .../Controllers/Views/ProjectReportsController.php | 4 ++++ .../Controllers/Views/VolumeReportsController.php | 7 ++++--- src/resources/views/projectReports.blade.php | 12 +++++++++--- src/resources/views/volumeReports.blade.php | 12 +++++++++--- 4 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/Http/Controllers/Views/ProjectReportsController.php b/src/Http/Controllers/Views/ProjectReportsController.php index 215e116dc..a1d614720 100644 --- a/src/Http/Controllers/Views/ProjectReportsController.php +++ b/src/Http/Controllers/Views/ProjectReportsController.php @@ -19,10 +19,14 @@ public function show($id) $project = Project::findOrFail($id); $this->authorize('access', $project); $types = ReportType::all(); + $hasExportArea = $project->volumes() + ->whereNotNull('attrs->export_area') + ->exists(); return view('reports::projectReports', [ 'project' => $project, 'reportTypes' => $types, + 'hasExportArea' => $hasExportArea, ]); } } diff --git a/src/Http/Controllers/Views/VolumeReportsController.php b/src/Http/Controllers/Views/VolumeReportsController.php index 8da544060..fb97d01f4 100644 --- a/src/Http/Controllers/Views/VolumeReportsController.php +++ b/src/Http/Controllers/Views/VolumeReportsController.php @@ -2,7 +2,8 @@ namespace Biigle\Modules\Reports\Http\Controllers\Views; -use Biigle\Volume; +use Biigle\Volume as BaseVolume; +use Biigle\Modules\Reports\Volume; use Biigle\Modules\Reports\ReportType; use Biigle\Http\Controllers\Views\Controller; @@ -16,14 +17,14 @@ class VolumeReportsController extends Controller */ public function show($id) { - $volume = Volume::findOrFail($id); + $volume = BaseVolume::findOrFail($id); $this->authorize('access', $volume); $sessions = $volume->annotationSessions()->orderBy('starts_at', 'desc')->get(); $types = ReportType::all(); return view('reports::volumeReports', [ 'projects' => $volume->projects, - 'volume' => $volume, + 'volume' => Volume::convert($volume), 'annotationSessions' => $sessions, 'reportTypes' => $types, ]); diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index 9b3660c90..4d645a20d 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -56,9 +56,15 @@
    - + @if ($hasExportArea) + + @else + + @endif
    diff --git a/src/resources/views/volumeReports.blade.php b/src/resources/views/volumeReports.blade.php index 3238ee3c0..5df8759cf 100644 --- a/src/resources/views/volumeReports.blade.php +++ b/src/resources/views/volumeReports.blade.php @@ -74,9 +74,15 @@
    - + @if ($volume->exportArea) + + @else + + @endif
    From 28854918ad83d28a088548c6d0a4e543a1bed74c Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 20 Feb 2019 16:31:29 +0100 Subject: [PATCH 150/407] Use image width and height attributes instead of laser points px The px attribute was removed in biigle/laserpoints@6c1d202d4c8e992b41eefa076cc03593faf2332d --- .../Volumes/Annotations/AreaReportGenerator.php | 11 +++++------ .../Volumes/Annotations/AreaReportGeneratorTest.php | 2 +- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php b/src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php index 4360bc3a1..482cb031d 100644 --- a/src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php +++ b/src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php @@ -293,16 +293,15 @@ protected function setSize($annotation, $row) if (!property_exists($image, 'area') || !property_exists($image, 'px')) { $laserpointsImage = LImage::convert($image); $image->area = $laserpointsImage->area; - $image->px = $laserpointsImage->px; + if ($image->width && $image->height) { + $image->px = $image->width * $image->height; + } } - $imageArea = $image->area; - $imagePx = $image->px; - - if (!is_null($imageArea) && !is_null($imagePx)) { + if (!is_null($image->area) && !is_null($image->px)) { // If we assume a pixel is a little square then this is the area of a // single pixel. - $area = $imageArea / $imagePx; + $area = $image->area / $image->px; // And this is the width/height of a single pixel. $widthHeight = sqrt($area); diff --git a/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php b/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php index 0dbc7fc36..cc1c15347 100644 --- a/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php @@ -319,7 +319,7 @@ public function testGenerateReportSqm() $image = ImageTest::create([ 'volume_id' => $volume->id, - 'attrs' => ['laserpoints' => ['area' => 1, 'px' => 1000 * 1000]], + 'attrs' => ['laserpoints' => ['area' => 1], 'width' => 1000, 'height' => 1000], ]); $a = AnnotationTest::create([ From 09dff4a4d8d0940575629b603ec2b0930c65f03e Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 28 Feb 2019 14:25:23 +0100 Subject: [PATCH 151/407] Implement restriction for project reports if the project is empty Resolves #54 --- .../Api/Projects/ProjectReportController.php | 34 +++++++++++---- src/Http/Controllers/Api/ReportController.php | 41 +------------------ .../Api/Volumes/VolumeReportController.php | 39 +++++++++++------- .../Views/ProjectReportsController.php | 3 ++ .../views/projectsShowToolbar.blade.php | 12 ++++-- .../Projects/ProjectReportControllerTest.php | 12 ++++++ .../Views/ProjectsReportControllerTest.php | 18 +++++--- 7 files changed, 86 insertions(+), 73 deletions(-) diff --git a/src/Http/Controllers/Api/Projects/ProjectReportController.php b/src/Http/Controllers/Api/Projects/ProjectReportController.php index b63044636..73aa4a573 100644 --- a/src/Http/Controllers/Api/Projects/ProjectReportController.php +++ b/src/Http/Controllers/Api/Projects/ProjectReportController.php @@ -3,11 +3,17 @@ namespace Biigle\Modules\Reports\Http\Controllers\Api\Projects; use Biigle\Project; +use Illuminate\Http\Request; +use Biigle\Modules\Reports\Report; +use Illuminate\Validation\ValidationException; +use Biigle\Modules\Reports\Jobs\GenerateReportJob; use Biigle\Modules\Reports\Http\Controllers\Api\ReportController; class ProjectReportController extends ReportController { /** + * Generate a project report. + * * @api {post} projects/:id/reports Request a project report * @apiGroup Reports * @apiName GenerateProjectReport @@ -22,16 +28,26 @@ class ProjectReportController extends ReportController * * @apiPermission projectMember * + * @param Request $request + * @param int $id Project ID */ - - /** - * Get the source to generate the report for. - * - * @param int $id - * @return mixed - */ - protected function getSource($id) + public function store(Request $request, $id) { - return Project::findOrFail($id); + $project = Project::findOrFail($id); + $this->authorize('access', $project); + $this->validate($request, ['type_id' => 'required|exists:report_types,id']); + + if (!$project->volumes()->exists()) { + throw ValidationException::withMessages(['type_id' => ['The project must contain volumes.']]); + } + + $report = new Report; + $report->source()->associate($project); + $report->type_id = $request->input('type_id'); + $report->user()->associate($request->user()); + $report->options = $this->getOptions($request); + $report->save(); + + GenerateReportJob::dispatch($report)->onQueue('high'); } } diff --git a/src/Http/Controllers/Api/ReportController.php b/src/Http/Controllers/Api/ReportController.php index 40588427e..96ad008ca 100644 --- a/src/Http/Controllers/Api/ReportController.php +++ b/src/Http/Controllers/Api/ReportController.php @@ -7,39 +7,8 @@ use Biigle\Http\Controllers\Api\Controller; use Biigle\Modules\Reports\Jobs\GenerateReportJob; -abstract class ReportController extends Controller +class ReportController extends Controller { - /** - * The source for which the report will be generated. - * - * @var mixed - */ - protected $source; - - /** - * Generate a report. - * - * @param Request $request - * @param int $id Source ID - * - * @return \Illuminate\Http\Response - */ - public function store(Request $request, $id) - { - $this->source = $this->getSource($id); - $this->authorize('access', $this->source); - $this->validate($request, ['type_id' => 'required|exists:report_types,id']); - - $report = new Report; - $report->source()->associate($this->source); - $report->type_id = $request->input('type_id'); - $report->user()->associate($request->user()); - $report->options = $this->getOptions($request); - $report->save(); - - GenerateReportJob::dispatch($report)->onQueue('high'); - } - /** * Get the options of the requested report. * @@ -60,12 +29,4 @@ protected function getOptions(Request $request) 'newestLabel' => (bool) $request->input('newest_label', false), ]; } - - /** - * Get the source to generate the report for. - * - * @param int $id - * @return mixed - */ - abstract protected function getSource($id); } diff --git a/src/Http/Controllers/Api/Volumes/VolumeReportController.php b/src/Http/Controllers/Api/Volumes/VolumeReportController.php index 8bf106765..4ed00659f 100644 --- a/src/Http/Controllers/Api/Volumes/VolumeReportController.php +++ b/src/Http/Controllers/Api/Volumes/VolumeReportController.php @@ -4,11 +4,15 @@ use Biigle\Volume; use Illuminate\Http\Request; +use Biigle\Modules\Reports\Report; +use Biigle\Modules\Reports\Jobs\GenerateReportJob; use Biigle\Modules\Reports\Http\Controllers\Api\ReportController; class VolumeReportController extends ReportController { /** + * Generate a volume report. + * * @api {post} volumes/:id/reports Request a volume report * @apiGroup Reports * @apiName GenerateVolumeReport @@ -24,7 +28,27 @@ class VolumeReportController extends ReportController * * @apiPermission projectMember * + * @param Request $request + * @param int $id Volume ID */ + public function store(Request $request, $id) + { + $volume = Volume::findOrFail($id); + $this->authorize('access', $volume); + $this->validate($request, [ + 'annotation_session_id' => "nullable|exists:annotation_sessions,id,volume_id,{$volume->id}", + 'type_id' => 'required|exists:report_types,id' + ]); + + $report = new Report; + $report->source()->associate($volume); + $report->type_id = $request->input('type_id'); + $report->user()->associate($request->user()); + $report->options = $this->getOptions($request); + $report->save(); + + GenerateReportJob::dispatch($report)->onQueue('high'); + } /** * Get the options of the requested report. @@ -36,23 +60,8 @@ public function getOptions(Request $request) { $options = parent::getOptions($request); - $this->validate($request, [ - 'annotation_session_id' => "nullable|exists:annotation_sessions,id,volume_id,{$this->source->id}", - ]); - return array_merge($options, [ 'annotationSession' => $request->input('annotation_session_id'), ]); } - - /** - * Get the source to generate the report for. - * - * @param int $id - * @return mixed - */ - protected function getSource($id) - { - return Volume::findOrFail($id); - } } diff --git a/src/Http/Controllers/Views/ProjectReportsController.php b/src/Http/Controllers/Views/ProjectReportsController.php index a1d614720..b82559081 100644 --- a/src/Http/Controllers/Views/ProjectReportsController.php +++ b/src/Http/Controllers/Views/ProjectReportsController.php @@ -17,6 +17,9 @@ class ProjectReportsController extends Controller public function show($id) { $project = Project::findOrFail($id); + if (!$project->volumes()->exists()) { + abort(404); + } $this->authorize('access', $project); $types = ReportType::all(); $hasExportArea = $project->volumes() diff --git a/src/resources/views/projectsShowToolbar.blade.php b/src/resources/views/projectsShowToolbar.blade.php index c46bf2a3a..d1e54fa8f 100644 --- a/src/resources/views/projectsShowToolbar.blade.php +++ b/src/resources/views/projectsShowToolbar.blade.php @@ -1,3 +1,9 @@ - - Request reports - +@if ($volumes->isEmpty()) + +@else + + Request reports + +@endif diff --git a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php index 803d2afa2..422fecf02 100644 --- a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php @@ -11,6 +11,8 @@ class ProjectReportControllerTest extends ApiTestCase public function testStore() { $projectId = $this->project()->id; + // Create the volume by calling it. + $this->volume(); $typeId = ReportType::first()->id; $this->doTestApiRoute('POST', "api/v1/projects/{$projectId}/reports"); @@ -52,4 +54,14 @@ public function testStore() $this->assertEquals(true, $report->options['exportArea']); $this->assertEquals(true, $report->options['newestLabel']); } + + public function testStoreEmptyProject() + { + $projectId = $this->project()->id; + $this->beGuest(); + $response = $this->json('POST', "api/v1/projects/{$projectId}/reports", [ + 'type_id' => ReportType::first()->id, + ]) + ->assertStatus(422); + } } diff --git a/tests/Http/Controllers/Views/ProjectsReportControllerTest.php b/tests/Http/Controllers/Views/ProjectsReportControllerTest.php index 3646ff32e..a6b9ae19d 100644 --- a/tests/Http/Controllers/Views/ProjectsReportControllerTest.php +++ b/tests/Http/Controllers/Views/ProjectsReportControllerTest.php @@ -9,16 +9,22 @@ class ProjectsReportControllerTest extends ApiTestCase public function testShow() { $id = $this->project()->id; + // Create the volume by calling it. + $this->volume(); - $response = $this->get("projects/{$id}/reports") - ->assertStatus(302); + $response = $this->get("projects/{$id}/reports")->assertStatus(302); $this->beUser(); - $response = $this->get("projects/{$id}/reports") - ->assertStatus(403); + $response = $this->get("projects/{$id}/reports")->assertStatus(403); $this->beGuest(); - $response = $this->get("projects/{$id}/reports") - ->assertStatus(200); + $response = $this->get("projects/{$id}/reports")->assertStatus(200); + } + + public function testShowEmpty() + { + $id = $this->project()->id; + $this->beGuest(); + $response = $this->get("projects/{$id}/reports")->assertStatus(404); } } From d055d3a1c10eb4511047fd59b7ad803bbc5356ef Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 4 Mar 2019 10:19:57 +0100 Subject: [PATCH 152/407] Remove reports tab from notification center --- src/ReportsServiceProvider.php | 1 - src/resources/views/notificationTabs.blade.php | 3 --- 2 files changed, 4 deletions(-) delete mode 100644 src/resources/views/notificationTabs.blade.php diff --git a/src/ReportsServiceProvider.php b/src/ReportsServiceProvider.php index 8c604551c..8f1cc338e 100644 --- a/src/ReportsServiceProvider.php +++ b/src/ReportsServiceProvider.php @@ -55,7 +55,6 @@ public function boot(Modules $modules, Router $router) 'manualTutorial', 'volumesSidebar', 'annotationsManualSidebarSettings', - 'notificationTabs', 'searchTab', 'searchTabContent', ], diff --git a/src/resources/views/notificationTabs.blade.php b/src/resources/views/notificationTabs.blade.php deleted file mode 100644 index df735d748..000000000 --- a/src/resources/views/notificationTabs.blade.php +++ /dev/null @@ -1,3 +0,0 @@ -
  • - Reports -
  • From bfdb4c7a96245456c0c4859530b06cb38d241e98 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 4 Mar 2019 15:52:44 +0100 Subject: [PATCH 153/407] Implement video annotation CSV report The UI does not support this new type yet. References biigle/videos#30 --- .../Api/Projects/ProjectReportController.php | 14 +- .../Api/Volumes/VolumeReportController.php | 9 +- .../Mixins/Views/SearchControllerMixin.php | 31 ++- .../Views/VolumeReportsController.php | 4 +- src/Report.php | 5 +- src/ReportType.php | 19 ++ .../VideoAnnotations/CsvReportGenerator.php | 198 ++++++++++++++++ src/database/factories/ModelFactory.php | 14 +- ...03345_add_video_annotation_report_type.php | 30 +++ src/resources/views/projectReports.blade.php | 3 - .../Projects/ProjectReportControllerTest.php | 24 +- .../Volumes/VolumeReportControllerTest.php | 10 + .../Views/SearchControllerMixinTest.php | 45 +++- tests/Support/Reports/ReportGeneratorTest.php | 14 +- .../CsvReportGeneratorTest.php | 223 ++++++++++++++++++ 15 files changed, 601 insertions(+), 42 deletions(-) create mode 100644 src/Support/Reports/Videos/VideoAnnotations/CsvReportGenerator.php create mode 100644 src/database/migrations/2019_03_04_103345_add_video_annotation_report_type.php create mode 100644 tests/Support/Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php diff --git a/src/Http/Controllers/Api/Projects/ProjectReportController.php b/src/Http/Controllers/Api/Projects/ProjectReportController.php index 73aa4a573..49f7065a1 100644 --- a/src/Http/Controllers/Api/Projects/ProjectReportController.php +++ b/src/Http/Controllers/Api/Projects/ProjectReportController.php @@ -4,7 +4,9 @@ use Biigle\Project; use Illuminate\Http\Request; +use Biigle\Modules\Videos\Video; use Biigle\Modules\Reports\Report; +use Biigle\Modules\Reports\ReportType; use Illuminate\Validation\ValidationException; use Biigle\Modules\Reports\Jobs\GenerateReportJob; use Biigle\Modules\Reports\Http\Controllers\Api\ReportController; @@ -37,7 +39,17 @@ public function store(Request $request, $id) $this->authorize('access', $project); $this->validate($request, ['type_id' => 'required|exists:report_types,id']); - if (!$project->volumes()->exists()) { + if (intval($request->input('type_id')) === ReportType::videoAnnotationsCsvId()) { + $hasVideo = false; + + if (class_exists(Video::class)) { + $hasVideo = Video::where('project_id', $project->id)->exists(); + } + + if (!$hasVideo) { + throw ValidationException::withMessages(['type_id' => ['The project must contain videos.']]); + } + } else if (!$project->volumes()->exists()) { throw ValidationException::withMessages(['type_id' => ['The project must contain volumes.']]); } diff --git a/src/Http/Controllers/Api/Volumes/VolumeReportController.php b/src/Http/Controllers/Api/Volumes/VolumeReportController.php index 4ed00659f..25023f790 100644 --- a/src/Http/Controllers/Api/Volumes/VolumeReportController.php +++ b/src/Http/Controllers/Api/Volumes/VolumeReportController.php @@ -4,7 +4,9 @@ use Biigle\Volume; use Illuminate\Http\Request; +use Illuminate\Validation\Rule; use Biigle\Modules\Reports\Report; +use Biigle\Modules\Reports\ReportType; use Biigle\Modules\Reports\Jobs\GenerateReportJob; use Biigle\Modules\Reports\Http\Controllers\Api\ReportController; @@ -16,6 +18,7 @@ class VolumeReportController extends ReportController * @api {post} volumes/:id/reports Request a volume report * @apiGroup Reports * @apiName GenerateVolumeReport + * @apiDescription Accepts only requests for annotation and image label reports. * * @apiParam {Number} id The volume ID. * @@ -37,7 +40,11 @@ public function store(Request $request, $id) $this->authorize('access', $volume); $this->validate($request, [ 'annotation_session_id' => "nullable|exists:annotation_sessions,id,volume_id,{$volume->id}", - 'type_id' => 'required|exists:report_types,id' + 'type_id' => [ + 'required', + Rule::notIn([ReportType::videoAnnotationsCsvId()]), + 'exists:report_types,id', + ], ]); $report = new Report; diff --git a/src/Http/Controllers/Mixins/Views/SearchControllerMixin.php b/src/Http/Controllers/Mixins/Views/SearchControllerMixin.php index 10cc488b5..39d0b9bfb 100644 --- a/src/Http/Controllers/Mixins/Views/SearchControllerMixin.php +++ b/src/Http/Controllers/Mixins/Views/SearchControllerMixin.php @@ -6,6 +6,7 @@ use Biigle\User; use Biigle\Volume; use Biigle\Project; +use Biigle\Modules\Videos\Video; use Biigle\Modules\Reports\Report; class SearchControllerMixin @@ -24,29 +25,35 @@ public function index(User $user, $query, $type) $queryBuilder = Report::where('reports.user_id', '=', $user->id); if ($query) { - if (\DB::connection() instanceof \Illuminate\Database\PostgresConnection) { - $operator = 'ilike'; - } else { - $operator = 'like'; - } - - $queryBuilder = $queryBuilder->where(function ($q) use ($query, $operator) { + $queryBuilder = $queryBuilder + ->where(function ($q) use ($query) { $q->where('reports.source_type', Volume::class) - ->whereExists(function ($q) use ($query, $operator) { + ->whereExists(function ($q) use ($query) { $q->select(DB::raw(1)) ->from('reports') ->join('volumes', 'reports.source_id', '=', 'volumes.id') - ->where('volumes.name', $operator, "%{$query}%"); + ->where('volumes.name', 'like', "%{$query}%"); }); }) - ->orWhere(function ($q) use ($query, $operator) { + ->orWhere(function ($q) use ($query) { $q->where('reports.source_type', Project::class) - ->whereExists(function ($q) use ($query, $operator) { + ->whereExists(function ($q) use ($query) { $q->select(DB::raw(1)) ->from('reports') ->join('projects', 'reports.source_id', '=', 'projects.id') - ->where('projects.name', $operator, "%{$query}%"); + ->where('projects.name', 'like', "%{$query}%"); }); + }) + ->when(class_exists(Video::class), function ($q) use ($query) { + $q->orWhere(function ($q) use ($query) { + $q->where('reports.source_type', Video::class) + ->whereExists(function ($q) use ($query) { + $q->select(DB::raw(1)) + ->from('reports') + ->join('videos', 'reports.source_id', '=', 'videos.id') + ->where('videos.name', 'like', "%{$query}%"); + }); + }); }); } diff --git a/src/Http/Controllers/Views/VolumeReportsController.php b/src/Http/Controllers/Views/VolumeReportsController.php index fb97d01f4..64e45fd5d 100644 --- a/src/Http/Controllers/Views/VolumeReportsController.php +++ b/src/Http/Controllers/Views/VolumeReportsController.php @@ -20,7 +20,9 @@ public function show($id) $volume = BaseVolume::findOrFail($id); $this->authorize('access', $volume); $sessions = $volume->annotationSessions()->orderBy('starts_at', 'desc')->get(); - $types = ReportType::all(); + $types = ReportType::where('name', 'like', 'Annotations%') + ->orWhere('name', 'like', 'ImageLabels%') + ->get(); return view('reports::volumeReports', [ 'projects' => $volume->projects, diff --git a/src/Report.php b/src/Report.php index 5b5a81573..249d75bbe 100644 --- a/src/Report.php +++ b/src/Report.php @@ -50,7 +50,8 @@ public function type() } /** - * Source of the report (\Biigle\Volume or \Biigle\Project). + * Source of the report (\Biigle\Volume, \Biigle\Project or + * \Biigle\Modules\Videos\Video). * * @return \Illuminate\Database\Eloquent\Relations\MorphTo */ @@ -144,7 +145,7 @@ public function getNameAttribute() */ public function getFilenameAttribute() { - return $this->source_id.'_'.$this->getReportGenerator()->getFullfilename(); + return $this->source_id.'_'.$this->getReportGenerator()->getFullFilename(); } /** diff --git a/src/ReportType.php b/src/ReportType.php index 315e62333..c35c8e0be 100644 --- a/src/ReportType.php +++ b/src/ReportType.php @@ -3,9 +3,28 @@ namespace Biigle\Modules\Reports; use Illuminate\Database\Eloquent\Model; +use Biigle\Traits\HasConstantInstances; class ReportType extends Model { + use HasConstantInstances; + + /** + * The constant instances of this model. + * + * @var array + */ + const INSTANCES = [ + 'annotationsArea' => 'Annotations\Area', + 'annotationsBasic' => 'Annotations\Basic', + 'annotationsCsv' => 'Annotations\Csv', + 'annotationsExtended' => 'Annotations\Extended', + 'annotationsFull' => 'Annotations\Full', + 'imageLabelsBasic' => 'ImageLabels\Basic', + 'imageLabelsCsv' => 'ImageLabels\Csv', + 'videoAnnotationsCsv' => 'VideoAnnotations\Csv', + ]; + /** * Don't maintain timestamps for this model. * diff --git a/src/Support/Reports/Videos/VideoAnnotations/CsvReportGenerator.php b/src/Support/Reports/Videos/VideoAnnotations/CsvReportGenerator.php new file mode 100644 index 000000000..f26f07815 --- /dev/null +++ b/src/Support/Reports/Videos/VideoAnnotations/CsvReportGenerator.php @@ -0,0 +1,198 @@ +query()->get(); + $toZip = []; + + if ($this->shouldSeparateLabelTrees()) { + $rows = $rows->groupBy('label_tree_id'); + $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); + + foreach ($trees as $id => $name) { + $csv = $this->createCsv($rows->get($id)); + $this->tmpFiles[] = $csv; + $toZip[$csv->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'csv'); + } + } else { + $csv = $this->createCsv($rows); + $this->tmpFiles[] = $csv; + $toZip[$csv->getPath()] = $this->sanitizeFilename("{$this->source->id}-{$this->source->name}", 'csv'); + } + + $this->makeZip($toZip, $path); + } + + /** + * Constructs a label name from the names of all parent labels and the label itself. + * + * Example: `Animalia > Annelida > Polychaeta > Buskiella sp` + * + * @param int $id Label ID + * @return string + */ + public function expandLabelName($id) + { + if (is_null($this->labels)) { + // We expect most of the used labels to belong to a label tree currently + // attached to the video (through its projects). + $this->labels = $this->getVideoLabels()->keyBy('id'); + } + + return parent::expandLabelName($id); + } + + /** + * Get all labels that are attached to the volume of this report (through project label trees). + * + * @return \Illuminate\Support\Collection + */ + protected function getVideoLabels() + { + return Label::select('id', 'name', 'parent_id') + ->whereIn('label_tree_id', function ($query) { + $query->select('label_tree_id') + ->from('label_tree_project') + ->where('project_id', $this->source->project_id); + }) + ->get(); + } + + /** + * Assembles the part of the DB query that is the same for all annotation reports. + * + * @param mixed $columns The columns to select + * @return \Illuminate\Database\Query\Builder + */ + protected function initQuery($columns = []) + { + $query = DB::table('video_annotation_labels') + ->join('video_annotations', 'video_annotation_labels.video_annotation_id', '=', 'video_annotations.id') + ->join('videos', 'video_annotations.video_id', '=', 'videos.id') + ->join('labels', 'video_annotation_labels.label_id', '=', 'labels.id') + ->where('videos.id', $this->source->id) + ->select($columns); + + if ($this->shouldSeparateLabelTrees()) { + $query->addSelect('labels.label_tree_id'); + } + + return $query; + } + + /** + * Assemble a new DB query for the video of this report. + * + * @return \Illuminate\Database\Query\Builder + */ + protected function query() + { + $query = $this->initQuery([ + 'video_annotation_labels.id as video_annotation_label_id', + 'video_annotation_labels.label_id', + 'labels.name as label_name', + 'users.id as user_id', + 'users.firstname', + 'users.lastname', + 'videos.id as video_id', + 'videos.name as video_name', + 'shapes.id as shape_id', + 'shapes.name as shape_name', + 'video_annotations.points', + 'video_annotations.frames', + ]) + ->join('shapes', 'video_annotations.shape_id', '=', 'shapes.id') + ->join('users', 'video_annotation_labels.user_id', '=', 'users.id') + ->orderBy('video_annotation_labels.id'); + + return $query; + } + + /** + * Create a CSV file for this report. + * + * @param \Illuminate\Support\Collection $rows The rows for the CSV + * @return CsvFile + */ + protected function createCsv($rows) + { + $csv = CsvFile::makeTmp(); + // column headers + $csv->put([ + 'video_annotation_label_id', + 'label_id', + 'label_name', + 'label_hierarchy', + 'user_id', + 'firstname', + 'lastname', + 'video_id', + 'video_name', + 'shape_id', + 'shape_name', + 'points', + 'frames', + ]); + + foreach ($rows as $row) { + $csv->put([ + $row->video_annotation_label_id, + $row->label_id, + $row->label_name, + $this->expandLabelName($row->label_id), + $row->user_id, + $row->firstname, + $row->lastname, + $row->video_id, + $row->video_name, + $row->shape_id, + $row->shape_name, + $row->points, + $row->frames, + ]); + } + + $csv->close(); + + return $csv; + } +} diff --git a/src/database/factories/ModelFactory.php b/src/database/factories/ModelFactory.php index b182e38eb..3d83246f6 100644 --- a/src/database/factories/ModelFactory.php +++ b/src/database/factories/ModelFactory.php @@ -7,22 +7,16 @@ }); $factory->define(Biigle\Modules\Reports\Report::class, function ($faker) { - if (rand(0, 1) > 0) { - $sourceType = Biigle\Volume::class; - } else { - $sourceType = Biigle\Project::class; - } - return [ 'user_id' => function () { return factory(Biigle\User::class)->create()->id; }, 'type_id' => function () { - return Biigle\Modules\Reports\ReportType::inRandomOrder()->first()->id; + return Biigle\Modules\Reports\ReportType::annotationsCsvId(); }, - 'source_id' => function () use ($sourceType) { - return factory($sourceType)->create()->id; + 'source_id' => function () { + return factory(Biigle\Volume::class)->create()->id; }, - 'source_type' => $sourceType, + 'source_type' => Biigle\Volume::class, ]; }); diff --git a/src/database/migrations/2019_03_04_103345_add_video_annotation_report_type.php b/src/database/migrations/2019_03_04_103345_add_video_annotation_report_type.php new file mode 100644 index 000000000..f02afdd21 --- /dev/null +++ b/src/database/migrations/2019_03_04_103345_add_video_annotation_report_type.php @@ -0,0 +1,30 @@ +insert([ + ['name' => 'VideoAnnotations\Csv'], + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + DB::table('report_types') + ->where('name', 'VideoAnnotations\Csv') + ->delete(); + } +} diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index 4d645a20d..99106b071 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -104,9 +104,6 @@
    -

    - ProTip: You can request reports for individual volumes (and with more options) from the volume overview page. -

    diff --git a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php index 422fecf02..d676d6a90 100644 --- a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php @@ -4,6 +4,7 @@ use ApiTestCase; use Biigle\Modules\Reports\ReportType; +use Biigle\Tests\Modules\Videos\VideoTest; use Biigle\Modules\Reports\Jobs\GenerateReportJob; class ProjectReportControllerTest extends ApiTestCase @@ -59,9 +60,30 @@ public function testStoreEmptyProject() { $projectId = $this->project()->id; $this->beGuest(); - $response = $this->json('POST', "api/v1/projects/{$projectId}/reports", [ + $this->postJson("api/v1/projects/{$projectId}/reports", [ 'type_id' => ReportType::first()->id, ]) ->assertStatus(422); } + + public function testStoreVideoAnnotations() + { + if (!class_exists(VideoTest::class)) { + $this->markTestSkipped('Requires the biigle/videos module.'); + } + + $projectId = $this->project()->id; + $this->beGuest(); + $this->postJson("api/v1/projects/{$projectId}/reports", [ + 'type_id' => ReportType::videoAnnotationsCsvId(), + ]) + ->assertStatus(422); + + VideoTest::create(['project_id' => $projectId]); + + $this->postJson("api/v1/projects/{$projectId}/reports", [ + 'type_id' => ReportType::videoAnnotationsCsvId(), + ]) + ->assertStatus(200); + } } diff --git a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php index 10aa41307..efc445865 100644 --- a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php +++ b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php @@ -52,4 +52,14 @@ public function testStore() $this->assertEquals(true, $report->options['exportArea']); $this->assertEquals(true, $report->options['newestLabel']); } + + public function testStoreVideoAnnotations() + { + $volumeId = $this->volume()->id; + $typeId = ReportType::videoAnnotationsCsvId(); + + $this->beGuest(); + $this->postJson("api/v1/volumes/{$volumeId}/reports", ['type_id' => $typeId]) + ->assertStatus(422); + } } diff --git a/tests/Http/Controllers/Mixins/Views/SearchControllerMixinTest.php b/tests/Http/Controllers/Mixins/Views/SearchControllerMixinTest.php index 4b35bec1f..97ee43f38 100644 --- a/tests/Http/Controllers/Mixins/Views/SearchControllerMixinTest.php +++ b/tests/Http/Controllers/Mixins/Views/SearchControllerMixinTest.php @@ -7,17 +7,22 @@ use Biigle\Project; use Biigle\Tests\VolumeTest; use Biigle\Tests\ProjectTest; +use Biigle\Modules\Videos\Video; +use Biigle\Modules\Reports\ReportType; +use Biigle\Tests\Modules\Videos\VideoTest; use Biigle\Tests\Modules\Reports\ReportTest; class SearchControllerMixinTest extends TestCase { - public function testIndex() + public function testIndexVolume() { $r1 = ReportTest::create([ + 'type_id' => ReportType::annotationsCsvId(), 'source_id' => VolumeTest::create(['name' => 'my volume'])->id, 'source_type' => Volume::class, ]); $r2 = ReportTest::create([ + 'type_id' => ReportType::annotationsCsvId(), 'user_id' => $r1->user_id, 'source_id' => ProjectTest::create(['name' => 'my project'])->id, 'source_type' => Project::class, @@ -25,15 +30,35 @@ public function testIndex() $r3 = ReportTest::create(); $this->be($r1->user); - $response = $this->get('search?t=reports')->assertStatus(200); - $response->assertSeeText('my volume'); - $response->assertSeeText('my project'); - $response->assertDontSeeText($r3->source->name); - - $response = $this->get('search?t=reports&q=volume')->assertStatus(200); - $response->assertSeeText('my volume'); - $response->assertDontSeeText('my project'); - $response->assertDontSeeText($r3->source->name); + $this->get('search?t=reports') + ->assertStatus(200) + ->assertSeeText('my volume') + ->assertSeeText('my project') + ->assertDontSeeText($r3->source->name); + + $this->get('search?t=reports&q=volume') + ->assertStatus(200) + ->assertSeeText('my volume') + ->assertDontSeeText('my project') + ->assertDontSeeText($r3->source->name); + } + + public function testIndexVideo() + { + if (!class_exists(Video::class)) { + $this->markTestSkipped('Requires the biigle/videos module.'); + } + + $r1 = ReportTest::create([ + 'type_id' => ReportType::videoAnnotationsCsvId(), + 'source_id' => VideoTest::create(['name' => 'my video'])->id, + 'source_type' => Video::class, + ]); + + $this->be($r1->user); + $this->get('search?t=reports&q=video') + ->assertStatus(200) + ->assertSeeText('my video'); } public function testIndexDeleted() diff --git a/tests/Support/Reports/ReportGeneratorTest.php b/tests/Support/Reports/ReportGeneratorTest.php index fb35b6e30..94372bca5 100644 --- a/tests/Support/Reports/ReportGeneratorTest.php +++ b/tests/Support/Reports/ReportGeneratorTest.php @@ -9,6 +9,7 @@ use Biigle\Volume; use Biigle\Tests\LabelTest; use Biigle\Tests\VolumeTest; +use Biigle\Modules\Videos\Video; use Biigle\Modules\Reports\ReportType; use Biigle\Modules\Reports\Support\Reports\ReportGenerator; use Biigle\Modules\Reports\Support\Reports\Volumes\Annotations\BasicReportGenerator; @@ -32,11 +33,22 @@ public function testGet() public function testGetAllExist() { - foreach (ReportType::get() as $type) { + foreach (ReportType::where('name', 'not like', 'Video%')->get() as $type) { $this->assertNotNull(ReportGenerator::get(Volume::class, $type)); } } + public function testGetAllVideoExist() + { + if (!class_exists(Video::class)) { + $this->markTestSkipped('Requires the biigle/videos module.'); + } + + foreach (ReportType::where('name', 'like', 'Video%')->get() as $type) { + $this->assertNotNull(ReportGenerator::get(Video::class, $type)); + } + } + public function testHandleException() { File::shouldReceive('dirname')->andReturn(''); diff --git a/tests/Support/Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php b/tests/Support/Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php new file mode 100644 index 000000000..ce167b9b4 --- /dev/null +++ b/tests/Support/Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php @@ -0,0 +1,223 @@ +markTestSkipped('Requires the biigle/videos module.'); + } + } + + public function testProperties() + { + $generator = new CsvReportGenerator; + $this->assertEquals('CSV video annotation report', $generator->getName()); + $this->assertEquals('csv_video_annotation_report', $generator->getFilename()); + $this->assertStringEndsWith('.zip', $generator->getFullFilename()); + } + + public function testGenerateReport() + { + $video = VideoTest::create([ + 'name' => 'My Cool Video', + ]); + + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + + $al = VideoAnnotationLabelTest::create(['label_id' => $child->id]); + $al->annotation->video_id = $video->id; + $al->annotation->save(); + + $mock = Mockery::mock(); + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); + + $mock->shouldReceive('put') + ->once() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([ + $al->id, + $child->id, + $child->name, + "{$root->name} > {$child->name}", + $al->user_id, + $al->user->firstname, + $al->user->lastname, + $al->annotation->video_id, + $al->annotation->video->name, + $al->annotation->shape->id, + $al->annotation->shape->name, + json_encode($al->annotation->points), + json_encode($al->annotation->frames), + ]); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$video->id}-my-cool-video.csv"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new CsvReportGenerator; + $generator->setSource($video); + $generator->generateReport('my/path'); + } + + public function testGenerateReportSeparateLabelTrees() + { + $tree1 = LabelTreeTest::create(['name' => 'tree1']); + $tree2 = LabelTreeTest::create(['name' => 'tree2']); + + $label1 = LabelTest::create(['label_tree_id' => $tree1->id]); + $label2 = LabelTest::create(['label_tree_id' => $tree2->id]); + + $video = VideoTest::create(); + + $annotation = VideoAnnotationTest::create(['video_id' => $video->id]); + + $al1 = VideoAnnotationLabelTest::create([ + 'video_annotation_id' => $annotation->id, + 'label_id' => $label1->id, + ]); + $al2 = VideoAnnotationLabelTest::create([ + 'video_annotation_id' => $annotation->id, + 'label_id' => $label2->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $mock->shouldReceive('put') + ->twice() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([ + $al1->id, + $label1->id, + $label1->name, + $label1->name, + $al1->user_id, + $al1->user->firstname, + $al1->user->lastname, + $annotation->video_id, + $annotation->video->name, + $annotation->shape->id, + $annotation->shape->name, + json_encode($annotation->points), + json_encode($annotation->frames), + ]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $al2->id, + $label2->id, + $label2->name, + $label2->name, + $al2->user_id, + $al2->user->firstname, + $al2->user->lastname, + $annotation->video_id, + $annotation->video->name, + $annotation->shape->id, + $annotation->shape->name, + json_encode($annotation->points), + json_encode($annotation->frames), + ]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$tree1->id}-{$tree1->name}.csv"); + + $mock->shouldReceive('addFile') + ->once() + ->with('def', "{$tree2->id}-{$tree2->name}.csv"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new CsvReportGenerator([ + 'separateLabelTrees' => true, + ]); + $generator->setSource($video); + $generator->generateReport('my/path'); + } +} From 3b7f147b4ee10b375e555987fd49961fb4dd2cef Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Mar 2019 10:41:50 +0100 Subject: [PATCH 154/407] Fix bug where report options were ignored for project reports --- .../Reports/Projects/ProjectReportGenerator.php | 10 ++++------ .../Reports/Projects/ProjectReportGeneratorTest.php | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Support/Reports/Projects/ProjectReportGenerator.php b/src/Support/Reports/Projects/ProjectReportGenerator.php index c5bc3574d..7f8375b83 100644 --- a/src/Support/Reports/Projects/ProjectReportGenerator.php +++ b/src/Support/Reports/Projects/ProjectReportGenerator.php @@ -36,7 +36,7 @@ public function generateReport($path) $filesForZip = []; foreach ($this->source->volumes as $volume) { - $report = $this->getReportGenerator($volume); + $report = $this->getReportGenerator(); $file = File::makeTmp(); $report->generate($volume, $file->getPath()); // The individual volume reports should be deleted again after @@ -49,14 +49,12 @@ public function generateReport($path) } /** - * Get the report generator for a volume. - * - * @param Volume $volume + * Get the report generator. * * @return \Biigle\Modules\Reports\Support\Reports\ReportGenerator */ - protected function getReportGenerator(Volume $volume) + protected function getReportGenerator() { - return new $this->volumeReportClass($volume, $this->options); + return new $this->volumeReportClass($this->options); } } diff --git a/tests/Support/Reports/Projects/ProjectReportGeneratorTest.php b/tests/Support/Reports/Projects/ProjectReportGeneratorTest.php index 8fb886348..05e551523 100644 --- a/tests/Support/Reports/Projects/ProjectReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/ProjectReportGeneratorTest.php @@ -79,7 +79,7 @@ public function testGenerate() class ProjectReportStub extends ProjectReportGenerator { public $mock; - protected function getReportGenerator(Volume $volume) + protected function getReportGenerator() { return $this->mock; } From 428618dd55847c23d4d2f48aec86c54aec53f3d5 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Mar 2019 10:57:37 +0100 Subject: [PATCH 155/407] Implement UI for project video annotation reports --- .../Views/ProjectReportsController.php | 20 ++++- .../Annotations/AreaReportGenerator.php | 2 +- .../Annotations/BasicReportGenerator.php | 2 +- .../Annotations/CsvReportGenerator.php | 2 +- .../Annotations/ExtendedReportGenerator.php | 2 +- .../Annotations/FullReportGenerator.php | 2 +- .../ImageLabels/BasicReportGenerator.php | 2 +- .../ImageLabels/CsvReportGenerator.php | 2 +- .../Projects/ProjectReportGenerator.php | 6 +- .../VideoAnnotations/CsvReportGenerator.php | 56 ++++++++++++ src/Support/Reports/ReportGenerator.php | 4 +- src/public/assets/scripts/annotations.js | 2 +- src/public/assets/scripts/main.js | 2 +- .../js/reports/exportProjectReportForm.js | 5 +- .../assets/js/reports/mixins/reportForm.js | 33 ++++--- .../manual/tutorials/reports-schema.blade.php | 36 ++++++++ .../views/partials/reportTypeInfo.blade.php | 3 + src/resources/views/projectReports.blade.php | 85 +++++++++--------- src/resources/views/volumeReports.blade.php | 90 ++++++++----------- .../Views/ProjectsReportControllerTest.php | 22 ++++- .../CsvReportGeneratorTest.php | 20 +++++ tests/Support/Reports/ReportGeneratorTest.php | 4 +- 22 files changed, 275 insertions(+), 127 deletions(-) create mode 100644 src/Support/Reports/Projects/VideoAnnotations/CsvReportGenerator.php create mode 100644 tests/Support/Reports/Projects/VideoAnnotations/CsvReportGeneratorTest.php diff --git a/src/Http/Controllers/Views/ProjectReportsController.php b/src/Http/Controllers/Views/ProjectReportsController.php index b82559081..35b70561f 100644 --- a/src/Http/Controllers/Views/ProjectReportsController.php +++ b/src/Http/Controllers/Views/ProjectReportsController.php @@ -3,6 +3,7 @@ namespace Biigle\Modules\Reports\Http\Controllers\Views; use Biigle\Project; +use Biigle\Modules\Videos\Video; use Biigle\Modules\Reports\ReportType; use Biigle\Http\Controllers\Views\Controller; @@ -17,11 +18,24 @@ class ProjectReportsController extends Controller public function show($id) { $project = Project::findOrFail($id); - if (!$project->volumes()->exists()) { + $hasVideo = class_exists(Video::class) && Video::where('project_id', $project->id)->exists(); + $hasVolume = $project->volumes()->exists(); + if (!$hasVolume && !$hasVideo) { abort(404); } + $this->authorize('access', $project); - $types = ReportType::all(); + + $types = ReportType::when($hasVolume, function ($query) { + $query->where('name', 'like', 'Annotations%') + ->orWhere('name', 'like', 'ImageLabels%'); + }) + ->when($hasVideo, function ($query) { + $query->orWhere('name', 'like', 'VideoAnnotations%'); + }) + ->get(); + + $hasExportArea = $project->volumes() ->whereNotNull('attrs->export_area') ->exists(); @@ -30,6 +44,8 @@ public function show($id) 'project' => $project, 'reportTypes' => $types, 'hasExportArea' => $hasExportArea, + 'hasVolume' => $hasVolume, + 'hasVideo' => $hasVideo, ]); } } diff --git a/src/Support/Reports/Projects/Annotations/AreaReportGenerator.php b/src/Support/Reports/Projects/Annotations/AreaReportGenerator.php index 48628cf4a..00aff0574 100644 --- a/src/Support/Reports/Projects/Annotations/AreaReportGenerator.php +++ b/src/Support/Reports/Projects/Annotations/AreaReportGenerator.php @@ -11,7 +11,7 @@ class AreaReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $volumeReportClass = ReportGenerator::class; + protected $reportClass = ReportGenerator::class; /** * Name of the report for use in text. diff --git a/src/Support/Reports/Projects/Annotations/BasicReportGenerator.php b/src/Support/Reports/Projects/Annotations/BasicReportGenerator.php index d6f8a41da..777975656 100644 --- a/src/Support/Reports/Projects/Annotations/BasicReportGenerator.php +++ b/src/Support/Reports/Projects/Annotations/BasicReportGenerator.php @@ -11,7 +11,7 @@ class BasicReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $volumeReportClass = ReportGenerator::class; + protected $reportClass = ReportGenerator::class; /** * Name of the report for use in text. diff --git a/src/Support/Reports/Projects/Annotations/CsvReportGenerator.php b/src/Support/Reports/Projects/Annotations/CsvReportGenerator.php index 33da19516..d711494e7 100644 --- a/src/Support/Reports/Projects/Annotations/CsvReportGenerator.php +++ b/src/Support/Reports/Projects/Annotations/CsvReportGenerator.php @@ -11,7 +11,7 @@ class CsvReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $volumeReportClass = ReportGenerator::class; + protected $reportClass = ReportGenerator::class; /** * Name of the report for use in text. diff --git a/src/Support/Reports/Projects/Annotations/ExtendedReportGenerator.php b/src/Support/Reports/Projects/Annotations/ExtendedReportGenerator.php index c3cdd5195..9bc9cd724 100644 --- a/src/Support/Reports/Projects/Annotations/ExtendedReportGenerator.php +++ b/src/Support/Reports/Projects/Annotations/ExtendedReportGenerator.php @@ -11,7 +11,7 @@ class ExtendedReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $volumeReportClass = ReportGenerator::class; + protected $reportClass = ReportGenerator::class; /** * Name of the report for use in text. diff --git a/src/Support/Reports/Projects/Annotations/FullReportGenerator.php b/src/Support/Reports/Projects/Annotations/FullReportGenerator.php index 366aed14b..6ee8c9a01 100644 --- a/src/Support/Reports/Projects/Annotations/FullReportGenerator.php +++ b/src/Support/Reports/Projects/Annotations/FullReportGenerator.php @@ -11,7 +11,7 @@ class FullReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $volumeReportClass = ReportGenerator::class; + protected $reportClass = ReportGenerator::class; /** * Name of the report for use in text. diff --git a/src/Support/Reports/Projects/ImageLabels/BasicReportGenerator.php b/src/Support/Reports/Projects/ImageLabels/BasicReportGenerator.php index 22a7dbebb..635e3cafe 100644 --- a/src/Support/Reports/Projects/ImageLabels/BasicReportGenerator.php +++ b/src/Support/Reports/Projects/ImageLabels/BasicReportGenerator.php @@ -12,7 +12,7 @@ class BasicReportGenerator extends ProjectReportGenerator * * @var string */ - protected $volumeReportClass = ReportGenerator::class; + protected $reportClass = ReportGenerator::class; /** * Name of the report for use in text. diff --git a/src/Support/Reports/Projects/ImageLabels/CsvReportGenerator.php b/src/Support/Reports/Projects/ImageLabels/CsvReportGenerator.php index bf0b22651..9da30b322 100644 --- a/src/Support/Reports/Projects/ImageLabels/CsvReportGenerator.php +++ b/src/Support/Reports/Projects/ImageLabels/CsvReportGenerator.php @@ -12,7 +12,7 @@ class CsvReportGenerator extends ProjectReportGenerator * * @var string */ - protected $volumeReportClass = ReportGenerator::class; + protected $reportClass = ReportGenerator::class; /** * Name of the report for use in text. diff --git a/src/Support/Reports/Projects/ProjectReportGenerator.php b/src/Support/Reports/Projects/ProjectReportGenerator.php index 7f8375b83..726cba00e 100644 --- a/src/Support/Reports/Projects/ProjectReportGenerator.php +++ b/src/Support/Reports/Projects/ProjectReportGenerator.php @@ -13,11 +13,11 @@ class ProjectReportGenerator extends ReportGenerator use MakesZipArchives; /** - * The class of the volume report generator to use for this project report. + * The class of the report generator to use for this project report. * * @var string */ - protected $volumeReportClass; + protected $reportClass; /** * File extension of the report file. @@ -55,6 +55,6 @@ public function generateReport($path) */ protected function getReportGenerator() { - return new $this->volumeReportClass($this->options); + return new $this->reportClass($this->options); } } diff --git a/src/Support/Reports/Projects/VideoAnnotations/CsvReportGenerator.php b/src/Support/Reports/Projects/VideoAnnotations/CsvReportGenerator.php new file mode 100644 index 000000000..d377e191b --- /dev/null +++ b/src/Support/Reports/Projects/VideoAnnotations/CsvReportGenerator.php @@ -0,0 +1,56 @@ +source->id); + + foreach (Video::where('project_id', $this->source->id)->get() as $video) { + $report = $this->getReportGenerator(); + $file = File::makeTmp(); + $report->generate($video, $file->getPath()); + // The individual video reports should be deleted again after + // the ZIP of this report was created. + $this->tmpFiles[] = $file; + $filesForZip[$file->getPath()] = $video->id.'_'.$report->getFullFilename(); + } + + + $this->makeZip($filesForZip, $path); + } +} diff --git a/src/Support/Reports/ReportGenerator.php b/src/Support/Reports/ReportGenerator.php index f637808bf..1fb89c3cf 100644 --- a/src/Support/Reports/ReportGenerator.php +++ b/src/Support/Reports/ReportGenerator.php @@ -78,9 +78,11 @@ public static function get($sourceClass, ReportType $type, $options = []) if (class_exists($fullClass)) { return new $fullClass($options); } + + throw new Exception("Report generator {$fullClass} does not exist."); } - return; + throw new Exception("Source class {$sourceClass} does not exist."); } /** diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index 8eb124bca..4a299e00d 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1 @@ -biigle.$declare("reports.api.volumes",Vue.resource("/api/v1/volumes{/id}/export-area")),biigle.$require("annotations.components.settingsTabPlugins").exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},exportAreaApi:function(){return biigle.$require("reports.api.volumes")},volumeId:function(){return biigle.$require("annotations.volumeId")},messages:function(){return biigle.$require("messages.store")},layer:function(){return new ol.layer.Vector({source:new ol.source.Vector({features:new ol.Collection}),style:[new ol.style.Style({stroke:new ol.style.Stroke({color:"white",width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:"white",width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new ol.interaction.Draw({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(e,t){e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var r=t;return r?r.setCoordinates([e]):r=new ol.geom.Rectangle([e]),r}})},modifyInteraction:function(){return new ol.interaction.Modify({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:ol.events.condition.never})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this,t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.exportAreaApi.delete({id:this.volumeId}).then(function(){e.exportArea=null}).catch(function(i){t.addFeature(r),e.messages.handleErrorResponse(i)})}},updateCurrentImage:function(e,t){this.currentImage=t},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var e=this.currentImage.tiled?0:this.height,t=new ol.geom.Rectangle([[[this.exportArea[0],e-this.exportArea[1]],[this.exportArea[0],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[1]]]]);this.layer.getSource().addFeature(new ol.Feature({geometry:t}))}},handleModifyend:function(e){this.updateExportArea(e.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(e){var t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.updateExportArea(e.feature).catch(function(){t.clear(),r&&t.addFeature(r)})},updateExportArea:function(e){var t=this,r=e.getGeometry().getCoordinates()[0],i=this.currentImage.tiled?0:this.height;r=[r[0][0],i-r[0][1],r[2][0],i-r[2][1]].map(Math.round);var n=this.exportAreaApi.save({id:this.volumeId},{coordinates:r}).then(function(){t.exportArea=r});return n.catch(this.messages.handleErrorResponse),n},extendMap:function(e){e.addLayer(this.layer),e.addInteraction(this.drawInteraction),e.addInteraction(this.modifyInteraction)}},watch:{opacity:function(e,t){e<1?this.settings.set("exportAreaOpacity",e):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(e)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend);var e=biigle.$require("events");e.$on("images.change",this.updateCurrentImage),e.$on("annotations.map.init",this.extendMap)}}; \ No newline at end of file +biigle.$require("annotations.components.settingsTabPlugins").exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},exportAreaApi:function(){return biigle.$require("reports.api.volumes")},volumeId:function(){return biigle.$require("annotations.volumeId")},messages:function(){return biigle.$require("messages.store")},layer:function(){return new ol.layer.Vector({source:new ol.source.Vector({features:new ol.Collection}),style:[new ol.style.Style({stroke:new ol.style.Stroke({color:"white",width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:"white",width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new ol.interaction.Draw({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(e,t){e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var r=t;return r?r.setCoordinates([e]):r=new ol.geom.Rectangle([e]),r}})},modifyInteraction:function(){return new ol.interaction.Modify({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:ol.events.condition.never})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this,t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.exportAreaApi.delete({id:this.volumeId}).then(function(){e.exportArea=null}).catch(function(i){t.addFeature(r),e.messages.handleErrorResponse(i)})}},updateCurrentImage:function(e,t){this.currentImage=t},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var e=this.currentImage.tiled?0:this.height,t=new ol.geom.Rectangle([[[this.exportArea[0],e-this.exportArea[1]],[this.exportArea[0],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[1]]]]);this.layer.getSource().addFeature(new ol.Feature({geometry:t}))}},handleModifyend:function(e){this.updateExportArea(e.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(e){var t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.updateExportArea(e.feature).catch(function(){t.clear(),r&&t.addFeature(r)})},updateExportArea:function(e){var t=this,r=e.getGeometry().getCoordinates()[0],i=this.currentImage.tiled?0:this.height;r=[r[0][0],i-r[0][1],r[2][0],i-r[2][1]].map(Math.round);var n=this.exportAreaApi.save({id:this.volumeId},{coordinates:r}).then(function(){t.exportArea=r});return n.catch(this.messages.handleErrorResponse),n},extendMap:function(e){e.addLayer(this.layer),e.addInteraction(this.drawInteraction),e.addInteraction(this.modifyInteraction)}},watch:{opacity:function(e,t){e<1?this.settings.set("exportAreaOpacity",e):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(e)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend);var e=biigle.$require("events");e.$on("images.change",this.updateCurrentImage),e.$on("annotations.map.init",this.extendMap)}},biigle.$declare("reports.api.volumes",Vue.resource("/api/v1/volumes{/id}/export-area")); \ No newline at end of file diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index 91f27c56c..853c883ca 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -biigle.$viewModel("project-report-form",function(e){var t=biigle.$require("reports.projectId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees"],ImageLabels:["separate_label_trees"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.projectReports"))}}})}),biigle.$viewModel("volume-report-form",function(e){var t=biigle.$require("reports.volumeId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id"],ImageLabels:["separate_label_trees","annotation_session_id"]},options:{annotation_session_id:null}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.volumeReports"))}}})}),biigle.$declare("reports.api.projectReports",Vue.resource("/api/v1/projects{/id}/reports")),biigle.$declare("reports.api.volumeReports",Vue.resource("/api/v1/volumes{/id}/reports")),biigle.$component("reports.mixins.reportForm",{mixins:[biigle.$require("core.mixins.loader")],data:{variants:{Annotations:["Basic","Extended","Area","Full","Csv"],ImageLabels:["Basic","Csv"]},allowedOptions:{},selectedType:"Annotations",selectedVariant:"Basic",success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1}},computed:{availableReportTypes:function(){var e={};return biigle.$require("reports.reportTypes").forEach(function(t){e[t.name]=t.id}),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},selectedOptions:function(){var e={};return this.allowedOptions[this.selectedType].forEach(function(t){e[t]=this.options[t]},this),e.type_id=this.selectedReportTypeId,e}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:biigle.$require("messages.store").handleErrorResponse(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.selectedType===e&&this.selectedVariant===t}}}); \ No newline at end of file +biigle.$viewModel("project-report-form",function(e){var t=biigle.$require("reports.projectId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees"],ImageLabels:["separate_label_trees"],VideoAnnotations:["separate_label_trees"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.projectReports"))}}})}),biigle.$viewModel("volume-report-form",function(e){var t=biigle.$require("reports.volumeId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id"],ImageLabels:["separate_label_trees","annotation_session_id"]},options:{annotation_session_id:null}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.volumeReports"))}}})}),biigle.$declare("reports.api.projectReports",Vue.resource("/api/v1/projects{/id}/reports")),biigle.$declare("reports.api.volumeReports",Vue.resource("/api/v1/volumes{/id}/reports")),biigle.$component("reports.mixins.reportForm",{mixins:[biigle.$require("core.mixins.loader")],data:{allowedOptions:{},selectedType:"Annotations",selectedVariant:"Basic",success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1}},computed:{reportTypes:function(){return biigle.$require("reports.reportTypes")},variants:function(){var e={};return this.reportTypes.forEach(function(t){var r=t.name.split("\\");e.hasOwnProperty(r[0])||(e[r[0]]=[]),e[r[0]].push(r[1])}),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach(function(t){e[t.name]=t.id}),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e={};return this.allowedOptions[this.selectedType].forEach(function(t){e[t]=this.options[t]},this),e.type_id=this.selectedReportTypeId,e}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:biigle.$require("messages.store").handleErrorResponse(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.selectedType===e&&this.selectedVariant===t}}}); \ No newline at end of file diff --git a/src/resources/assets/js/reports/exportProjectReportForm.js b/src/resources/assets/js/reports/exportProjectReportForm.js index d4a0dabb7..5a6b88960 100644 --- a/src/resources/assets/js/reports/exportProjectReportForm.js +++ b/src/resources/assets/js/reports/exportProjectReportForm.js @@ -16,7 +16,10 @@ biigle.$viewModel('project-report-form', function (element) { ], 'ImageLabels': [ 'separate_label_trees' - ] + ], + 'VideoAnnotations': [ + 'separate_label_trees' + ], }, }, methods: { diff --git a/src/resources/assets/js/reports/mixins/reportForm.js b/src/resources/assets/js/reports/mixins/reportForm.js index ea77a6ab5..bc316bfad 100644 --- a/src/resources/assets/js/reports/mixins/reportForm.js +++ b/src/resources/assets/js/reports/mixins/reportForm.js @@ -6,19 +6,6 @@ biigle.$component('reports.mixins.reportForm', { mixins: [biigle.$require('core.mixins.loader')], data: { - variants: { - 'Annotations': [ - 'Basic', - 'Extended', - 'Area', - 'Full', - 'Csv', - ], - 'ImageLabels': [ - 'Basic', - 'Csv', - ] - }, allowedOptions: {}, selectedType: 'Annotations', selectedVariant: 'Basic', @@ -31,9 +18,24 @@ biigle.$component('reports.mixins.reportForm', { }, }, computed: { + reportTypes: function () { + return biigle.$require('reports.reportTypes'); + }, + variants: function () { + var variants = {}; + this.reportTypes.forEach(function (type) { + var fragments = type.name.split('\\'); + if (!variants.hasOwnProperty(fragments[0])) { + variants[fragments[0]] = []; + } + variants[fragments[0]].push(fragments[1]); + }); + + return variants; + }, availableReportTypes: function () { var types = {}; - biigle.$require('reports.reportTypes').forEach(function (type) { + this.reportTypes.forEach(function (type) { types[type.name] = type.id; }); @@ -45,6 +47,9 @@ biigle.$component('reports.mixins.reportForm', { availableVariants: function () { return this.variants[this.selectedType]; }, + onlyOneAvailableVariant: function () { + return this.availableVariants.length === 1; + }, selectedOptions: function () { var options = {}; this.allowedOptions[this.selectedType].forEach(function (allowed) { diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index b1a2d9503..436de924c 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -201,5 +201,41 @@
  • Label name
  • Label hierarchy (see the extended annotation report on how to interpret a label hierarchy)
  • + + @if (class_exists(Biigle\Modules\Videos\VideosServiceProvider::class)) +

    Video annotation reports

    +

    CSV

    +

    + The CSV report is similar to the annotation CSV report. +

    +

    + Each CSV file contains one row for each video annotation label. Since a video annotation can have multiple different labels, there may be multiple rows for a single video annotation. The columns are as follows: +

    +
      +
    1. Video annotation label ID (not the video annotation ID)
    2. +
    3. Label ID
    4. +
    5. Label name
    6. +
    7. Label hierarchy (see the extended report on how to interpret a label hierarchy)
    8. +
    9. ID of the user who created/attached the video annotation label
    10. +
    11. User firstname
    12. +
    13. User lastname
    14. +
    15. Video ID
    16. +
    17. Video name
    18. +
    19. Video annotation shape ID
    20. +
    21. Video annotation shape name
    22. +
    23. + Video annotation points +

      + The video annotation points are encoded as nested JSON arrays of alternating x and y values (e.g. [[x11,y11,x12,y12,...],[x21,y21,...],...]). Each array describes the video annotation for a specific key frame (time). For circles, the third value of the points array is the radius of the circle. An empty array means there is a gap in the video annotation. +

      +
    24. +
    25. + Video annotation key frames +

      + The key frames are encoded as a JSON array. Each key frame represents a time that corresponds to the ponts array at the same index. null menas there is a gap in the video annotation. +

      +
    26. +
    + @endif
    @endsection diff --git a/src/resources/views/partials/reportTypeInfo.blade.php b/src/resources/views/partials/reportTypeInfo.blade.php index 2c5c5793a..653d43370 100644 --- a/src/resources/views/partials/reportTypeInfo.blade.php +++ b/src/resources/views/partials/reportTypeInfo.blade.php @@ -19,3 +19,6 @@
    The CSV image label report is intended for subsequent processing and lists the image labels at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema.
    +
    + The CSV video annotation report is intended for subsequent processing and lists the video annotation labels at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. +
    diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index 99106b071..6959117b0 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -26,35 +26,42 @@

    Request report for {{$project->name}}

    - Request a project report to consolidate data of all volumes of the project into downloadable files. + @if ($hasVolume && $hasVideo) + Request a project report to consolidate data of all volumes or videos of the project into downloadable files. + @elseif ($hasVolume) + Request a project report to consolidate data of all volumes of the project into downloadable files. + @else + Request a project report to consolidate data of all videos of the project into downloadable files. + @endif

    -
    -
    -
    - -
    -
    - -
    -
    - -
    +
    + +
    + @if ($hasVolume) +
    +
    -
    -
    - - -
    -
    -
    - @include('reports::partials.reportTypeInfo') +
    + +
    + @endif + @if ($hasVideo) +
    + +
    + @endif
    -
    -
    +
    + + + @include('reports::partials.reportTypeInfo') +
    +
    +
    @if ($hasExportArea)
    +
    + Annotations that are outside of the export area will be discarded for this report. +
    -
    - Annotations that are outside of the export area will be discarded for this report. -
    -
    +
    -
    -
    - Only the newest label of each annotation will be included in the report. +
    + Only the newest label of each annotation will be included in the report. +
    -
    -
    -
    - -
    -
    +
    +
    +
    -
    +
    +
    Annotations belonging to different label trees will be separated to different files/sheets.
    diff --git a/src/resources/views/volumeReports.blade.php b/src/resources/views/volumeReports.blade.php index 5df8759cf..2279dbde6 100644 --- a/src/resources/views/volumeReports.blade.php +++ b/src/resources/views/volumeReports.blade.php @@ -29,50 +29,40 @@ Request a volume report to consolidate data of the volume into downloadable files.

    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    +
    + +
    +
    +
    -
    - - +
    +
    -
    - @include('reports::partials.reportTypeInfo') -
    +
    +
    + + + @include('reports::partials.reportTypeInfo')
    @if ($annotationSessions->count() > 0) -
    -
    -
    - - -
    -
    -
    -
    +
    + + +
    +
    Only annotations that were created during the selected annotation session will be included in the report.
    @endif -
    -
    +
    +
    @if ($volume->exportArea)
    +
    + Annotations that are outside of the export area will be discarded for this report. +
    -
    - Annotations that are outside of the export area will be discarded for this report. -
    -
    +
    -
    -
    - Only the newest label of each annotation will be included in the report. +
    + Only the newest label of each annotation will be included in the report. +
    -
    -
    -
    - -
    -
    +
    +
    +
    -
    +
    +
    Annotations belonging to different label trees will be separated to different files/sheets.
    diff --git a/tests/Http/Controllers/Views/ProjectsReportControllerTest.php b/tests/Http/Controllers/Views/ProjectsReportControllerTest.php index a6b9ae19d..79c52c18b 100644 --- a/tests/Http/Controllers/Views/ProjectsReportControllerTest.php +++ b/tests/Http/Controllers/Views/ProjectsReportControllerTest.php @@ -3,6 +3,7 @@ namespace Biigle\Tests\Modules\Reports\Http\Controllers\Views; use ApiTestCase; +use Biigle\Tests\Modules\Videos\VideoTest; class ProjectsReportControllerTest extends ApiTestCase { @@ -12,19 +13,32 @@ public function testShow() // Create the volume by calling it. $this->volume(); - $response = $this->get("projects/{$id}/reports")->assertStatus(302); + $this->get("projects/{$id}/reports")->assertStatus(302); $this->beUser(); - $response = $this->get("projects/{$id}/reports")->assertStatus(403); + $this->get("projects/{$id}/reports")->assertStatus(403); $this->beGuest(); - $response = $this->get("projects/{$id}/reports")->assertStatus(200); + $this->get("projects/{$id}/reports")->assertStatus(200); } public function testShowEmpty() { $id = $this->project()->id; $this->beGuest(); - $response = $this->get("projects/{$id}/reports")->assertStatus(404); + $this->get("projects/{$id}/reports")->assertStatus(404); + } + + public function testShowVideo() + { + if (!class_exists(VideoTest::class)) { + $this->markTestSkipped('Requires biigle/videos'); + } + + $id = $this->project()->id; + $this->beGuest(); + $this->get("projects/{$id}/reports")->assertStatus(404); + VideoTest::create(['project_id' => $id]); + $this->get("projects/{$id}/reports")->assertStatus(200); } } diff --git a/tests/Support/Reports/Projects/VideoAnnotations/CsvReportGeneratorTest.php b/tests/Support/Reports/Projects/VideoAnnotations/CsvReportGeneratorTest.php new file mode 100644 index 000000000..fdea37470 --- /dev/null +++ b/tests/Support/Reports/Projects/VideoAnnotations/CsvReportGeneratorTest.php @@ -0,0 +1,20 @@ +markTestSkipped('Requires the biigle/videos module.'); + } + $generator = new CsvReportGenerator; + $this->assertEquals('CSV video annotation report', $generator->getName()); + $this->assertEquals('csv_video_annotation_report', $generator->getFilename()); + } +} diff --git a/tests/Support/Reports/ReportGeneratorTest.php b/tests/Support/Reports/ReportGeneratorTest.php index 94372bca5..0cd89927d 100644 --- a/tests/Support/Reports/ReportGeneratorTest.php +++ b/tests/Support/Reports/ReportGeneratorTest.php @@ -18,8 +18,8 @@ class ReportGeneratorTest extends TestCase { public function testGetNotExists() { - $type = factory(ReportType::class)->make(); - $this->assertNull(ReportGenerator::get(Volume::class, $type)); + $this->expectException(Exception::class); + ReportGenerator::get(Volume::class, factory(ReportType::class)->make()); } public function testGet() From 2233baab475c9f20d1d2d5f65722a11b311a4669 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Mar 2019 12:30:20 +0100 Subject: [PATCH 156/407] Implement view for video reports --- .../Api/Videos/VideoReportController.php | 70 ++++++++++++++++++ .../Views/VideoReportsController.php | 28 ++++++++ src/Http/routes.php | 13 ++++ src/public/assets/scripts/annotations.js | 2 +- src/public/assets/scripts/main.js | 2 +- .../assets/js/reports/api/videoReports.js | 14 ++++ .../js/reports/exportVideoReportForm.js | 25 +++++++ .../assets/js/reports/mixins/reportForm.js | 8 ++- .../views/projectsShowToolbar.blade.php | 4 +- src/resources/views/videoReports.blade.php | 65 +++++++++++++++++ .../Api/Videos/VideoReportControllerTest.php | 72 +++++++++++++++++++ ...st.php => ProjectReportControllerTest.php} | 2 +- .../Views/VideoReportControllerTest.php | 26 +++++++ ...est.php => VolumeReportControllerTest.php} | 2 +- 14 files changed, 325 insertions(+), 8 deletions(-) create mode 100644 src/Http/Controllers/Api/Videos/VideoReportController.php create mode 100644 src/Http/Controllers/Views/VideoReportsController.php create mode 100644 src/resources/assets/js/reports/api/videoReports.js create mode 100644 src/resources/assets/js/reports/exportVideoReportForm.js create mode 100644 src/resources/views/videoReports.blade.php create mode 100644 tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php rename tests/Http/Controllers/Views/{ProjectsReportControllerTest.php => ProjectReportControllerTest.php} (95%) create mode 100644 tests/Http/Controllers/Views/VideoReportControllerTest.php rename tests/Http/Controllers/Views/{VolumesReportControllerTest.php => VolumeReportControllerTest.php} (90%) diff --git a/src/Http/Controllers/Api/Videos/VideoReportController.php b/src/Http/Controllers/Api/Videos/VideoReportController.php new file mode 100644 index 000000000..8b53b52d9 --- /dev/null +++ b/src/Http/Controllers/Api/Videos/VideoReportController.php @@ -0,0 +1,70 @@ +authorize('access', $video); + $this->validate($request, [ + 'type_id' => [ + 'required', + Rule::in([ReportType::videoAnnotationsCsvId()]), + 'exists:report_types,id', + ], + ]); + + $report = new Report; + $report->source()->associate($video); + $report->type_id = $request->input('type_id'); + $report->user()->associate($request->user()); + $report->options = $this->getOptions($request); + $report->save(); + + GenerateReportJob::dispatch($report)->onQueue('high'); + } + + /** + * Get the options of the requested report. + * + * @param Request $request + * @return array + */ + public function getOptions(Request $request) + { + $options = parent::getOptions($request); + + return array_merge($options, [ + 'annotationSession' => $request->input('annotation_session_id'), + ]); + } +} diff --git a/src/Http/Controllers/Views/VideoReportsController.php b/src/Http/Controllers/Views/VideoReportsController.php new file mode 100644 index 000000000..8e95b0bd5 --- /dev/null +++ b/src/Http/Controllers/Views/VideoReportsController.php @@ -0,0 +1,28 @@ +authorize('access', $video); + $types = ReportType::where('name', 'like', 'VideoAnnotations%')->get(); + + return view('reports::videoReports', [ + 'video' => $video, + 'reportTypes' => $types, + ]); + } +} diff --git a/src/Http/routes.php b/src/Http/routes.php index 01ae7b53d..ba4ab75bd 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -38,6 +38,12 @@ $router->post('users/my/settings/reports', [ 'uses' => 'SettingsController@store', ]); + + if (class_exists(Biigle\Modules\Videos\VideosServiceProvider::class)) { + $router->post('videos/{id}/reports', [ + 'uses' => 'Videos\VideoReportController@store', + ]); + } }); $router->group([ @@ -58,4 +64,11 @@ 'uses' => 'ReportsController@index', 'as' => 'reports', ]); + + if (class_exists(Biigle\Modules\Videos\VideosServiceProvider::class)) { + $router->get('videos/{id}/reports', [ + 'uses' => 'VideoReportsController@show', + 'as' => 'video-reports', + ]); + } }); diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index 4a299e00d..8eb124bca 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1 @@ -biigle.$require("annotations.components.settingsTabPlugins").exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},exportAreaApi:function(){return biigle.$require("reports.api.volumes")},volumeId:function(){return biigle.$require("annotations.volumeId")},messages:function(){return biigle.$require("messages.store")},layer:function(){return new ol.layer.Vector({source:new ol.source.Vector({features:new ol.Collection}),style:[new ol.style.Style({stroke:new ol.style.Stroke({color:"white",width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:"white",width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new ol.interaction.Draw({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(e,t){e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var r=t;return r?r.setCoordinates([e]):r=new ol.geom.Rectangle([e]),r}})},modifyInteraction:function(){return new ol.interaction.Modify({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:ol.events.condition.never})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this,t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.exportAreaApi.delete({id:this.volumeId}).then(function(){e.exportArea=null}).catch(function(i){t.addFeature(r),e.messages.handleErrorResponse(i)})}},updateCurrentImage:function(e,t){this.currentImage=t},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var e=this.currentImage.tiled?0:this.height,t=new ol.geom.Rectangle([[[this.exportArea[0],e-this.exportArea[1]],[this.exportArea[0],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[1]]]]);this.layer.getSource().addFeature(new ol.Feature({geometry:t}))}},handleModifyend:function(e){this.updateExportArea(e.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(e){var t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.updateExportArea(e.feature).catch(function(){t.clear(),r&&t.addFeature(r)})},updateExportArea:function(e){var t=this,r=e.getGeometry().getCoordinates()[0],i=this.currentImage.tiled?0:this.height;r=[r[0][0],i-r[0][1],r[2][0],i-r[2][1]].map(Math.round);var n=this.exportAreaApi.save({id:this.volumeId},{coordinates:r}).then(function(){t.exportArea=r});return n.catch(this.messages.handleErrorResponse),n},extendMap:function(e){e.addLayer(this.layer),e.addInteraction(this.drawInteraction),e.addInteraction(this.modifyInteraction)}},watch:{opacity:function(e,t){e<1?this.settings.set("exportAreaOpacity",e):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(e)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend);var e=biigle.$require("events");e.$on("images.change",this.updateCurrentImage),e.$on("annotations.map.init",this.extendMap)}},biigle.$declare("reports.api.volumes",Vue.resource("/api/v1/volumes{/id}/export-area")); \ No newline at end of file +biigle.$declare("reports.api.volumes",Vue.resource("/api/v1/volumes{/id}/export-area")),biigle.$require("annotations.components.settingsTabPlugins").exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},exportAreaApi:function(){return biigle.$require("reports.api.volumes")},volumeId:function(){return biigle.$require("annotations.volumeId")},messages:function(){return biigle.$require("messages.store")},layer:function(){return new ol.layer.Vector({source:new ol.source.Vector({features:new ol.Collection}),style:[new ol.style.Style({stroke:new ol.style.Stroke({color:"white",width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:"white",width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new ol.interaction.Draw({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(e,t){e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var r=t;return r?r.setCoordinates([e]):r=new ol.geom.Rectangle([e]),r}})},modifyInteraction:function(){return new ol.interaction.Modify({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:ol.events.condition.never})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this,t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.exportAreaApi.delete({id:this.volumeId}).then(function(){e.exportArea=null}).catch(function(i){t.addFeature(r),e.messages.handleErrorResponse(i)})}},updateCurrentImage:function(e,t){this.currentImage=t},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var e=this.currentImage.tiled?0:this.height,t=new ol.geom.Rectangle([[[this.exportArea[0],e-this.exportArea[1]],[this.exportArea[0],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[1]]]]);this.layer.getSource().addFeature(new ol.Feature({geometry:t}))}},handleModifyend:function(e){this.updateExportArea(e.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(e){var t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.updateExportArea(e.feature).catch(function(){t.clear(),r&&t.addFeature(r)})},updateExportArea:function(e){var t=this,r=e.getGeometry().getCoordinates()[0],i=this.currentImage.tiled?0:this.height;r=[r[0][0],i-r[0][1],r[2][0],i-r[2][1]].map(Math.round);var n=this.exportAreaApi.save({id:this.volumeId},{coordinates:r}).then(function(){t.exportArea=r});return n.catch(this.messages.handleErrorResponse),n},extendMap:function(e){e.addLayer(this.layer),e.addInteraction(this.drawInteraction),e.addInteraction(this.modifyInteraction)}},watch:{opacity:function(e,t){e<1?this.settings.set("exportAreaOpacity",e):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(e)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend);var e=biigle.$require("events");e.$on("images.change",this.updateCurrentImage),e.$on("annotations.map.init",this.extendMap)}}; \ No newline at end of file diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index 853c883ca..6ad20dddd 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -biigle.$viewModel("project-report-form",function(e){var t=biigle.$require("reports.projectId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees"],ImageLabels:["separate_label_trees"],VideoAnnotations:["separate_label_trees"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.projectReports"))}}})}),biigle.$viewModel("volume-report-form",function(e){var t=biigle.$require("reports.volumeId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id"],ImageLabels:["separate_label_trees","annotation_session_id"]},options:{annotation_session_id:null}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.volumeReports"))}}})}),biigle.$declare("reports.api.projectReports",Vue.resource("/api/v1/projects{/id}/reports")),biigle.$declare("reports.api.volumeReports",Vue.resource("/api/v1/volumes{/id}/reports")),biigle.$component("reports.mixins.reportForm",{mixins:[biigle.$require("core.mixins.loader")],data:{allowedOptions:{},selectedType:"Annotations",selectedVariant:"Basic",success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1}},computed:{reportTypes:function(){return biigle.$require("reports.reportTypes")},variants:function(){var e={};return this.reportTypes.forEach(function(t){var r=t.name.split("\\");e.hasOwnProperty(r[0])||(e[r[0]]=[]),e[r[0]].push(r[1])}),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach(function(t){e[t.name]=t.id}),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e={};return this.allowedOptions[this.selectedType].forEach(function(t){e[t]=this.options[t]},this),e.type_id=this.selectedReportTypeId,e}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:biigle.$require("messages.store").handleErrorResponse(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.selectedType===e&&this.selectedVariant===t}}}); \ No newline at end of file +biigle.$viewModel("project-report-form",function(e){var t=biigle.$require("reports.projectId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees"],ImageLabels:["separate_label_trees"],VideoAnnotations:["separate_label_trees"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.projectReports"))}}})}),biigle.$viewModel("video-report-form",function(e){var t=biigle.$require("reports.videoId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{selectedType:"VideoAnnotations",selectedVariant:"Csv",allowedOptions:{VideoAnnotations:["separate_label_trees"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.videoReports"))}}})}),biigle.$viewModel("volume-report-form",function(e){var t=biigle.$require("reports.volumeId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id"],ImageLabels:["separate_label_trees","annotation_session_id"]},options:{annotation_session_id:null}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.volumeReports"))}}})}),biigle.$declare("reports.api.projectReports",Vue.resource("/api/v1/projects{/id}/reports")),biigle.$declare("reports.api.videoReports",Vue.resource("/api/v1/videos{/id}/reports")),biigle.$declare("reports.api.volumeReports",Vue.resource("/api/v1/volumes{/id}/reports")),biigle.$component("reports.mixins.reportForm",{mixins:[biigle.$require("core.mixins.loader")],data:{allowedOptions:{},selectedType:"",selectedVariant:"",success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1}},computed:{reportTypes:function(){return biigle.$require("reports.reportTypes")},variants:function(){var e={};return this.reportTypes.forEach(function(t){var r=t.name.split("\\");e.hasOwnProperty(r[0])||(e[r[0]]=[]),e[r[0]].push(r[1])}),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach(function(t){e[t.name]=t.id}),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e={};return this.allowedOptions[this.selectedType].forEach(function(t){e[t]=this.options[t]},this),e.type_id=this.selectedReportTypeId,e}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:biigle.$require("messages.store").handleErrorResponse(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.selectedType===e&&this.selectedVariant===t}},created:function(){this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0]}}); \ No newline at end of file diff --git a/src/resources/assets/js/reports/api/videoReports.js b/src/resources/assets/js/reports/api/videoReports.js new file mode 100644 index 000000000..c5131d028 --- /dev/null +++ b/src/resources/assets/js/reports/api/videoReports.js @@ -0,0 +1,14 @@ +/** + * Resource for requesting reports for videos + * + * var resource = biigle.$require('reports.api.videoReports'); + * + * Request a CSV report: + * + * resource.save({id: 1}, { + * type_id: 8, + * separate_label_trees: true, + * }).then(...) + * + */ +biigle.$declare('reports.api.videoReports', Vue.resource('/api/v1/videos{/id}/reports')); diff --git a/src/resources/assets/js/reports/exportVideoReportForm.js b/src/resources/assets/js/reports/exportVideoReportForm.js new file mode 100644 index 000000000..fd2dfda5f --- /dev/null +++ b/src/resources/assets/js/reports/exportVideoReportForm.js @@ -0,0 +1,25 @@ +/** + * The form for requesting a video report + */ +biigle.$viewModel('video-report-form', function (element) { + var videoId = biigle.$require('reports.videoId'); + + new Vue({ + el: element, + mixins: [biigle.$require('reports.mixins.reportForm')], + data: { + selectedType: 'VideoAnnotations', + selectedVariant: 'Csv', + allowedOptions: { + 'VideoAnnotations': [ + 'separate_label_trees', + ], + }, + }, + methods: { + submit: function () { + this.request(videoId, biigle.$require('reports.api.videoReports')); + }, + }, + }); +}); diff --git a/src/resources/assets/js/reports/mixins/reportForm.js b/src/resources/assets/js/reports/mixins/reportForm.js index bc316bfad..c552a453b 100644 --- a/src/resources/assets/js/reports/mixins/reportForm.js +++ b/src/resources/assets/js/reports/mixins/reportForm.js @@ -7,8 +7,8 @@ biigle.$component('reports.mixins.reportForm', { mixins: [biigle.$require('core.mixins.loader')], data: { allowedOptions: {}, - selectedType: 'Annotations', - selectedVariant: 'Basic', + selectedType: '', + selectedVariant: '', success: false, errors: {}, options: { @@ -100,4 +100,8 @@ biigle.$component('reports.mixins.reportForm', { return this.selectedType === type && this.selectedVariant === variant; }, }, + created: function () { + this.selectedType = Object.keys(this.variants)[0]; + this.selectedVariant = this.availableVariants[0]; + }, }); diff --git a/src/resources/views/projectsShowToolbar.blade.php b/src/resources/views/projectsShowToolbar.blade.php index d1e54fa8f..c1bbe97ec 100644 --- a/src/resources/views/projectsShowToolbar.blade.php +++ b/src/resources/views/projectsShowToolbar.blade.php @@ -1,5 +1,5 @@ -@if ($volumes->isEmpty()) - @else diff --git a/src/resources/views/videoReports.blade.php b/src/resources/views/videoReports.blade.php new file mode 100644 index 000000000..f8e1fe5cd --- /dev/null +++ b/src/resources/views/videoReports.blade.php @@ -0,0 +1,65 @@ +@extends('app') + +@section('title', "Reports for {$video->name}") + +@push('scripts') + + +@endpush + +@push('styles') + +@endpush + +@section('navbar') + +@endsection + +@section('content') +
    +
    +
    +

    Request report for {{$video->name}}

    +

    + Request a video report to consolidate data of the video into downloadable files. +

    + +
    + + + @include('reports::partials.reportTypeInfo') +
    +
    +
    + +
    +
    +
    + Annotations belonging to different label trees will be separated to different files. +
    +
    +
    + The requested report will be prepared. You will get notified when it is ready. Now you can request a new report or go back to the video. +
    +
    + back + +
    + +

    + ProTip: You can request reports for a whole project from the project overview page. +

    +
    +
    +
    +@endsection diff --git a/tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php b/tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php new file mode 100644 index 000000000..e7c988190 --- /dev/null +++ b/tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php @@ -0,0 +1,72 @@ +markTestSkipped('Requires the biigle/videos module.'); + } + } + + public function testStore() + { + $videoId = VideoTest::create(['project_id' => $this->project()->id])->id; + $typeId = ReportType::videoAnnotationsCsvId(); + + $this->doTestApiRoute('POST', "api/v1/videos/{$videoId}/reports"); + + $this->beUser(); + $response = $this->json('POST', "api/v1/videos/{$videoId}/reports") + ->assertStatus(403); + + $this->beGuest(); + $response = $this->json('POST', "api/v1/videos/{$videoId}/reports") + ->assertStatus(422); + + $this->expectsJobs(GenerateReportJob::class); + $response = $this->json('POST', "api/v1/videos/{$videoId}/reports", [ + 'type_id' => $typeId, + ]) + ->assertStatus(200); + + $job = end($this->dispatchedJobs); + $this->assertEquals('high', $job->queue); + $report = $job->report; + $this->assertEquals($typeId, $report->type_id); + $this->assertEquals($videoId, $report->source_id); + $this->assertEquals(false, $report->options['exportArea']); + $this->assertEquals(false, $report->options['newestLabel']); + + $response = $this->json('POST', "api/v1/videos/{$videoId}/reports", [ + 'type_id' => $typeId, + 'separate_label_trees' => true, + ]) + ->assertStatus(200); + + $job = end($this->dispatchedJobs); + $this->assertEquals('high', $job->queue); + $report = $job->report; + $this->assertEquals($typeId, $report->type_id); + $this->assertEquals($videoId, $report->source_id); + $this->assertEquals(true, $report->options['separateLabelTrees']); + } + + public function testStoreVolumeAnnotations() + { + $videoId = VideoTest::create(['project_id' => $this->project()->id])->id; + $typeId = ReportType::annotationsCsvId(); + + $this->beGuest(); + $this->postJson("api/v1/videos/{$videoId}/reports", ['type_id' => $typeId]) + ->assertStatus(422); + } +} diff --git a/tests/Http/Controllers/Views/ProjectsReportControllerTest.php b/tests/Http/Controllers/Views/ProjectReportControllerTest.php similarity index 95% rename from tests/Http/Controllers/Views/ProjectsReportControllerTest.php rename to tests/Http/Controllers/Views/ProjectReportControllerTest.php index 79c52c18b..641e110af 100644 --- a/tests/Http/Controllers/Views/ProjectsReportControllerTest.php +++ b/tests/Http/Controllers/Views/ProjectReportControllerTest.php @@ -5,7 +5,7 @@ use ApiTestCase; use Biigle\Tests\Modules\Videos\VideoTest; -class ProjectsReportControllerTest extends ApiTestCase +class ProjectReportControllerTest extends ApiTestCase { public function testShow() { diff --git a/tests/Http/Controllers/Views/VideoReportControllerTest.php b/tests/Http/Controllers/Views/VideoReportControllerTest.php new file mode 100644 index 000000000..f420d3176 --- /dev/null +++ b/tests/Http/Controllers/Views/VideoReportControllerTest.php @@ -0,0 +1,26 @@ +markTestSkipped('Requires the biigle/videos module.'); + } + + $video = VideoTest::create(['project_id' => $this->project()->id]); + + $this->get("videos/{$video->id}/reports")->assertStatus(302); + + $this->beUser(); + $this->get("videos/{$video->id}/reports")->assertStatus(403); + + $this->beGuest(); + $this->get("videos/{$video->id}/reports")->assertStatus(200); + } +} diff --git a/tests/Http/Controllers/Views/VolumesReportControllerTest.php b/tests/Http/Controllers/Views/VolumeReportControllerTest.php similarity index 90% rename from tests/Http/Controllers/Views/VolumesReportControllerTest.php rename to tests/Http/Controllers/Views/VolumeReportControllerTest.php index dcdceec5f..8d599b95f 100644 --- a/tests/Http/Controllers/Views/VolumesReportControllerTest.php +++ b/tests/Http/Controllers/Views/VolumeReportControllerTest.php @@ -4,7 +4,7 @@ use ApiTestCase; -class VolumesReportControllerTest extends ApiTestCase +class VolumeReportControllerTest extends ApiTestCase { public function testShow() { From b938b32052273f906fe79f9558a645c95e952ab0 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Mar 2019 12:38:30 +0100 Subject: [PATCH 157/407] Add reports tab to video annotation tool sidebar --- src/ReportsServiceProvider.php | 2 + .../manual/tutorials/reports-schema.blade.php | 66 +++++++++---------- .../views/manualVideosSidebar.blade.php | 5 ++ src/resources/views/videosSidebar.blade.php | 1 + 4 files changed, 41 insertions(+), 33 deletions(-) create mode 100644 src/resources/views/manualVideosSidebar.blade.php create mode 100644 src/resources/views/videosSidebar.blade.php diff --git a/src/ReportsServiceProvider.php b/src/ReportsServiceProvider.php index 8f1cc338e..0cd05aadb 100644 --- a/src/ReportsServiceProvider.php +++ b/src/ReportsServiceProvider.php @@ -57,6 +57,8 @@ public function boot(Modules $modules, Router $router) 'annotationsManualSidebarSettings', 'searchTab', 'searchTabContent', + 'videosSidebar', + 'manualVideosSidebar', ], 'controllerMixins' => [ 'search' => SearchControllerMixin::class.'@index', diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index 436de924c..ac2418484 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -203,39 +203,39 @@ @if (class_exists(Biigle\Modules\Videos\VideosServiceProvider::class)) -

    Video annotation reports

    -

    CSV

    -

    - The CSV report is similar to the annotation CSV report. -

    -

    - Each CSV file contains one row for each video annotation label. Since a video annotation can have multiple different labels, there may be multiple rows for a single video annotation. The columns are as follows: -

    -
      -
    1. Video annotation label ID (not the video annotation ID)
    2. -
    3. Label ID
    4. -
    5. Label name
    6. -
    7. Label hierarchy (see the extended report on how to interpret a label hierarchy)
    8. -
    9. ID of the user who created/attached the video annotation label
    10. -
    11. User firstname
    12. -
    13. User lastname
    14. -
    15. Video ID
    16. -
    17. Video name
    18. -
    19. Video annotation shape ID
    20. -
    21. Video annotation shape name
    22. -
    23. - Video annotation points -

      - The video annotation points are encoded as nested JSON arrays of alternating x and y values (e.g. [[x11,y11,x12,y12,...],[x21,y21,...],...]). Each array describes the video annotation for a specific key frame (time). For circles, the third value of the points array is the radius of the circle. An empty array means there is a gap in the video annotation. -

      -
    24. -
    25. - Video annotation key frames -

      - The key frames are encoded as a JSON array. Each key frame represents a time that corresponds to the ponts array at the same index. null menas there is a gap in the video annotation. -

      -
    26. -
    +

    Video annotation reports

    +

    CSV

    +

    + The CSV report is similar to the annotation CSV report. +

    +

    + Each CSV file contains one row for each video annotation label. Since a video annotation can have multiple different labels, there may be multiple rows for a single video annotation. The columns are as follows: +

    +
      +
    1. Video annotation label ID (not the video annotation ID)
    2. +
    3. Label ID
    4. +
    5. Label name
    6. +
    7. Label hierarchy (see the extended report on how to interpret a label hierarchy)
    8. +
    9. ID of the user who created/attached the video annotation label
    10. +
    11. User firstname
    12. +
    13. User lastname
    14. +
    15. Video ID
    16. +
    17. Video name
    18. +
    19. Video annotation shape ID
    20. +
    21. Video annotation shape name
    22. +
    23. + Video annotation points +

      + The video annotation points are encoded as nested JSON arrays of alternating x and y values (e.g. [[x11,y11,x12,y12,...],[x21,y21,...],...]). Each array describes the video annotation for a specific key frame (time). For circles, the third value of the points array is the radius of the circle. An empty array means there is a gap in the video annotation. +

      +
    24. +
    25. + Video annotation key frames +

      + The key frames are encoded as a JSON array. Each key frame represents a time that corresponds to the ponts array at the same index. null menas there is a gap in the video annotation. +

      +
    26. +
    @endif
    @endsection diff --git a/src/resources/views/manualVideosSidebar.blade.php b/src/resources/views/manualVideosSidebar.blade.php new file mode 100644 index 000000000..51f98254a --- /dev/null +++ b/src/resources/views/manualVideosSidebar.blade.php @@ -0,0 +1,5 @@ +

    Reports

    + +

    + This tab redirects to the form to request new video reports. See the reports schema for more information. +

    diff --git a/src/resources/views/videosSidebar.blade.php b/src/resources/views/videosSidebar.blade.php new file mode 100644 index 000000000..c691c891b --- /dev/null +++ b/src/resources/views/videosSidebar.blade.php @@ -0,0 +1 @@ + From 1a869ddff4deb6994f0f0a92facbdde4748fdff9 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Mar 2019 14:29:47 +0100 Subject: [PATCH 158/407] Implement storing of report files in a storage disk References biigle/core#181 --- README.md | 9 ++++-- .../Controllers/Api/ReportsController.php | 12 ++++++-- src/Observers/ReportObserver.php | 3 +- src/Observers/UserObserver.php | 11 +++----- src/Report.php | 28 +++++++++++-------- src/Support/File.php | 2 +- .../Projects/ProjectReportGenerator.php | 24 ++++++++++------ .../VideoAnnotations/CsvReportGenerator.php | 22 ++------------- src/Support/Reports/ReportGenerator.php | 18 ++++++++---- src/config/reports.php | 8 +++--- .../Controllers/Api/ReportsControllerTest.php | 14 +++++----- tests/ReportTest.php | 24 ++++++++++++++-- .../Projects/ProjectReportGeneratorTest.php | 13 +++------ tests/Support/Reports/ReportGeneratorTest.php | 28 +++---------------- 14 files changed, 109 insertions(+), 107 deletions(-) diff --git a/README.md b/README.md index 756bced38..03f6d6c97 100644 --- a/README.md +++ b/README.md @@ -14,5 +14,10 @@ Add the following to the repositories array of your `composer.json`: 2. Add `'Biigle\Modules\Reports\ReportsServiceProvider'` to the `providers` array in `config/app.php`. 3. Run `php artisan reports:publish` to refresh the public assets of this package. Do this for every update of the package. 4. Run `pip install -r vendor/biigle/reports/requirements.txt` to install python requirements. -5. Create a `storage/reports` directory that is read/writable for the web application. The location can be configured via the `reports.reports_storage` key. -6. Make sure the `reports.tmp_storage` directory is read/writable for the web application (default is `sys_get_temp_dir()`). +5. Configure a storage disk for the report files and set the `REPORTS_STORAGE_DISK` variable to the name of this storage disk in the `.env` file. Example for a local disk: + ```php + 'reports' => [ + 'driver' => 'local', + 'root' => storage_path('reports'), + ], + ``` diff --git a/src/Http/Controllers/Api/ReportsController.php b/src/Http/Controllers/Api/ReportsController.php index cc2d11a74..546c3929b 100644 --- a/src/Http/Controllers/Api/ReportsController.php +++ b/src/Http/Controllers/Api/ReportsController.php @@ -2,8 +2,9 @@ namespace Biigle\Modules\Reports\Http\Controllers\Api; -use Response; +use Storage; use Biigle\Modules\Reports\Report; +use League\Flysystem\FileNotFoundException; use Biigle\Http\Controllers\Api\Controller; class ReportsController extends Controller @@ -25,7 +26,7 @@ class ReportsController extends Controller * @apiParam {Number} id The report ID. * * @param int $id report id - * @return \Illuminate\Http\Response + * @return mixed */ public function show($id) { @@ -33,6 +34,11 @@ public function show($id) $this->authorize('access', $report); $report->touch(); - return Response::download($report->getPath(), $report->filename); + try { + return Storage::disk(config('reports.storage_disk')) + ->download($report->id, $report->filename); + } catch (FileNotFoundException $e) { + abort(404); + } } } diff --git a/src/Observers/ReportObserver.php b/src/Observers/ReportObserver.php index 611d87d2a..4b8457d50 100644 --- a/src/Observers/ReportObserver.php +++ b/src/Observers/ReportObserver.php @@ -2,7 +2,6 @@ namespace Biigle\Modules\Reports\Observers; -use File; use Biigle\Modules\Reports\Report; class ReportObserver @@ -24,6 +23,6 @@ public function creating($report) */ public function deleted($report) { - File::delete($report->getPath()); + $report->deleteFile(); } } diff --git a/src/Observers/UserObserver.php b/src/Observers/UserObserver.php index d02855de8..6ade2ffcc 100644 --- a/src/Observers/UserObserver.php +++ b/src/Observers/UserObserver.php @@ -17,14 +17,11 @@ class UserObserver */ public function deleting($user) { - $files = Report::where('user_id', '=', $user->id) + Report::where('user_id', $user->id) ->select('id') ->get() - ->map(function ($report) { - return $report->getPath(); - }) - ->toArray(); - - File::delete($files); + ->each(function ($report) { + return $report->deleteFile(); + }); } } diff --git a/src/Report.php b/src/Report.php index 249d75bbe..050001121 100644 --- a/src/Report.php +++ b/src/Report.php @@ -3,6 +3,8 @@ namespace Biigle\Modules\Reports; use File; +use Storage; +use SplFileInfo; use ReflectionClass; use Illuminate\Database\Eloquent\Model; use Biigle\Modules\Reports\Support\Reports\ReportGenerator; @@ -103,17 +105,13 @@ public function getReportGenerator() */ public function generate() { - $this->getReportGenerator()->generate($this->source, $this->getPath()); - } - - /** - * Get the path to the report file. - * - * @return string - */ - public function getPath() - { - return config('reports.reports_storage').'/'.$this->id; + $path = $this->getReportGenerator()->generate($this->source); + try { + Storage::disk(config('reports.storage_disk')) + ->putFileAs('', new SplFileInfo($path), $this->id); + } finally { + File::delete($path); + } } /** @@ -157,4 +155,12 @@ public function getUrl() { return route('show-reports', $this->id); } + + /** + * Delete the file that belongs to this report. + */ + public function deleteFile() + { + Storage::disk(config('reports.storage_disk'))->delete($this->id); + } } diff --git a/src/Support/File.php b/src/Support/File.php index 8859e96d7..0d5d28c98 100644 --- a/src/Support/File.php +++ b/src/Support/File.php @@ -39,7 +39,7 @@ public static function makeTmp() public function __construct($path = null) { if (is_null($path)) { - $this->path = tempnam(config('reports.tmp_storage').'/', 'biigle-reports-csv-'); + $this->path = tempnam(config('reports.tmp_storage'), 'biigle-report-'); } else { $this->path = $path; } diff --git a/src/Support/Reports/Projects/ProjectReportGenerator.php b/src/Support/Reports/Projects/ProjectReportGenerator.php index 726cba00e..3a0fa123d 100644 --- a/src/Support/Reports/Projects/ProjectReportGenerator.php +++ b/src/Support/Reports/Projects/ProjectReportGenerator.php @@ -2,9 +2,6 @@ namespace Biigle\Modules\Reports\Support\Reports\Projects; -use Biigle\Volume; -use Biigle\Project; -use Biigle\Modules\Reports\Support\File; use Biigle\Modules\Reports\Support\Reports\ReportGenerator; use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; @@ -35,14 +32,13 @@ public function generateReport($path) { $filesForZip = []; - foreach ($this->source->volumes as $volume) { + foreach ($this->getProjectSources() as $source) { $report = $this->getReportGenerator(); - $file = File::makeTmp(); - $report->generate($volume, $file->getPath()); - // The individual volume reports should be deleted again after + $p = $report->generate($source); + // The individual source reports should be deleted again after // the ZIP of this report was created. - $this->tmpFiles[] = $file; - $filesForZip[$file->getPath()] = $volume->id.'_'.$report->getFullFilename(); + $this->tmpFiles[] = $p; + $filesForZip[$p] = $source->id.'_'.$report->getFullFilename(); } $this->makeZip($filesForZip, $path); @@ -57,4 +53,14 @@ protected function getReportGenerator() { return new $this->reportClass($this->options); } + + /** + * Get sources for the sub-reports that should be generated for this project. + * + * @return mixed + */ + protected function getProjectSources() + { + return $this->source->volumes; + } } diff --git a/src/Support/Reports/Projects/VideoAnnotations/CsvReportGenerator.php b/src/Support/Reports/Projects/VideoAnnotations/CsvReportGenerator.php index d377e191b..c1740f79f 100644 --- a/src/Support/Reports/Projects/VideoAnnotations/CsvReportGenerator.php +++ b/src/Support/Reports/Projects/VideoAnnotations/CsvReportGenerator.php @@ -31,26 +31,10 @@ class CsvReportGenerator extends ProjectReportGenerator protected $filename = 'csv_video_annotation_report'; /** - * Generate the report. - * - * @param string $path Path to the report file that should be generated + * {@inheritdoc} */ - public function generateReport($path) + protected function getProjectSources() { - $filesForZip = []; - logger($this->source->id); - - foreach (Video::where('project_id', $this->source->id)->get() as $video) { - $report = $this->getReportGenerator(); - $file = File::makeTmp(); - $report->generate($video, $file->getPath()); - // The individual video reports should be deleted again after - // the ZIP of this report was created. - $this->tmpFiles[] = $file; - $filesForZip[$file->getPath()] = $video->id.'_'.$report->getFullFilename(); - } - - - $this->makeZip($filesForZip, $path); + return Video::where('project_id', $this->source->id)->get(); } } diff --git a/src/Support/Reports/ReportGenerator.php b/src/Support/Reports/ReportGenerator.php index 1fb89c3cf..4870f366e 100644 --- a/src/Support/Reports/ReportGenerator.php +++ b/src/Support/Reports/ReportGenerator.php @@ -7,6 +7,7 @@ use Biigle\Label; use ReflectionClass; use Biigle\Modules\Reports\ReportType; +use Biigle\Modules\Reports\Support\File as FileHelper; class ReportGenerator { @@ -101,8 +102,10 @@ public function __construct($options = []) * * @param mixed $source Source to generate the report for (e.g. a volume) * @param string $path Path to write the report file to. + * + * @return string Path to the generated report file. */ - public function generate($source, $path) + public function generate($source) { $this->setSource($source); @@ -110,10 +113,7 @@ public function generate($source, $path) throw new Exception('Cannot generate report because the source does not exist.'); } - $directory = File::dirname($path); - if (!File::isDirectory($directory)) { - File::makeDirectory($directory, 0755, true); - } + $path = FileHelper::makeTmp()->getPath(); try { $this->generateReport($path); @@ -124,9 +124,15 @@ public function generate($source, $path) throw $e; } finally { array_walk($this->tmpFiles, function ($file) { - $file->delete(); + if (is_string($file)) { + File::delete($file); + } else { + $file->delete(); + } }); } + + return $path; } /** diff --git a/src/config/reports.php b/src/config/reports.php index 9da726e85..097e81612 100644 --- a/src/config/reports.php +++ b/src/config/reports.php @@ -16,10 +16,10 @@ 'full_report' => __DIR__.'/../resources/scripts/full_report.py', ], - /* - | Directory to store the report files to - */ - 'reports_storage' => storage_path('reports'), + /** + * Storage disk to store the report files to. + */ + 'storage_disk' => env('REPORTS_STORAGE_DISK', 'reports'), /* | Directory to store temporary files to diff --git a/tests/Http/Controllers/Api/ReportsControllerTest.php b/tests/Http/Controllers/Api/ReportsControllerTest.php index ad37db254..a5f4f9313 100644 --- a/tests/Http/Controllers/Api/ReportsControllerTest.php +++ b/tests/Http/Controllers/Api/ReportsControllerTest.php @@ -2,6 +2,7 @@ namespace Biigle\Tests\Modules\Reports\Http\Controllers\Api; +use Storage; use Response; use ApiTestCase; use Biigle\Tests\Modules\Reports\ReportTest; @@ -15,17 +16,16 @@ public function testGet() $this->doTestApiRoute('GET', "api/v1/reports/{$report->id}"); $this->beAdmin(); - $response = $this->json('GET', "api/v1/reports/{$report->id}") + $this->json('GET', "api/v1/reports/{$report->id}") ->assertStatus(403); $this->be($report->user); - Response::shouldReceive('download') - ->once() - ->with($report->getPath(), $report->filename); + $this->json('GET', "api/v1/reports/{$report->id}") + ->assertStatus(404); - Response::shouldReceive('json')->passthru(); - - $response = $this->json('GET', "api/v1/reports/{$report->id}") + Storage::fake(config('reports.storage_disk')); + Storage::disk(config('reports.storage_disk'))->put($report->id, 'content'); + $this->json('GET', "api/v1/reports/{$report->id}") ->assertStatus(200); } } diff --git a/tests/ReportTest.php b/tests/ReportTest.php index ecd71fd64..3302a5b2e 100644 --- a/tests/ReportTest.php +++ b/tests/ReportTest.php @@ -3,6 +3,7 @@ namespace Biigle\Tests\Modules\Reports; use File; +use Storage; use Mockery; use ModelTestCase; use Carbon\Carbon; @@ -39,14 +40,25 @@ public function testCastsOptions() public function testGenerate() { + config(['reports.storage_disk' => 'test']); + Storage::fake('test'); + $disk = Storage::disk('test'); + $disk->put('tmp.file', 'content'); + $id = $this->model->id; $path = config('reports.reports_storage'); $mock = Mockery::mock(ReportGenerator::class); - $mock->shouldReceive('generate')->once()->with($this->model->source, "{$path}/{$id}"); + $mock->shouldReceive('generate') + ->once() + ->with($this->model->source) + ->andReturn($disk->path('tmp.file')); $this->model->setReportGenerator($mock); $this->model->generate(); + + $this->assertTrue($disk->exists($this->model->id)); + $this->assertFalse($disk->exists('tmp.file')); } public function testGenerateSourceDeleted() @@ -106,15 +118,21 @@ public function testGetUrl() public function testObserveSelf() { - File::shouldReceive('delete')->once()->with($this->model->getPath()); + config(['reports.storage_disk' => 'test']); + Storage::fake('test'); + Storage::disk('test')->put($this->model->id, 'content'); $this->model->delete(); + $this->assertFalse(Storage::disk('test')->exists($this->model->id)); } public function testObserveUser() { - File::shouldReceive('delete')->once()->with([$this->model->getPath()]); + config(['reports.storage_disk' => 'test']); + Storage::fake('test'); + Storage::disk('test')->put($this->model->id, 'content'); $this->model->user->delete(); $this->assertNull($this->model->fresh()); + $this->assertFalse(Storage::disk('test')->exists($this->model->id)); } public function testDontObserveProjects() diff --git a/tests/Support/Reports/Projects/ProjectReportGeneratorTest.php b/tests/Support/Reports/Projects/ProjectReportGeneratorTest.php index 05e551523..f85864f07 100644 --- a/tests/Support/Reports/Projects/ProjectReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/ProjectReportGeneratorTest.php @@ -48,20 +48,15 @@ public function testGenerate() $mock->shouldReceive('generate') ->with(Mockery::on(function ($v) use ($volume) { return $v instanceof Volume && $volume->id === $v->id; - }), 'my_tmp_file_path') - ->once(); + })) + ->once() + ->andReturn('my_tmp_file_path'); + $mock->shouldReceive('getFullFilename')->once() ->andReturn('my_download_filename.pdf'); $generator->mock = $mock; - $mock = Mockery::mock(); - $mock->shouldReceive('getPath')->andReturn('my_tmp_file_path'); - $mock->shouldReceive('delete')->once(); - App::bind(File::class, function () use ($mock) { - return $mock; - }); - $mock = Mockery::mock(); $mock->shouldReceive('open')->once()->andReturn(true); $mock->shouldReceive('addFile')->once() diff --git a/tests/Support/Reports/ReportGeneratorTest.php b/tests/Support/Reports/ReportGeneratorTest.php index 0cd89927d..a282f2c0e 100644 --- a/tests/Support/Reports/ReportGeneratorTest.php +++ b/tests/Support/Reports/ReportGeneratorTest.php @@ -51,37 +51,17 @@ public function testGetAllVideoExist() public function testHandleException() { - File::shouldReceive('dirname')->andReturn(''); - File::shouldReceive('isDirectory')->andReturn(true); - File::shouldReceive('exists')->with('somepath')->andReturn(true); - File::shouldReceive('delete')->with('somepath')->once(); + File::shouldReceive('exists')->andReturn(true); + File::shouldReceive('delete')->once()->passthru(); $this->expectException(Exception::class); - with(new GeneratorStub(['throw' => true]))->generate(VolumeTest::make(), 'somepath'); + with(new GeneratorStub(['throw' => true]))->generate(VolumeTest::make()); } public function testHandleSourceEmpty() { $this->expectException(Exception::class); - with(new GeneratorStub)->generate(null, 'somepath'); - } - - public function testHandleRegular() - { - File::shouldReceive('dirname') - ->once() - ->andReturn('some'); - - File::shouldReceive('isDirectory') - ->once() - ->with('some') - ->andReturn(false); - - File::shouldReceive('makeDirectory') - ->once() - ->with('some', 0755, true); - - with(new GeneratorStub)->generate(VolumeTest::make(), 'some/path'); + with(new GeneratorStub)->generate(null); } public function testExpandLabelName() From 84d78dbaa4727f2e2aafc96f6a2f30199eaaf275 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Mar 2019 14:36:44 +0100 Subject: [PATCH 159/407] Remove setting of memory limit to generate a report The default memory limit for a worker Docker container is 1G which is even higher than what was set here before. --- src/Jobs/GenerateReportJob.php | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/src/Jobs/GenerateReportJob.php b/src/Jobs/GenerateReportJob.php index 74821b45c..00c0ae4c0 100644 --- a/src/Jobs/GenerateReportJob.php +++ b/src/Jobs/GenerateReportJob.php @@ -15,13 +15,6 @@ class GenerateReportJob extends Job implements ShouldQueue { use InteractsWithQueue, SerializesModels; - /** - * Memory limit to set during generating a report. - * - * @var string - */ - const MEMORY_LIMIT = '512M'; - /** * The report that should be generated. * @@ -44,17 +37,7 @@ public function __construct(Report $report) */ public function handle() { - try { - $memoryLimit = ini_get('memory_limit'); - // increase memory limit for generating large reports - ini_set('memory_limit', self::MEMORY_LIMIT); - - $this->report->generate(); - } finally { - // restore default memory limit - ini_set('memory_limit', $memoryLimit); - } - + $this->report->generate(); $this->report->ready_at = new Carbon; $this->report->save(); $this->report->user->notify(new ReportReady($this->report)); From 026e575a91f7cd73df48e6affdee474c3a7f216d Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Mar 2019 14:59:03 +0100 Subject: [PATCH 160/407] Implement deletion of reports Resolves #38 --- .../Controllers/Api/ReportsController.php | 26 +++++++++++++++++++ src/Http/routes.php | 10 ++++--- src/Policies/ReportPolicy.php | 12 +++++++++ .../views/searchTabContent.blade.php | 17 ++++++++---- .../Controllers/Api/ReportsControllerTest.php | 16 ++++++++++++ 5 files changed, 73 insertions(+), 8 deletions(-) diff --git a/src/Http/Controllers/Api/ReportsController.php b/src/Http/Controllers/Api/ReportsController.php index 546c3929b..a52f06476 100644 --- a/src/Http/Controllers/Api/ReportsController.php +++ b/src/Http/Controllers/Api/ReportsController.php @@ -41,4 +41,30 @@ public function show($id) abort(404); } } + + /** + * Delete a report. + * + * @api {delete} reports/:id Delete a report + * @apiGroup Reports + * @apiName DestroyReport + * @apiPermission reportOwner + * + * @apiParam {Number} id The report ID. + * + * @param int $id report id + * @return mixed + */ + public function destroy($id) + { + $report = Report::findOrFail($id); + $this->authorize('destroy', $report); + $report->delete(); + + if (!$this->isAutomatedRequest()) { + return $this->fuzzyRedirect() + ->with('message', 'Report deleted.') + ->with('messageType', 'success'); + } + } } diff --git a/src/Http/routes.php b/src/Http/routes.php index ba4ab75bd..42c1c70e4 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -30,9 +30,13 @@ 'uses' => 'Projects\ProjectReportController@store', ]); - $router->get('reports/{id}', [ - 'uses' => 'ReportsController@show', - 'as' => 'show-reports', + $router->resource('reports', 'ReportsController', [ + 'only' => ['show', 'destroy'], + 'parameters' => ['reports' => 'id'], + 'names' => [ + 'show' => 'show-reports', + 'destroy' => 'destroy-reports', + ], ]); $router->post('users/my/settings/reports', [ diff --git a/src/Policies/ReportPolicy.php b/src/Policies/ReportPolicy.php index a1bd8126b..2b23f8396 100644 --- a/src/Policies/ReportPolicy.php +++ b/src/Policies/ReportPolicy.php @@ -35,4 +35,16 @@ public function access(User $user, Report $report) { return $report->user_id === $user->id; } + + /** + * Determine if the given report can be destroyed by the user. + * + * @param User $user + * @param Report $report + * @return bool + */ + public function destroy(User $user, Report $report) + { + return $report->user_id === $user->id; + } } diff --git a/src/resources/views/searchTabContent.blade.php b/src/resources/views/searchTabContent.blade.php index 53f69b9ae..30cff989f 100644 --- a/src/resources/views/searchTabContent.blade.php +++ b/src/resources/views/searchTabContent.blade.php @@ -3,11 +3,18 @@
      @foreach ($results as $report)
    • - @if ($report->ready_at) - Created on - @else - Pending for {{$report->created_at->diffForHumans(null, true)}} - @endif + + @if ($report->ready_at) + Created on + @else + Pending for {{$report->created_at->diffForHumans(null, true)}} + @endif +
      + + + +
      +
      @if ($report->ready_at) {{$report->subject}} diff --git a/tests/Http/Controllers/Api/ReportsControllerTest.php b/tests/Http/Controllers/Api/ReportsControllerTest.php index a5f4f9313..8bc733822 100644 --- a/tests/Http/Controllers/Api/ReportsControllerTest.php +++ b/tests/Http/Controllers/Api/ReportsControllerTest.php @@ -28,4 +28,20 @@ public function testGet() $this->json('GET', "api/v1/reports/{$report->id}") ->assertStatus(200); } + + public function testDestroy() + { + $report = ReportTest::create(); + $this->doTestApiRoute('DELETE', "api/v1/reports/{$report->id}"); + + $this->beAdmin(); + $this->json('DELETE', "api/v1/reports/{$report->id}") + ->assertStatus(403); + + $this->be($report->user); + $this->json('DELETE', "api/v1/reports/{$report->id}") + ->assertStatus(200); + + $this->assertNull($report->fresh()); + } } From b6c2aa8a24e6785603488f38b068cb4ccb32c883 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 6 Mar 2019 12:14:15 +0100 Subject: [PATCH 161/407] Fix breadcrumbs in video reports view --- src/resources/views/videoReports.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/resources/views/videoReports.blade.php b/src/resources/views/videoReports.blade.php index f8e1fe5cd..4b4eac36c 100644 --- a/src/resources/views/videoReports.blade.php +++ b/src/resources/views/videoReports.blade.php @@ -17,7 +17,7 @@ @section('navbar') @endsection From a10af40e90d196627ca4a06be45446b6f1fa7c22 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 31 Jul 2019 12:26:50 +0200 Subject: [PATCH 162/407] Add the (video) annotation ID to CSV annotation reports Resolves #56 --- .../Reports/Videos/VideoAnnotations/CsvReportGenerator.php | 3 +++ .../Reports/Volumes/Annotations/CsvReportGenerator.php | 3 +++ src/resources/views/manual/tutorials/reports-schema.blade.php | 2 ++ .../Videos/VideoAnnotations/CsvReportGeneratorTest.php | 4 ++++ .../Reports/Volumes/Annotations/CsvReportGeneratorTest.php | 4 ++++ 5 files changed, 16 insertions(+) diff --git a/src/Support/Reports/Videos/VideoAnnotations/CsvReportGenerator.php b/src/Support/Reports/Videos/VideoAnnotations/CsvReportGenerator.php index f26f07815..4f541ccc7 100644 --- a/src/Support/Reports/Videos/VideoAnnotations/CsvReportGenerator.php +++ b/src/Support/Reports/Videos/VideoAnnotations/CsvReportGenerator.php @@ -139,6 +139,7 @@ protected function query() 'shapes.name as shape_name', 'video_annotations.points', 'video_annotations.frames', + 'video_annotations.id as video_annotation_id', ]) ->join('shapes', 'video_annotations.shape_id', '=', 'shapes.id') ->join('users', 'video_annotation_labels.user_id', '=', 'users.id') @@ -171,6 +172,7 @@ protected function createCsv($rows) 'shape_name', 'points', 'frames', + 'video_annotation_id', ]); foreach ($rows as $row) { @@ -188,6 +190,7 @@ protected function createCsv($rows) $row->shape_name, $row->points, $row->frames, + $row->video_annotation_id, ]); } diff --git a/src/Support/Reports/Volumes/Annotations/CsvReportGenerator.php b/src/Support/Reports/Volumes/Annotations/CsvReportGenerator.php index 4e3c0a236..f9c935564 100644 --- a/src/Support/Reports/Volumes/Annotations/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/Annotations/CsvReportGenerator.php @@ -82,6 +82,7 @@ protected function query() 'shapes.name as shape_name', 'annotations.points', 'images.attrs', + 'annotations.id as annotation_id', ]) ->join('shapes', 'annotations.shape_id', '=', 'shapes.id') ->join('users', 'annotation_labels.user_id', '=', 'users.id') @@ -116,6 +117,7 @@ protected function createCsv($rows) 'shape_name', 'points', 'attributes', + 'annotation_id', ]); foreach ($rows as $row) { @@ -135,6 +137,7 @@ protected function createCsv($rows) $row->shape_name, $row->points, $row->attrs, + $row->annotation_id, ]); } diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index ac2418484..37a05024e 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -168,6 +168,7 @@ The additional attributes of the image are encoded as a JSON object. The content may vary depending on the BIIGLE modules that are installed and the operations performed on the image (e.g. a laser point detection to calculate the area of an image).

    • +
    • Annotation ID
    • Image label reports

      @@ -235,6 +236,7 @@ The key frames are encoded as a JSON array. Each key frame represents a time that corresponds to the ponts array at the same index. null menas there is a gap in the video annotation.

      +
    • Video annotation ID
    • @endif
    diff --git a/tests/Support/Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php b/tests/Support/Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php index ce167b9b4..586536247 100644 --- a/tests/Support/Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php +++ b/tests/Support/Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php @@ -31,6 +31,7 @@ class CsvReportGeneratorTest extends TestCase 'shape_name', 'points', 'frames', + 'video_annotation_id', ]; public function setUp() @@ -91,6 +92,7 @@ public function testGenerateReport() $al->annotation->shape->name, json_encode($al->annotation->points), json_encode($al->annotation->frames), + $al->annotation->id, ]); $mock->shouldReceive('close') @@ -167,6 +169,7 @@ public function testGenerateReportSeparateLabelTrees() $annotation->shape->name, json_encode($annotation->points), json_encode($annotation->frames), + $annotation->id, ]); $mock->shouldReceive('put') @@ -185,6 +188,7 @@ public function testGenerateReportSeparateLabelTrees() $annotation->shape->name, json_encode($annotation->points), json_encode($annotation->frames), + $annotation->id, ]); $mock->shouldReceive('close') diff --git a/tests/Support/Reports/Volumes/Annotations/CsvReportGeneratorTest.php b/tests/Support/Reports/Volumes/Annotations/CsvReportGeneratorTest.php index fd2bfcfa6..dee210062 100644 --- a/tests/Support/Reports/Volumes/Annotations/CsvReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/Annotations/CsvReportGeneratorTest.php @@ -33,6 +33,7 @@ class CsvReportGeneratorTest extends TestCase 'shape_name', 'points', 'attributes', + 'annotation_id', ]; public function testProperties() @@ -90,6 +91,7 @@ public function testGenerateReport() $al->annotation->shape->name, json_encode($al->annotation->points), json_encode(['image' => 'attrs']), + $al->annotation->id, ]); $mock->shouldReceive('close') @@ -170,6 +172,7 @@ public function testGenerateReportSeparateLabelTrees() $annotation->shape->name, json_encode($annotation->points), null, + $annotation->id, ]); $mock->shouldReceive('put') @@ -190,6 +193,7 @@ public function testGenerateReportSeparateLabelTrees() $annotation->shape->name, json_encode($annotation->points), null, + $annotation->id, ]); $mock->shouldReceive('close') From 8ade13773eb8359edd6bff9a24398955a60f38d5 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 14 Aug 2019 15:11:02 +0200 Subject: [PATCH 163/407] Update readme --- README.md | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 03f6d6c97..86631b23b 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,28 @@ -# Biigle Reports Module - -Install the module: - -Add the following to the repositories array of your `composer.json`: -``` -{ - "type": "vcs", - "url": "https://github.com/biigle/reports.git" -} -``` - -1. Run `php composer.phar require biigle/reports`. -2. Add `'Biigle\Modules\Reports\ReportsServiceProvider'` to the `providers` array in `config/app.php`. -3. Run `php artisan reports:publish` to refresh the public assets of this package. Do this for every update of the package. -4. Run `pip install -r vendor/biigle/reports/requirements.txt` to install python requirements. -5. Configure a storage disk for the report files and set the `REPORTS_STORAGE_DISK` variable to the name of this storage disk in the `.env` file. Example for a local disk: +# BIIGLE Reports Module + +This is the BIIGLE module to generate reports for projects, volumes and videos. + +## Installation + +1. Run `composer config repositories.reports vcs git@github.com:biigle/reports.git` +2. Run `composer require biigle/reports`. +3. Add `Biigle\Modules\Reports\ReportsServiceProvider::class` to the `providers` array in `config/app.php`. +4. Run `php artisan vendor:publish --tag=public` to publish the public assets of this module. +5. Run `pip install -r vendor/biigle/reports/requirements.txt` to install the python requirements. +6. Configure a storage disk for the report files and set the `REPORTS_STORAGE_DISK` variable to the name of this storage disk in the `.env` file. Example for a local disk: ```php 'reports' => [ 'driver' => 'local', 'root' => storage_path('reports'), ], ``` + +## Developing + +Take a look at the [development guide](https://github.com/biigle/core/blob/master/DEVELOPING.md) of the core repository to get started with the development setup. + +Want to develop a new module? Head over to the [biigle/module](https://github.com/biigle/module) template repository. + +## Contributions and bug reports + +Contributions to BIIGLE are always welcome. Check out the [contribution guide](https://github.com/biigle/core/blob/master/CONTRIBUTING.md) to get started. From c6287cb96346f045eb761798eab37acdfbba450a Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 15 Aug 2019 13:30:33 +0200 Subject: [PATCH 164/407] Add license --- LICENSE | 674 ++++++++++++++++++++++++++++++++++++++++++++++++++ composer.json | 10 +- package.json | 7 +- 3 files changed, 683 insertions(+), 8 deletions(-) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/composer.json b/composer.json index c7dfafada..cdbc7d866 100644 --- a/composer.json +++ b/composer.json @@ -1,5 +1,13 @@ { "name": "biigle/reports", + "description": "BIIGLE module to generate reports for projects, volumes and videos.", + "keywords": ["biigle", "biigle-module"], + "license": "GPL-3.0-only", + "support": { + "source": "https://github.com/biigle/reports", + "issues": "https://github.com/biigle/reports/issues" + }, + "homepage": "https://biigle.de", "authors": [ { "name": "Martin Zurowietz", @@ -10,8 +18,6 @@ "ext-zip": "*", "biigle/projects": "~1.4" }, - "require-dev": { - }, "autoload": { "psr-4": { "Biigle\\Modules\\Reports\\": "src" diff --git a/package.json b/package.json index c7d96ce47..c56737f92 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,7 @@ { "name": "biigle-reports", "version": "0.0.1", - "directories": { - "test": "tests" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, + "license": "GPL-3.0-only", "devDependencies": { "gulp": "^3.9.1", "gulp-helpers": "git+https://github.com/mzur/gulp-helpers.git#v1.1.0" From fe3b8266900cd59fc0f88d5f8603477de059e63b Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 21 Aug 2019 11:22:08 +0200 Subject: [PATCH 165/407] Apply CS fixes --- src/Http/Controllers/Api/Projects/ProjectReportController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Controllers/Api/Projects/ProjectReportController.php b/src/Http/Controllers/Api/Projects/ProjectReportController.php index 49f7065a1..9f30f4fc7 100644 --- a/src/Http/Controllers/Api/Projects/ProjectReportController.php +++ b/src/Http/Controllers/Api/Projects/ProjectReportController.php @@ -49,7 +49,7 @@ public function store(Request $request, $id) if (!$hasVideo) { throw ValidationException::withMessages(['type_id' => ['The project must contain videos.']]); } - } else if (!$project->volumes()->exists()) { + } elseif (!$project->volumes()->exists()) { throw ValidationException::withMessages(['type_id' => ['The project must contain volumes.']]); } From c95c8c61258f8574aed57237dfd7ecf53f59871b Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 3 Sep 2019 13:44:33 +0200 Subject: [PATCH 166/407] Implement restrict report to labels in backend References #58 --- .../Api/Projects/ProjectReportController.php | 1 + src/Http/Controllers/Api/ReportController.php | 3 ++ .../Api/Videos/VideoReportController.php | 1 + .../Api/Volumes/VolumeReportController.php | 1 + src/Support/Reports/ReportGenerator.php | 20 ++++++++++ .../VideoAnnotations/CsvReportGenerator.php | 34 +++++++++++------ .../Annotations/AnnotationReportGenerator.php | 14 ++++++- .../ImageLabels/BasicReportGenerator.php | 14 ++++++- .../ImageLabels/CsvReportGenerator.php | 14 ++++++- .../Projects/ProjectReportControllerTest.php | 22 +++++++++++ .../Api/Videos/VideoReportControllerTest.php | 20 ++++++++++ .../Volumes/VolumeReportControllerTest.php | 20 ++++++++++ .../CsvReportGeneratorTest.php | 21 ++++++++++ .../AnnotationReportGeneratorTest.php | 38 +++++++++++++++---- .../ImageLabels/BasicReportGeneratorTest.php | 15 ++++++++ .../ImageLabels/CsvReportGeneratorTest.php | 15 ++++++++ 16 files changed, 231 insertions(+), 22 deletions(-) diff --git a/src/Http/Controllers/Api/Projects/ProjectReportController.php b/src/Http/Controllers/Api/Projects/ProjectReportController.php index 9f30f4fc7..d700adfa3 100644 --- a/src/Http/Controllers/Api/Projects/ProjectReportController.php +++ b/src/Http/Controllers/Api/Projects/ProjectReportController.php @@ -27,6 +27,7 @@ class ProjectReportController extends ReportController * @apiParam (Optional arguments) {Boolean} exportArea If `true`, restrict the report to the export area of the project. * @apiParam (Optional arguments) {Boolean} newest_label If `true`, restrict the report to the newest label of each annotation. * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet. + * @apiParam (Optional arguments) {Number[]} only_labels Array of label IDs to restrict the report to. Omit or leave empty to take all labels. * * @apiPermission projectMember * diff --git a/src/Http/Controllers/Api/ReportController.php b/src/Http/Controllers/Api/ReportController.php index 96ad008ca..6d3b2b6e7 100644 --- a/src/Http/Controllers/Api/ReportController.php +++ b/src/Http/Controllers/Api/ReportController.php @@ -21,12 +21,15 @@ protected function getOptions(Request $request) 'separate_label_trees' => 'nullable|boolean', 'export_area' => 'nullable|boolean', 'newest_label' => 'nullable|boolean', + 'only_labels' => 'nullable|array', + 'only_labels.*' => 'exists:labels,id', ]); return [ 'separateLabelTrees' => (bool) $request->input('separate_label_trees', false), 'exportArea' => (bool) $request->input('export_area', false), 'newestLabel' => (bool) $request->input('newest_label', false), + 'onlyLabels' => $request->input('only_labels', []), ]; } } diff --git a/src/Http/Controllers/Api/Videos/VideoReportController.php b/src/Http/Controllers/Api/Videos/VideoReportController.php index 8b53b52d9..d8e99cb63 100644 --- a/src/Http/Controllers/Api/Videos/VideoReportController.php +++ b/src/Http/Controllers/Api/Videos/VideoReportController.php @@ -25,6 +25,7 @@ class VideoReportController extends ReportController * @apiParam (Required arguments) {Number} type_id The report type ID. * * @apiParam (Optional arguments) {Boolean} separate_label_trees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet. + * @apiParam (Optional arguments) {Number[]} only_labels Array of label IDs to restrict the report to. Omit or leave empty to take all labels. * * @apiPermission projectMember * diff --git a/src/Http/Controllers/Api/Volumes/VolumeReportController.php b/src/Http/Controllers/Api/Volumes/VolumeReportController.php index 25023f790..a9e1cdc35 100644 --- a/src/Http/Controllers/Api/Volumes/VolumeReportController.php +++ b/src/Http/Controllers/Api/Volumes/VolumeReportController.php @@ -28,6 +28,7 @@ class VolumeReportController extends ReportController * @apiParam (Optional arguments) {Boolean} newest_label If `true`, restrict the report to the newest label of each annotation. * @apiParam (Optional arguments) {Boolean} separate_label_trees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet. * @apiParam (Optional arguments) {Number} annotation_session_id ID of an annotation session of the volume. If given, only annotations belonging to the annotation session are included in the report. + * @apiParam (Optional arguments) {Number[]} only_labels Array of label IDs to restrict the report to. Omit or leave empty to take all labels. * * @apiPermission projectMember * diff --git a/src/Support/Reports/ReportGenerator.php b/src/Support/Reports/ReportGenerator.php index 4870f366e..c0b43524d 100644 --- a/src/Support/Reports/ReportGenerator.php +++ b/src/Support/Reports/ReportGenerator.php @@ -246,4 +246,24 @@ protected function shouldSeparateLabelTrees() { return $this->options->get('separateLabelTrees', false); } + + /** + * Returns the array of label ids to which this report should be restricted. + * + * @return array + */ + protected function getOnlyLabels() + { + return $this->options->get('onlyLabels', []); + } + + /** + * Determines if this report is restricted to a subset of labels. + * + * @return bool + */ + protected function isRestrictedToLabels() + { + return !empty($this->getOnlyLabels()); + } } diff --git a/src/Support/Reports/Videos/VideoAnnotations/CsvReportGenerator.php b/src/Support/Reports/Videos/VideoAnnotations/CsvReportGenerator.php index 4f541ccc7..275d81731 100644 --- a/src/Support/Reports/Videos/VideoAnnotations/CsvReportGenerator.php +++ b/src/Support/Reports/Videos/VideoAnnotations/CsvReportGenerator.php @@ -82,19 +82,14 @@ public function expandLabelName($id) } /** - * Get all labels that are attached to the volume of this report (through project label trees). + * Callback to be used in a `when` query statement that restricts the results to a specific subset of annotation labels. * - * @return \Illuminate\Support\Collection + * @param \Illuminate\Database\Query\Builder $query + * @return \Illuminate\Database\Query\Builder */ - protected function getVideoLabels() + public function restrictToLabelsQuery($query) { - return Label::select('id', 'name', 'parent_id') - ->whereIn('label_tree_id', function ($query) { - $query->select('label_tree_id') - ->from('label_tree_project') - ->where('project_id', $this->source->project_id); - }) - ->get(); + return $query->whereIn('video_annotation_labels.label_id', $this->getOnlyLabels()); } /** @@ -103,13 +98,14 @@ protected function getVideoLabels() * @param mixed $columns The columns to select * @return \Illuminate\Database\Query\Builder */ - protected function initQuery($columns = []) + public function initQuery($columns = []) { $query = DB::table('video_annotation_labels') ->join('video_annotations', 'video_annotation_labels.video_annotation_id', '=', 'video_annotations.id') ->join('videos', 'video_annotations.video_id', '=', 'videos.id') ->join('labels', 'video_annotation_labels.label_id', '=', 'labels.id') ->where('videos.id', $this->source->id) + ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']) ->select($columns); if ($this->shouldSeparateLabelTrees()) { @@ -119,6 +115,22 @@ protected function initQuery($columns = []) return $query; } + /** + * Get all labels that are attached to the volume of this report (through project label trees). + * + * @return \Illuminate\Support\Collection + */ + protected function getVideoLabels() + { + return Label::select('id', 'name', 'parent_id') + ->whereIn('label_tree_id', function ($query) { + $query->select('label_tree_id') + ->from('label_tree_project') + ->where('project_id', $this->source->project_id); + }) + ->get(); + } + /** * Assemble a new DB query for the video of this report. * diff --git a/src/Support/Reports/Volumes/Annotations/AnnotationReportGenerator.php b/src/Support/Reports/Volumes/Annotations/AnnotationReportGenerator.php index 620e15313..16524378f 100644 --- a/src/Support/Reports/Volumes/Annotations/AnnotationReportGenerator.php +++ b/src/Support/Reports/Volumes/Annotations/AnnotationReportGenerator.php @@ -205,13 +205,24 @@ protected function getSkipIds() return $skip; } + /** + * Callback to be used in a `when` query statement that restricts the results to a specific subset of annotation labels. + * + * @param \Illuminate\Database\Query\Builder $query + * @return \Illuminate\Database\Query\Builder + */ + public function restrictToLabelsQuery($query) + { + return $query->whereIn('annotation_labels.label_id', $this->getOnlyLabels()); + } + /** * Assembles the part of the DB query that is the same for all annotation reports. * * @param mixed $columns The columns to select * @return \Illuminate\Database\Query\Builder */ - protected function initQuery($columns = []) + public function initQuery($columns = []) { $query = DB::table('annotation_labels') ->join('annotations', 'annotation_labels.annotation_id', '=', 'annotations.id') @@ -221,6 +232,7 @@ protected function initQuery($columns = []) ->when($this->isRestrictedToExportArea(), [$this, 'restrictToExportAreaQuery']) ->when($this->isRestrictedToAnnotationSession(), [$this, 'restrictToAnnotationSessionQuery']) ->when($this->isRestrictedToNewestLabel(), [$this, 'restrictToNewestLabelQuery']) + ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']) ->select($columns); if ($this->shouldSeparateLabelTrees()) { diff --git a/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php index c02ea12e2..eadbbf83f 100644 --- a/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php @@ -53,17 +53,29 @@ public function generateReport($path) $this->executeScript('extended_report', $path); } + /** + * Callback to be used in a `when` query statement that restricts the results to a specific subset of annotation labels. + * + * @param \Illuminate\Database\Query\Builder $query + * @return \Illuminate\Database\Query\Builder + */ + public function restrictToLabelsQuery($query) + { + return $query->whereIn('image_labels.label_id', $this->getOnlyLabels()); + } + /** * Assemble a new DB query for the volume of this report. * * @return \Illuminate\Database\Query\Builder */ - protected function query() + public function query() { $query = DB::table('image_labels') ->join('images', 'image_labels.image_id', '=', 'images.id') ->select('images.id', 'images.filename', 'image_labels.label_id') ->where('images.volume_id', $this->source->id) + ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']) ->orderBy('images.filename'); if ($this->shouldSeparateLabelTrees()) { diff --git a/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php index 8db572b97..93d810542 100644 --- a/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php @@ -61,12 +61,23 @@ public function generateReport($path) $this->makeZip($toZip, $path); } + /** + * Callback to be used in a `when` query statement that restricts the results to a specific subset of annotation labels. + * + * @param \Illuminate\Database\Query\Builder $query + * @return \Illuminate\Database\Query\Builder + */ + public function restrictToLabelsQuery($query) + { + return $query->whereIn('image_labels.label_id', $this->getOnlyLabels()); + } + /** * Assemble a new DB query for the volume of this report. * * @return \Illuminate\Database\Query\Builder */ - protected function query() + public function query() { $query = DB::table('image_labels') ->join('images', 'image_labels.image_id', '=', 'images.id') @@ -85,6 +96,7 @@ protected function query() 'labels.name as label_name', ]) ->where('images.volume_id', $this->source->id) + ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']) ->orderBy('images.filename'); if ($this->shouldSeparateLabelTrees()) { diff --git a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php index d676d6a90..2363ecccf 100644 --- a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php @@ -3,6 +3,7 @@ namespace Biigle\Tests\Modules\Reports\Http\Controllers\Api\Projects; use ApiTestCase; +use Biigle\Tests\LabelTest; use Biigle\Modules\Reports\ReportType; use Biigle\Tests\Modules\Videos\VideoTest; use Biigle\Modules\Reports\Jobs\GenerateReportJob; @@ -86,4 +87,25 @@ public function testStoreVideoAnnotations() ]) ->assertStatus(200); } + + public function testStoreOnlyLabels() + { + $this->beGuest(); + $label = LabelTest::create(); + $projectId = $this->project()->id; + // Create the volume by calling it. + $this->volume(); + $typeId = ReportType::first()->id; + $this->postJson("api/v1/projects/{$projectId}/reports", [ + 'type_id' => $typeId, + 'only_labels' => [999], + ]) + ->assertStatus(422); + + $this->postJson("api/v1/projects/{$projectId}/reports", [ + 'type_id' => $typeId, + 'only_labels' => [$label->id], + ]) + ->assertStatus(200); + } } diff --git a/tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php b/tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php index e7c988190..6b2022388 100644 --- a/tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php +++ b/tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php @@ -3,6 +3,7 @@ namespace Biigle\Tests\Modules\Reports\Http\Controllers\Api\Volumes; use ApiTestCase; +use Biigle\Tests\LabelTest; use Biigle\Modules\Reports\ReportType; use Biigle\Tests\Modules\Videos\VideoTest; use Biigle\Modules\Reports\Jobs\GenerateReportJob; @@ -69,4 +70,23 @@ public function testStoreVolumeAnnotations() $this->postJson("api/v1/videos/{$videoId}/reports", ['type_id' => $typeId]) ->assertStatus(422); } + + public function testStoreOnlyLabels() + { + $this->beGuest(); + $label = LabelTest::create(); + $videoId = VideoTest::create(['project_id' => $this->project()->id])->id; + $typeId = ReportType::videoAnnotationsCsvId(); + $this->postJson("api/v1/videos/{$videoId}/reports", [ + 'type_id' => $typeId, + 'only_labels' => [999], + ]) + ->assertStatus(422); + + $this->postJson("api/v1/videos/{$videoId}/reports", [ + 'type_id' => $typeId, + 'only_labels' => [$label->id], + ]) + ->assertStatus(200); + } } diff --git a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php index efc445865..57cd108a6 100644 --- a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php +++ b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php @@ -3,6 +3,7 @@ namespace Biigle\Tests\Modules\Reports\Http\Controllers\Api\Volumes; use ApiTestCase; +use Biigle\Tests\LabelTest; use Biigle\Modules\Reports\ReportType; use Biigle\Modules\Reports\Jobs\GenerateReportJob; @@ -62,4 +63,23 @@ public function testStoreVideoAnnotations() $this->postJson("api/v1/volumes/{$volumeId}/reports", ['type_id' => $typeId]) ->assertStatus(422); } + + public function testStoreOnlyLabels() + { + $this->beGuest(); + $label = LabelTest::create(); + $volumeId = $this->volume()->id; + $typeId = ReportType::first()->id; + $this->postJson("api/v1/volumes/{$volumeId}/reports", [ + 'type_id' => $typeId, + 'only_labels' => [999], + ]) + ->assertStatus(422); + + $this->postJson("api/v1/volumes/{$volumeId}/reports", [ + 'type_id' => $typeId, + 'only_labels' => [$label->id], + ]) + ->assertStatus(200); + } } diff --git a/tests/Support/Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php b/tests/Support/Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php index 586536247..218db5ff0 100644 --- a/tests/Support/Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php +++ b/tests/Support/Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php @@ -224,4 +224,25 @@ public function testGenerateReportSeparateLabelTrees() $generator->setSource($video); $generator->generateReport('my/path'); } + + public function testRestrictToLabels() + { + $video = VideoTest::create(); + $annotation = VideoAnnotationTest::create(['video_id' => $video->id]); + + $al1 = VideoAnnotationLabelTest::create([ + 'video_annotation_id' => $annotation->id, + ]); + $al2 = VideoAnnotationLabelTest::create([ + 'video_annotation_id' => $annotation->id, + ]); + + $generator = new CsvReportGenerator([ + 'onlyLabels' => [$al1->label_id], + ]); + $generator->setSource($video); + $results = $generator->initQuery(['video_annotation_labels.id'])->get(); + $this->assertCount(1, $results); + $this->assertEquals($al1->id, $results[0]->id); + } } diff --git a/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php b/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php index c8e660530..0ac97c978 100644 --- a/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php @@ -62,13 +62,19 @@ public function testRestrictToExportAreaQuery() ]), ]; + array_map(function ($a) { + AnnotationLabelTest::create(['annotation_id' => $a->id]); + }, $annotations); + $inside = [$annotations[0]->id, $annotations[1]->id, $annotations[4]->id]; $outside = [$annotations[2]->id, $annotations[3]->id, $annotations[5]->id]; - $generator = new AnnotationReportGenerator; + $generator = new AnnotationReportGenerator([ + 'exportArea' => true, + ]); $generator->setSource($volume); - $ids = Annotation::when(true, [$generator, 'restrictToExportAreaQuery'])->pluck('id')->toArray(); + $ids = $generator->initQuery(['annotations.id'])->pluck('id')->toArray(); $ids = array_map('intval', $ids); sort($inside); @@ -146,6 +152,7 @@ public function testRestrictToAnnotationSessionQuery() $a = AnnotationTest::create(); $a->image->volume_id = $session->volume_id; + $a->image->save(); $al1 = AnnotationLabelTest::create([ 'created_at' => '2016-10-04', @@ -168,9 +175,8 @@ public function testRestrictToAnnotationSessionQuery() 'annotationSession' => $session->id, ]); $generator->setSource($session->volume); - $results = AnnotationLabel::when(true, [$generator, 'restrictToAnnotationSessionQuery'])->get(); - - $this->assertEquals(1, count($results)); + $results = $generator->initQuery(['annotation_labels.id'])->get(); + $this->assertCount(1, $results); $this->assertEquals($al2->id, $results[0]->id); } @@ -199,9 +205,25 @@ public function testRestrictToNewestLabelQuery() 'newestLabel' => true, ]); $generator->setSource($a->image->volume); - $results = AnnotationLabel::when(true, [$generator, 'restrictToNewestLabelQuery'])->get(); - - $this->assertEquals(1, count($results)); + $results = $generator->initQuery(['annotation_labels.id'])->get(); + $this->assertCount(1, $results); $this->assertEquals($al3->id, $results[0]->id); } + + public function testRestrictToLabels() + { + $a1 = AnnotationTest::create(); + $al1 = AnnotationLabelTest::create(['annotation_id' => $a1->id]); + + $a2 = AnnotationTest::create(['image_id' => $a1->image_id]); + $al2 = AnnotationLabelTest::create(['annotation_id' => $a2->id]); + + $generator = new AnnotationReportGenerator([ + 'onlyLabels' => [$al1->label_id], + ]); + $generator->setSource($a1->image->volume); + $results = $generator->initQuery(['annotation_labels.id'])->get(); + $this->assertCount(1, $results); + $this->assertEquals($al1->id, $results[0]->id); + } } diff --git a/tests/Support/Reports/Volumes/ImageLabels/BasicReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageLabels/BasicReportGeneratorTest.php index a33a3e88a..99d0831e8 100644 --- a/tests/Support/Reports/Volumes/ImageLabels/BasicReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageLabels/BasicReportGeneratorTest.php @@ -139,4 +139,19 @@ public function testGenerateReportSeparateLabelTrees() $generator->setPythonScriptRunner($mock); $generator->generateReport('my/path'); } + + public function testRestrictToLabels() + { + $image = ImageTest::create(); + $il1 = ImageLabelTest::create(['image_id' => $image->id]); + $il2 = ImageLabelTest::create(['image_id' => $image->id]); + + $generator = new BasicReportGenerator([ + 'onlyLabels' => [$il1->label_id], + ]); + $generator->setSource($image->volume); + $results = $generator->query()->get(); + $this->assertCount(1, $results); + $this->assertEquals($il1->label_id, $results[0]->label_id); + } } diff --git a/tests/Support/Reports/Volumes/ImageLabels/CsvReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageLabels/CsvReportGeneratorTest.php index fab4ae273..5d2e741a2 100644 --- a/tests/Support/Reports/Volumes/ImageLabels/CsvReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageLabels/CsvReportGeneratorTest.php @@ -200,4 +200,19 @@ public function testGenerateReportSeparateLabelTrees() $generator->setSource($image->volume); $generator->generateReport('my/path'); } + + public function testRestrictToLabels() + { + $image = ImageTest::create(); + $il1 = ImageLabelTest::create(['image_id' => $image->id]); + $il2 = ImageLabelTest::create(['image_id' => $image->id]); + + $generator = new CsvReportGenerator([ + 'onlyLabels' => [$il1->label_id], + ]); + $generator->setSource($image->volume); + $results = $generator->query()->get(); + $this->assertCount(1, $results); + $this->assertEquals($il1->id, $results[0]->image_label_id); + } } From 42e21079b014ae7b01f86eda6943e4f2c8f51cea Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 3 Sep 2019 15:02:25 +0200 Subject: [PATCH 167/407] Implement UI to restrict report to labels References #58 --- composer.json | 5 +-- gulpfile.js | 9 ++++- .../Views/ProjectReportsController.php | 3 ++ .../Views/VideoReportsController.php | 11 ++++++ .../Views/VolumeReportsController.php | 33 ++++++++++++++++- src/public/assets/scripts/main.js | 2 +- src/public/assets/styles/main.css | 1 + .../js/reports/exportProjectReportForm.js | 9 +++-- .../js/reports/exportVideoReportForm.js | 1 + .../js/reports/exportVolumeReportForm.js | 4 +- .../assets/js/reports/mixins/reportForm.js | 37 ++++++++++++++++++- src/resources/assets/sass/main.scss | 14 +++++++ .../views/partials/restrictLabels.blade.php | 17 +++++++++ src/resources/views/projectReports.blade.php | 17 ++++++--- src/resources/views/videoReports.blade.php | 17 ++++++--- src/resources/views/volumeReports.blade.php | 17 ++++++--- 16 files changed, 167 insertions(+), 30 deletions(-) create mode 100644 src/public/assets/styles/main.css create mode 100644 src/resources/assets/sass/main.scss create mode 100644 src/resources/views/partials/restrictLabels.blade.php diff --git a/composer.json b/composer.json index c7dfafada..f06e13cd7 100644 --- a/composer.json +++ b/composer.json @@ -8,9 +8,8 @@ ], "require": { "ext-zip": "*", - "biigle/projects": "~1.4" - }, - "require-dev": { + "biigle/projects": "~1.4", + "biigle/label-trees": "~1.27" }, "autoload": { "psr-4": { diff --git a/gulpfile.js b/gulpfile.js index 6a490386f..7be28455e 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -8,6 +8,10 @@ h.paths.sass = 'src/resources/assets/sass/'; h.paths.js = 'src/resources/assets/js/'; h.paths.public = 'src/public/assets/'; +gulp.task('sass-main', function () { + h.sass('main.scss', 'main.css'); +}); + gulp.task('js-main', function (cb) { h.js('reports/**/*.js', 'main.js', cb); }); @@ -16,12 +20,15 @@ gulp.task('js-annotations', function (cb) { h.js('annotations/**/*.js', 'annotations.js', cb); }); +gulp.task('sass', ['sass-main']); + gulp.task('js', ['js-main', 'js-annotations']); gulp.task('watch', function () { + gulp.watch(h.paths.sass + '**/*.scss', ['sass']); gulp.watch(h.paths.js + 'reports/**/*.js', ['js-main']); gulp.watch(h.paths.js + 'annotations/**/*.js', ['js-annotations']); gulp.watch(h.paths.public + '**/*', publish); }); -gulp.task('default', ['js'], publish) +gulp.task('default', ['sass', 'js'], publish) diff --git a/src/Http/Controllers/Views/ProjectReportsController.php b/src/Http/Controllers/Views/ProjectReportsController.php index 35b70561f..3824d7f43 100644 --- a/src/Http/Controllers/Views/ProjectReportsController.php +++ b/src/Http/Controllers/Views/ProjectReportsController.php @@ -40,12 +40,15 @@ public function show($id) ->whereNotNull('attrs->export_area') ->exists(); + $labelTrees = $project->labelTrees()->with('labels', 'version')->get(); + return view('reports::projectReports', [ 'project' => $project, 'reportTypes' => $types, 'hasExportArea' => $hasExportArea, 'hasVolume' => $hasVolume, 'hasVideo' => $hasVideo, + 'labelTrees' => $labelTrees, ]); } } diff --git a/src/Http/Controllers/Views/VideoReportsController.php b/src/Http/Controllers/Views/VideoReportsController.php index 8e95b0bd5..90bb05530 100644 --- a/src/Http/Controllers/Views/VideoReportsController.php +++ b/src/Http/Controllers/Views/VideoReportsController.php @@ -2,6 +2,7 @@ namespace Biigle\Modules\Reports\Http\Controllers\Views; +use Biigle\LabelTree; use Biigle\Modules\Videos\Video; use Biigle\Modules\Reports\ReportType; use Biigle\Http\Controllers\Views\Controller; @@ -20,9 +21,19 @@ public function show($id) $this->authorize('access', $video); $types = ReportType::where('name', 'like', 'VideoAnnotations%')->get(); + $labelTrees = LabelTree::select('id', 'name', 'version_id') + ->with('labels', 'version') + ->whereIn('id', function ($query) use ($video) { + $query->select('label_tree_id') + ->from('label_tree_project') + ->where('project_id', $video->project_id); + }) + ->get(); + return view('reports::videoReports', [ 'video' => $video, 'reportTypes' => $types, + 'labelTrees' => $labelTrees, ]); } } diff --git a/src/Http/Controllers/Views/VolumeReportsController.php b/src/Http/Controllers/Views/VolumeReportsController.php index 64e45fd5d..163f7649d 100644 --- a/src/Http/Controllers/Views/VolumeReportsController.php +++ b/src/Http/Controllers/Views/VolumeReportsController.php @@ -2,6 +2,10 @@ namespace Biigle\Modules\Reports\Http\Controllers\Views; +use Biigle\Role; +use Biigle\Project; +use Biigle\LabelTree; +use Illuminate\Http\Request; use Biigle\Volume as BaseVolume; use Biigle\Modules\Reports\Volume; use Biigle\Modules\Reports\ReportType; @@ -12,10 +16,11 @@ class VolumeReportsController extends Controller /** * Show the volumes reports view. * + * @param Request $request * @param int $id Volume ID * @return \Illuminate\Http\Response */ - public function show($id) + public function show(Request $request, $id) { $volume = BaseVolume::findOrFail($id); $this->authorize('access', $volume); @@ -24,11 +29,37 @@ public function show($id) ->orWhere('name', 'like', 'ImageLabels%') ->get(); + $user = $request->user(); + + if ($user->can('sudo')) { + // Global admins have no restrictions. + $projectIds = $volume->projects()->pluck('id'); + } else { + // Array of all project IDs that the user and the volume have in common + // and where the user is editor, expert or admin. + $projectIds = Project::inCommon($user, $volume->id, [ + Role::editorId(), + Role::expertId(), + Role::adminId(), + ])->pluck('id'); + } + + // All label trees that are used by all projects in which the user can edit in. + $labelTrees = LabelTree::select('id', 'name', 'version_id') + ->with('labels', 'version') + ->whereIn('id', function ($query) use ($projectIds) { + $query->select('label_tree_id') + ->from('label_tree_project') + ->whereIn('project_id', $projectIds); + }) + ->get(); + return view('reports::volumeReports', [ 'projects' => $volume->projects, 'volume' => Volume::convert($volume), 'annotationSessions' => $sessions, 'reportTypes' => $types, + 'labelTrees' => $labelTrees, ]); } } diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index 6ad20dddd..bf89a17fe 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -biigle.$viewModel("project-report-form",function(e){var t=biigle.$require("reports.projectId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees"],ImageLabels:["separate_label_trees"],VideoAnnotations:["separate_label_trees"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.projectReports"))}}})}),biigle.$viewModel("video-report-form",function(e){var t=biigle.$require("reports.videoId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{selectedType:"VideoAnnotations",selectedVariant:"Csv",allowedOptions:{VideoAnnotations:["separate_label_trees"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.videoReports"))}}})}),biigle.$viewModel("volume-report-form",function(e){var t=biigle.$require("reports.volumeId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id"],ImageLabels:["separate_label_trees","annotation_session_id"]},options:{annotation_session_id:null}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.volumeReports"))}}})}),biigle.$declare("reports.api.projectReports",Vue.resource("/api/v1/projects{/id}/reports")),biigle.$declare("reports.api.videoReports",Vue.resource("/api/v1/videos{/id}/reports")),biigle.$declare("reports.api.volumeReports",Vue.resource("/api/v1/volumes{/id}/reports")),biigle.$component("reports.mixins.reportForm",{mixins:[biigle.$require("core.mixins.loader")],data:{allowedOptions:{},selectedType:"",selectedVariant:"",success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1}},computed:{reportTypes:function(){return biigle.$require("reports.reportTypes")},variants:function(){var e={};return this.reportTypes.forEach(function(t){var r=t.name.split("\\");e.hasOwnProperty(r[0])||(e[r[0]]=[]),e[r[0]].push(r[1])}),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach(function(t){e[t.name]=t.id}),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e={};return this.allowedOptions[this.selectedType].forEach(function(t){e[t]=this.options[t]},this),e.type_id=this.selectedReportTypeId,e}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:biigle.$require("messages.store").handleErrorResponse(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.selectedType===e&&this.selectedVariant===t}},created:function(){this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0]}}); \ No newline at end of file +biigle.$viewModel("project-report-form",function(e){var t=biigle.$require("reports.projectId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","only_labels"],ImageLabels:["separate_label_trees","only_labels"],VideoAnnotations:["separate_label_trees","only_labels"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.projectReports"))}}})}),biigle.$viewModel("video-report-form",function(e){var t=biigle.$require("reports.videoId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{selectedType:"VideoAnnotations",selectedVariant:"Csv",allowedOptions:{VideoAnnotations:["separate_label_trees","only_labels"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.videoReports"))}}})}),biigle.$viewModel("volume-report-form",function(e){var t=biigle.$require("reports.volumeId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id","only_labels"],ImageLabels:["separate_label_trees","annotation_session_id","only_labels"]},options:{annotation_session_id:null}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.volumeReports"))}}})}),biigle.$declare("reports.api.projectReports",Vue.resource("/api/v1/projects{/id}/reports")),biigle.$declare("reports.api.videoReports",Vue.resource("/api/v1/videos{/id}/reports")),biigle.$declare("reports.api.volumeReports",Vue.resource("/api/v1/volumes{/id}/reports")),biigle.$component("reports.mixins.reportForm",{mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:biigle.$require("labelTrees.components.labelTrees")},data:{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,only_labels:[]}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach(function(t){Array.prototype.push.apply(e,t.labels)}),e},selectedLabels:function(){return this.flatLabels.filter(function(e){return e.selected})},variants:function(){var e={};return this.reportTypes.forEach(function(t){var r=t.name.split("\\");e.hasOwnProperty(r[0])||(e[r[0]]=[]),e[r[0]].push(r[1])}),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach(function(t){e[t.name]=t.id}),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e={};return this.allowedOptions[this.selectedType].forEach(function(t){e[t]=this.options[t]},this),e.type_id=this.selectedReportTypeId,e}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:biigle.$require("messages.store").handleErrorResponse(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.selectedType===e&&this.selectedVariant===t}},watch:{selectedLabels:function(e){this.options.only_labels=e.map(function(e){return e.id})},hasOnlyLabels:function(e){e||this.flatLabels.forEach(function(e){e.selected=!1})}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0],this.labelTrees=biigle.$require("reports.labelTrees")}}); \ No newline at end of file diff --git a/src/public/assets/styles/main.css b/src/public/assets/styles/main.css new file mode 100644 index 000000000..33781c8f5 --- /dev/null +++ b/src/public/assets/styles/main.css @@ -0,0 +1 @@ +.request-labels-list{min-height:34px;height:auto}.request-labels-list>span:not(:first-child):before{content:', '}.request-labels-well{height:300px} diff --git a/src/resources/assets/js/reports/exportProjectReportForm.js b/src/resources/assets/js/reports/exportProjectReportForm.js index 5a6b88960..fe3b9301b 100644 --- a/src/resources/assets/js/reports/exportProjectReportForm.js +++ b/src/resources/assets/js/reports/exportProjectReportForm.js @@ -12,13 +12,16 @@ biigle.$viewModel('project-report-form', function (element) { 'Annotations': [ 'export_area', 'newest_label', - 'separate_label_trees' + 'separate_label_trees', + 'only_labels', ], 'ImageLabels': [ - 'separate_label_trees' + 'separate_label_trees', + 'only_labels', ], 'VideoAnnotations': [ - 'separate_label_trees' + 'separate_label_trees', + 'only_labels', ], }, }, diff --git a/src/resources/assets/js/reports/exportVideoReportForm.js b/src/resources/assets/js/reports/exportVideoReportForm.js index fd2dfda5f..e9c62bb31 100644 --- a/src/resources/assets/js/reports/exportVideoReportForm.js +++ b/src/resources/assets/js/reports/exportVideoReportForm.js @@ -13,6 +13,7 @@ biigle.$viewModel('video-report-form', function (element) { allowedOptions: { 'VideoAnnotations': [ 'separate_label_trees', + 'only_labels', ], }, }, diff --git a/src/resources/assets/js/reports/exportVolumeReportForm.js b/src/resources/assets/js/reports/exportVolumeReportForm.js index 7e34020f7..fcf702238 100644 --- a/src/resources/assets/js/reports/exportVolumeReportForm.js +++ b/src/resources/assets/js/reports/exportVolumeReportForm.js @@ -14,11 +14,13 @@ biigle.$viewModel('volume-report-form', function (element) { 'newest_label', 'separate_label_trees', 'annotation_session_id', + 'only_labels', ], 'ImageLabels': [ 'separate_label_trees', 'annotation_session_id', - ] + 'only_labels', + ], }, options: { annotation_session_id: null, diff --git a/src/resources/assets/js/reports/mixins/reportForm.js b/src/resources/assets/js/reports/mixins/reportForm.js index c552a453b..4b43272a4 100644 --- a/src/resources/assets/js/reports/mixins/reportForm.js +++ b/src/resources/assets/js/reports/mixins/reportForm.js @@ -5,21 +5,38 @@ */ biigle.$component('reports.mixins.reportForm', { mixins: [biigle.$require('core.mixins.loader')], + components: { + labelTrees: biigle.$require('labelTrees.components.labelTrees'), + }, data: { allowedOptions: {}, selectedType: '', selectedVariant: '', + reportTypes: [], + labelTrees: [], + hasOnlyLabels: false, success: false, errors: {}, options: { export_area: false, newest_label: false, separate_label_trees: false, + only_labels: [], }, }, computed: { - reportTypes: function () { - return biigle.$require('reports.reportTypes'); + flatLabels: function () { + var labels = []; + this.labelTrees.forEach(function (tree) { + Array.prototype.push.apply(labels, tree.labels); + }); + + return labels; + }, + selectedLabels: function () { + return this.flatLabels.filter(function (label) { + return label.selected; + }); }, variants: function () { var variants = {}; @@ -100,8 +117,24 @@ biigle.$component('reports.mixins.reportForm', { return this.selectedType === type && this.selectedVariant === variant; }, }, + watch: { + selectedLabels: function (labels) { + this.options.only_labels = labels.map(function (label) { + return label.id; + }); + }, + hasOnlyLabels: function (has) { + if (!has) { + this.flatLabels.forEach(function (label) { + label.selected = false; + }); + } + }, + }, created: function () { + this.reportTypes = biigle.$require('reports.reportTypes'); this.selectedType = Object.keys(this.variants)[0]; this.selectedVariant = this.availableVariants[0]; + this.labelTrees = biigle.$require('reports.labelTrees'); }, }); diff --git a/src/resources/assets/sass/main.scss b/src/resources/assets/sass/main.scss new file mode 100644 index 000000000..e1953ca1d --- /dev/null +++ b/src/resources/assets/sass/main.scss @@ -0,0 +1,14 @@ +.request-labels-list { + min-height: 34px; + height: auto; + + > span:not(:first-child):before { + content: ', '; + } +} + +.request-labels-well { + // Set absolute height so the flex positioning and scroll of the label trees + // component works (fixed search field and scrollable label trees list). + height: 300px; +} diff --git a/src/resources/views/partials/restrictLabels.blade.php b/src/resources/views/partials/restrictLabels.blade.php new file mode 100644 index 000000000..0b4779688 --- /dev/null +++ b/src/resources/views/partials/restrictLabels.blade.php @@ -0,0 +1,17 @@ +
    +
    + +
    +
    + +
    +
    +
    + Restrict the report to specific labels. Select one or more labels below. +
    +
    + +
    +
    diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index 6959117b0..f06034100 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -3,15 +3,19 @@ @section('title', "Reports for {$project->name}") @push('scripts') - - + + + @endpush @push('styles') - + + + @endpush @section('navbar') @@ -101,6 +105,7 @@ Annotations belonging to different label trees will be separated to different files/sheets.
    + @include('reports::partials.restrictLabels')
    The requested report will be prepared. You will get notified when it is ready. Now you can request a new report or go back to the project.
    diff --git a/src/resources/views/videoReports.blade.php b/src/resources/views/videoReports.blade.php index 4b4eac36c..c45712045 100644 --- a/src/resources/views/videoReports.blade.php +++ b/src/resources/views/videoReports.blade.php @@ -3,15 +3,19 @@ @section('title', "Reports for {$video->name}") @push('scripts') - - + + + @endpush @push('styles') - + + + @endpush @section('navbar') @@ -48,6 +52,7 @@ Annotations belonging to different label trees will be separated to different files.
    + @include('reports::partials.restrictLabels')
    The requested report will be prepared. You will get notified when it is ready. Now you can request a new report or go back to the video.
    diff --git a/src/resources/views/volumeReports.blade.php b/src/resources/views/volumeReports.blade.php index 2279dbde6..d67b9cffd 100644 --- a/src/resources/views/volumeReports.blade.php +++ b/src/resources/views/volumeReports.blade.php @@ -3,15 +3,19 @@ @section('title', "Reports for {$volume->name}") @push('scripts') - - + + + @endpush @push('styles') - + + + @endpush @section('navbar') @@ -102,6 +106,7 @@ Annotations belonging to different label trees will be separated to different files/sheets.
    + @include('reports::partials.restrictLabels')
    The requested report will be prepared. You will get notified when it is ready. Now you can request a new report or go back to the volume.
    From 17f6d8bf02da74a6af82ab51f1dd95ac8d265571 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 4 Sep 2019 14:16:31 +0200 Subject: [PATCH 168/407] Enable select-siblings and select-children for restrict to labels Resolves #58 --- src/public/assets/scripts/annotations.js | 2 +- src/public/assets/scripts/main.js | 2 +- src/public/assets/styles/main.css | 2 +- src/resources/assets/js/reports/mixins/reportForm.js | 3 +++ src/resources/assets/sass/main.scss | 11 +---------- src/resources/views/partials/restrictLabels.blade.php | 9 +++------ 6 files changed, 10 insertions(+), 19 deletions(-) diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index 8eb124bca..4a299e00d 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1 @@ -biigle.$declare("reports.api.volumes",Vue.resource("/api/v1/volumes{/id}/export-area")),biigle.$require("annotations.components.settingsTabPlugins").exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},exportAreaApi:function(){return biigle.$require("reports.api.volumes")},volumeId:function(){return biigle.$require("annotations.volumeId")},messages:function(){return biigle.$require("messages.store")},layer:function(){return new ol.layer.Vector({source:new ol.source.Vector({features:new ol.Collection}),style:[new ol.style.Style({stroke:new ol.style.Stroke({color:"white",width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:"white",width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new ol.interaction.Draw({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(e,t){e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var r=t;return r?r.setCoordinates([e]):r=new ol.geom.Rectangle([e]),r}})},modifyInteraction:function(){return new ol.interaction.Modify({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:ol.events.condition.never})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this,t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.exportAreaApi.delete({id:this.volumeId}).then(function(){e.exportArea=null}).catch(function(i){t.addFeature(r),e.messages.handleErrorResponse(i)})}},updateCurrentImage:function(e,t){this.currentImage=t},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var e=this.currentImage.tiled?0:this.height,t=new ol.geom.Rectangle([[[this.exportArea[0],e-this.exportArea[1]],[this.exportArea[0],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[1]]]]);this.layer.getSource().addFeature(new ol.Feature({geometry:t}))}},handleModifyend:function(e){this.updateExportArea(e.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(e){var t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.updateExportArea(e.feature).catch(function(){t.clear(),r&&t.addFeature(r)})},updateExportArea:function(e){var t=this,r=e.getGeometry().getCoordinates()[0],i=this.currentImage.tiled?0:this.height;r=[r[0][0],i-r[0][1],r[2][0],i-r[2][1]].map(Math.round);var n=this.exportAreaApi.save({id:this.volumeId},{coordinates:r}).then(function(){t.exportArea=r});return n.catch(this.messages.handleErrorResponse),n},extendMap:function(e){e.addLayer(this.layer),e.addInteraction(this.drawInteraction),e.addInteraction(this.modifyInteraction)}},watch:{opacity:function(e,t){e<1?this.settings.set("exportAreaOpacity",e):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(e)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend);var e=biigle.$require("events");e.$on("images.change",this.updateCurrentImage),e.$on("annotations.map.init",this.extendMap)}}; \ No newline at end of file +biigle.$require("annotations.components.settingsTabPlugins").exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},exportAreaApi:function(){return biigle.$require("reports.api.volumes")},volumeId:function(){return biigle.$require("annotations.volumeId")},messages:function(){return biigle.$require("messages.store")},layer:function(){return new ol.layer.Vector({source:new ol.source.Vector({features:new ol.Collection}),style:[new ol.style.Style({stroke:new ol.style.Stroke({color:"white",width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:"white",width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new ol.interaction.Draw({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(e,t){e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var r=t;return r?r.setCoordinates([e]):r=new ol.geom.Rectangle([e]),r}})},modifyInteraction:function(){return new ol.interaction.Modify({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:ol.events.condition.never})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this,t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.exportAreaApi.delete({id:this.volumeId}).then(function(){e.exportArea=null}).catch(function(i){t.addFeature(r),e.messages.handleErrorResponse(i)})}},updateCurrentImage:function(e,t){this.currentImage=t},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var e=this.currentImage.tiled?0:this.height,t=new ol.geom.Rectangle([[[this.exportArea[0],e-this.exportArea[1]],[this.exportArea[0],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[1]]]]);this.layer.getSource().addFeature(new ol.Feature({geometry:t}))}},handleModifyend:function(e){this.updateExportArea(e.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(e){var t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.updateExportArea(e.feature).catch(function(){t.clear(),r&&t.addFeature(r)})},updateExportArea:function(e){var t=this,r=e.getGeometry().getCoordinates()[0],i=this.currentImage.tiled?0:this.height;r=[r[0][0],i-r[0][1],r[2][0],i-r[2][1]].map(Math.round);var n=this.exportAreaApi.save({id:this.volumeId},{coordinates:r}).then(function(){t.exportArea=r});return n.catch(this.messages.handleErrorResponse),n},extendMap:function(e){e.addLayer(this.layer),e.addInteraction(this.drawInteraction),e.addInteraction(this.modifyInteraction)}},watch:{opacity:function(e,t){e<1?this.settings.set("exportAreaOpacity",e):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(e)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend);var e=biigle.$require("events");e.$on("images.change",this.updateCurrentImage),e.$on("annotations.map.init",this.extendMap)}},biigle.$declare("reports.api.volumes",Vue.resource("/api/v1/volumes{/id}/export-area")); \ No newline at end of file diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index bf89a17fe..b9626c6c6 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -biigle.$viewModel("project-report-form",function(e){var t=biigle.$require("reports.projectId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","only_labels"],ImageLabels:["separate_label_trees","only_labels"],VideoAnnotations:["separate_label_trees","only_labels"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.projectReports"))}}})}),biigle.$viewModel("video-report-form",function(e){var t=biigle.$require("reports.videoId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{selectedType:"VideoAnnotations",selectedVariant:"Csv",allowedOptions:{VideoAnnotations:["separate_label_trees","only_labels"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.videoReports"))}}})}),biigle.$viewModel("volume-report-form",function(e){var t=biigle.$require("reports.volumeId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id","only_labels"],ImageLabels:["separate_label_trees","annotation_session_id","only_labels"]},options:{annotation_session_id:null}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.volumeReports"))}}})}),biigle.$declare("reports.api.projectReports",Vue.resource("/api/v1/projects{/id}/reports")),biigle.$declare("reports.api.videoReports",Vue.resource("/api/v1/videos{/id}/reports")),biigle.$declare("reports.api.volumeReports",Vue.resource("/api/v1/volumes{/id}/reports")),biigle.$component("reports.mixins.reportForm",{mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:biigle.$require("labelTrees.components.labelTrees")},data:{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,only_labels:[]}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach(function(t){Array.prototype.push.apply(e,t.labels)}),e},selectedLabels:function(){return this.flatLabels.filter(function(e){return e.selected})},variants:function(){var e={};return this.reportTypes.forEach(function(t){var r=t.name.split("\\");e.hasOwnProperty(r[0])||(e[r[0]]=[]),e[r[0]].push(r[1])}),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach(function(t){e[t.name]=t.id}),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e={};return this.allowedOptions[this.selectedType].forEach(function(t){e[t]=this.options[t]},this),e.type_id=this.selectedReportTypeId,e}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:biigle.$require("messages.store").handleErrorResponse(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.selectedType===e&&this.selectedVariant===t}},watch:{selectedLabels:function(e){this.options.only_labels=e.map(function(e){return e.id})},hasOnlyLabels:function(e){e||this.flatLabels.forEach(function(e){e.selected=!1})}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0],this.labelTrees=biigle.$require("reports.labelTrees")}}); \ No newline at end of file +biigle.$viewModel("project-report-form",function(e){var t=biigle.$require("reports.projectId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","only_labels"],ImageLabels:["separate_label_trees","only_labels"],VideoAnnotations:["separate_label_trees","only_labels"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.projectReports"))}}})}),biigle.$viewModel("video-report-form",function(e){var t=biigle.$require("reports.videoId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{selectedType:"VideoAnnotations",selectedVariant:"Csv",allowedOptions:{VideoAnnotations:["separate_label_trees","only_labels"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.videoReports"))}}})}),biigle.$viewModel("volume-report-form",function(e){var t=biigle.$require("reports.volumeId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id","only_labels"],ImageLabels:["separate_label_trees","annotation_session_id","only_labels"]},options:{annotation_session_id:null}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.volumeReports"))}}})}),biigle.$component("reports.mixins.reportForm",{mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:biigle.$require("labelTrees.components.labelTrees")},data:{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,only_labels:[]}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach(function(t){Array.prototype.push.apply(e,t.labels)}),e},selectedLabels:function(){return this.flatLabels.filter(function(e){return e.selected})},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach(function(t){var r=t.name.split("\\");e.hasOwnProperty(r[0])||(e[r[0]]=[]),e[r[0]].push(r[1])}),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach(function(t){e[t.name]=t.id}),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e={};return this.allowedOptions[this.selectedType].forEach(function(t){e[t]=this.options[t]},this),e.type_id=this.selectedReportTypeId,e}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:biigle.$require("messages.store").handleErrorResponse(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.selectedType===e&&this.selectedVariant===t}},watch:{selectedLabels:function(e){this.options.only_labels=e.map(function(e){return e.id})},hasOnlyLabels:function(e){e||this.flatLabels.forEach(function(e){e.selected=!1})}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0],this.labelTrees=biigle.$require("reports.labelTrees")}}),biigle.$declare("reports.api.projectReports",Vue.resource("/api/v1/projects{/id}/reports")),biigle.$declare("reports.api.videoReports",Vue.resource("/api/v1/videos{/id}/reports")),biigle.$declare("reports.api.volumeReports",Vue.resource("/api/v1/volumes{/id}/reports")); \ No newline at end of file diff --git a/src/public/assets/styles/main.css b/src/public/assets/styles/main.css index 33781c8f5..cedb8ade2 100644 --- a/src/public/assets/styles/main.css +++ b/src/public/assets/styles/main.css @@ -1 +1 @@ -.request-labels-list{min-height:34px;height:auto}.request-labels-list>span:not(:first-child):before{content:', '}.request-labels-well{height:300px} +.request-labels-well{height:500px} diff --git a/src/resources/assets/js/reports/mixins/reportForm.js b/src/resources/assets/js/reports/mixins/reportForm.js index 4b43272a4..2434e8108 100644 --- a/src/resources/assets/js/reports/mixins/reportForm.js +++ b/src/resources/assets/js/reports/mixins/reportForm.js @@ -38,6 +38,9 @@ biigle.$component('reports.mixins.reportForm', { return label.selected; }); }, + selectedLabelsCount: function () { + return this.selectedLabels.length; + }, variants: function () { var variants = {}; this.reportTypes.forEach(function (type) { diff --git a/src/resources/assets/sass/main.scss b/src/resources/assets/sass/main.scss index e1953ca1d..195092afd 100644 --- a/src/resources/assets/sass/main.scss +++ b/src/resources/assets/sass/main.scss @@ -1,14 +1,5 @@ -.request-labels-list { - min-height: 34px; - height: auto; - - > span:not(:first-child):before { - content: ', '; - } -} - .request-labels-well { // Set absolute height so the flex positioning and scroll of the label trees // component works (fixed search field and scrollable label trees list). - height: 300px; + height: 500px; } diff --git a/src/resources/views/partials/restrictLabels.blade.php b/src/resources/views/partials/restrictLabels.blade.php index 0b4779688..9c045a58f 100644 --- a/src/resources/views/partials/restrictLabels.blade.php +++ b/src/resources/views/partials/restrictLabels.blade.php @@ -1,17 +1,14 @@
    -
    - -
    - Restrict the report to specific labels. Select one or more labels below. + Restrict the report to specific labels. Select one or more labels below. Hold Ctrl to select all child labels and/or Alt to select all sibling labels.
    - +
    From 6c0c57976401c25de2c9e3de922978c08335c3ee Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 4 Sep 2019 14:33:29 +0200 Subject: [PATCH 169/407] Rename extended_report Python script --- src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php | 2 +- .../Reports/Volumes/Annotations/ExtendedReportGenerator.php | 2 +- .../Reports/Volumes/ImageLabels/BasicReportGenerator.php | 2 +- src/config/reports.php | 2 +- src/resources/scripts/{extended_report.py => csvs_to_xlsx.py} | 0 5 files changed, 4 insertions(+), 4 deletions(-) rename src/resources/scripts/{extended_report.py => csvs_to_xlsx.py} (100%) diff --git a/src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php b/src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php index 482cb031d..7ab51b85b 100644 --- a/src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php +++ b/src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php @@ -65,7 +65,7 @@ public function generateReport($path) $this->tmpFiles[] = $this->createCsv($rows, $this->source->name); } - $this->executeScript('extended_report', $path); + $this->executeScript('csvs_to_xlsx', $path); } /** diff --git a/src/Support/Reports/Volumes/Annotations/ExtendedReportGenerator.php b/src/Support/Reports/Volumes/Annotations/ExtendedReportGenerator.php index e58c21eff..b6adce946 100644 --- a/src/Support/Reports/Volumes/Annotations/ExtendedReportGenerator.php +++ b/src/Support/Reports/Volumes/Annotations/ExtendedReportGenerator.php @@ -49,7 +49,7 @@ public function generateReport($path) $this->tmpFiles[] = $this->createCsv($rows, $this->source->name); } - $this->executeScript('extended_report', $path); + $this->executeScript('csvs_to_xlsx', $path); } /** diff --git a/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php index eadbbf83f..7351bafcc 100644 --- a/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php @@ -50,7 +50,7 @@ public function generateReport($path) $this->tmpFiles[] = $this->createCsv($rows, $this->source->name); } - $this->executeScript('extended_report', $path); + $this->executeScript('csvs_to_xlsx', $path); } /** diff --git a/src/config/reports.php b/src/config/reports.php index 097e81612..fade9818b 100644 --- a/src/config/reports.php +++ b/src/config/reports.php @@ -12,7 +12,7 @@ */ 'scripts' => [ 'basic_report' => __DIR__.'/../resources/scripts/basic_report.py', - 'extended_report' => __DIR__.'/../resources/scripts/extended_report.py', + 'csvs_to_xlsx' => __DIR__.'/../resources/scripts/csvs_to_xlsx.py', 'full_report' => __DIR__.'/../resources/scripts/full_report.py', ], diff --git a/src/resources/scripts/extended_report.py b/src/resources/scripts/csvs_to_xlsx.py similarity index 100% rename from src/resources/scripts/extended_report.py rename to src/resources/scripts/csvs_to_xlsx.py From 0761209ce6f294c35da4d5b957d24a861331a82d Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 4 Sep 2019 14:33:46 +0200 Subject: [PATCH 170/407] Fix test case names --- .../{BasicReportTest.php => BasicReportGeneratorTest.php} | 0 ...ctsImageLabelsCsvReportTest.php => CsvReportGeneratorTest.php} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename tests/Support/Reports/Projects/ImageLabels/{BasicReportTest.php => BasicReportGeneratorTest.php} (100%) rename tests/Support/Reports/Projects/ImageLabels/{ExportModuleSupportReportsProjectsImageLabelsCsvReportTest.php => CsvReportGeneratorTest.php} (100%) diff --git a/tests/Support/Reports/Projects/ImageLabels/BasicReportTest.php b/tests/Support/Reports/Projects/ImageLabels/BasicReportGeneratorTest.php similarity index 100% rename from tests/Support/Reports/Projects/ImageLabels/BasicReportTest.php rename to tests/Support/Reports/Projects/ImageLabels/BasicReportGeneratorTest.php diff --git a/tests/Support/Reports/Projects/ImageLabels/ExportModuleSupportReportsProjectsImageLabelsCsvReportTest.php b/tests/Support/Reports/Projects/ImageLabels/CsvReportGeneratorTest.php similarity index 100% rename from tests/Support/Reports/Projects/ImageLabels/ExportModuleSupportReportsProjectsImageLabelsCsvReportTest.php rename to tests/Support/Reports/Projects/ImageLabels/CsvReportGeneratorTest.php From f6f96a380e615d85c26a1f178da93714605a5a46 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 4 Sep 2019 16:03:40 +0200 Subject: [PATCH 171/407] Implement abundance annotation report References #51 --- .../Annotations/AbundanceReportGenerator.php | 29 ++++ .../Annotations/AbundanceReportGenerator.php | 120 ++++++++++++++ ...09_04_142200_add_abundance_report_type.php | 30 ++++ .../AbundanceReportGeneratorTest.php | 16 ++ .../AbundanceReportGeneratorTest.php | 150 ++++++++++++++++++ 5 files changed, 345 insertions(+) create mode 100644 src/Support/Reports/Projects/Annotations/AbundanceReportGenerator.php create mode 100644 src/Support/Reports/Volumes/Annotations/AbundanceReportGenerator.php create mode 100644 src/database/migrations/2019_09_04_142200_add_abundance_report_type.php create mode 100644 tests/Support/Reports/Projects/Annotations/AbundanceReportGeneratorTest.php create mode 100644 tests/Support/Reports/Volumes/Annotations/AbundanceReportGeneratorTest.php diff --git a/src/Support/Reports/Projects/Annotations/AbundanceReportGenerator.php b/src/Support/Reports/Projects/Annotations/AbundanceReportGenerator.php new file mode 100644 index 000000000..e9d19aa5e --- /dev/null +++ b/src/Support/Reports/Projects/Annotations/AbundanceReportGenerator.php @@ -0,0 +1,29 @@ +query()->get(); + + if ($this->shouldSeparateLabelTrees()) { + $rows = $rows->groupBy('label_tree_id'); + $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); + + foreach ($trees as $id => $name) { + $rowGroup = $rows->get($id); + $labels = Label::whereIn('id', $rowGroup->pluck('label_id')->unique())->get(); + $this->tmpFiles[] = $this->createCsv($rowGroup, $name, $labels); + } + } else { + $labels = Label::whereIn('id', $rows->pluck('label_id')->unique())->get(); + $this->tmpFiles[] = $this->createCsv($rows, $this->source->name, $labels); + } + + $this->executeScript('csvs_to_xlsx', $path); + } + + /** + * Assemble a new DB query for the volume of this report. + * + * @return \Illuminate\Database\Query\Builder + */ + protected function query() + { + $query = $this->initQuery() + ->orderBy('images.filename') + ->select(DB::raw('images.filename, annotation_labels.label_id, count(annotation_labels.label_id) as count')) + ->groupBy('annotation_labels.label_id', 'images.id'); + + if ($this->shouldSeparateLabelTrees()) { + $query->addSelect('labels.label_tree_id') + ->groupBy('annotation_labels.label_id', 'images.id', 'labels.label_tree_id'); + } + + return $query; + } + + /** + * Create a CSV file for a single sheet of the spreadsheet of this report. + * + * @param \Illuminate\Support\Collection $rows The rows for the CSV + * @param string $title The title to put in the first row of the CSV + * @param array $labels + * + * @return CsvFile + */ + protected function createCsv($rows, $title = '', $labels) + { + $rows = $rows->groupBy('filename'); + + $csv = CsvFile::makeTmp(); + $csv->put([$title]); + + $columns = ['image_filename']; + foreach ($labels as $label) { + $columns[] = $label->name; + } + $csv->put($columns); + + + foreach ($rows as $filename => $annotations) { + $row = [$filename]; + $annotations = $annotations->keyBy('label_id'); + foreach ($labels as $label) { + if ($annotations->has($label->id)) { + $row[] = $annotations[$label->id]->count; + } else { + $row[] = 0; + } + } + + $csv->put($row); + } + + $csv->close(); + + return $csv; + } +} diff --git a/src/database/migrations/2019_09_04_142200_add_abundance_report_type.php b/src/database/migrations/2019_09_04_142200_add_abundance_report_type.php new file mode 100644 index 000000000..5031d6726 --- /dev/null +++ b/src/database/migrations/2019_09_04_142200_add_abundance_report_type.php @@ -0,0 +1,30 @@ +insert([ + ['name' => 'Annotations\Abundance'], + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + DB::table('report_types') + ->where('name', 'Annotations\Abundance') + ->delete(); + } +} diff --git a/tests/Support/Reports/Projects/Annotations/AbundanceReportGeneratorTest.php b/tests/Support/Reports/Projects/Annotations/AbundanceReportGeneratorTest.php new file mode 100644 index 000000000..1b686b1a2 --- /dev/null +++ b/tests/Support/Reports/Projects/Annotations/AbundanceReportGeneratorTest.php @@ -0,0 +1,16 @@ +assertEquals('abundance annotation report', $generator->getName()); + $this->assertEquals('abundance_annotation_report', $generator->getFilename()); + } +} diff --git a/tests/Support/Reports/Volumes/Annotations/AbundanceReportGeneratorTest.php b/tests/Support/Reports/Volumes/Annotations/AbundanceReportGeneratorTest.php new file mode 100644 index 000000000..8e6bc657a --- /dev/null +++ b/tests/Support/Reports/Volumes/Annotations/AbundanceReportGeneratorTest.php @@ -0,0 +1,150 @@ +assertEquals('abundance annotation report', $generator->getName()); + $this->assertEquals('abundance_annotation_report', $generator->getFilename()); + $this->assertStringEndsWith('.xlsx', $generator->getFullFilename()); + } + + public function testGenerateReport() + { + $volume = VolumeTest::create(); + + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + + $i1 = ImageTest::create(['volume_id' => $volume->id, 'filename' => 'a.jpg']); + + $al1 = AnnotationLabelTest::create([ + 'annotation_id' => AnnotationTest::create(['image_id' => $i1->id])->id, + 'label_id' => $root->id, + ]); + + $i2 = ImageTest::create(['volume_id' => $volume->id, 'filename' => 'b.jpg']); + + $al2 = AnnotationLabelTest::create([ + 'annotation_id' => AnnotationTest::create(['image_id' => $i2->id])->id, + 'label_id' => $child->id, + ]); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->once() + ->with([$volume->name]); + + $mock->shouldReceive('put') + ->once() + ->with([ + 'image_filename', + $root->name, + $child->name, + ]); + + $mock->shouldReceive('put') + ->once() + ->with(['a.jpg', 1, 0]); + + $mock->shouldReceive('put') + ->once() + ->with(['b.jpg', 0, 1]); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $generator = new AbundanceReportGenerator; + $generator->setSource($volume); + $mock = Mockery::mock(); + $mock->shouldReceive('run')->once(); + $generator->setPythonScriptRunner($mock); + $generator->generateReport('my/path'); + } + + public function testGenerateReportSeparateLabelTrees() + { + $label1 = LabelTest::create(); + $label2 = LabelTest::create(); + + $image = ImageTest::create(); + + $annotation = AnnotationTest::create([ + 'image_id' => $image->id, + ]); + + $al1 = AnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'label_id' => $label1->id, + ]); + $al2 = AnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'label_id' => $label2->id, + ]); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->once() + ->with([$label1->tree->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$label2->tree->name]); + + $mock->shouldReceive('put') + ->once() + ->with(['image_filename', $label1->name]); + + $mock->shouldReceive('put') + ->once() + ->with(['image_filename', $label2->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$image->filename, 1]); + + $mock->shouldReceive('put') + ->once() + ->with([$image->filename, 1]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $generator = new AbundanceReportGenerator([ + 'separateLabelTrees' => true, + ]); + $generator->setSource($image->volume); + $mock = Mockery::mock(); + $mock->shouldReceive('run')->once(); + $generator->setPythonScriptRunner($mock); + $generator->generateReport('my/path'); + } +} From 470e4b76d575b9f2b9d4588eff2e776f7a0a08c6 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 5 Sep 2019 14:14:00 +0200 Subject: [PATCH 172/407] Implement aggregate child label support for the Abundance report References #51 --- .../Annotations/AbundanceReportGenerator.php | 86 +++++++- .../Annotations/AnnotationReportGenerator.php | 10 + .../AbundanceReportGeneratorTest.php | 205 ++++++++++++++++++ 3 files changed, 300 insertions(+), 1 deletion(-) diff --git a/src/Support/Reports/Volumes/Annotations/AbundanceReportGenerator.php b/src/Support/Reports/Volumes/Annotations/AbundanceReportGenerator.php index aebd3eb9c..1cfb87074 100644 --- a/src/Support/Reports/Volumes/Annotations/AbundanceReportGenerator.php +++ b/src/Support/Reports/Volumes/Annotations/AbundanceReportGenerator.php @@ -89,6 +89,12 @@ protected function createCsv($rows, $title = '', $labels) { $rows = $rows->groupBy('filename'); + if ($this->shouldAggregateChildLabels()) { + [$rows, $labels] = $this->aggregateChildLabels($rows, $labels); + } + + $labels = $labels->sortBy('id'); + $csv = CsvFile::makeTmp(); $csv->put([$title]); @@ -98,7 +104,6 @@ protected function createCsv($rows, $title = '', $labels) } $csv->put($columns); - foreach ($rows as $filename => $annotations) { $row = [$filename]; $annotations = $annotations->keyBy('label_id'); @@ -117,4 +122,83 @@ protected function createCsv($rows, $title = '', $labels) return $csv; } + + /** + * Aggregate the number of child labels to the number of the highest parent label + * and remove the child labels from the list. + * + * @param \Illuminate\Support\Collection $rows + * @param \Illuminate\Support\Collection $labels + * + * @return array + */ + protected function aggregateChildLabels($rows, $labels) + { + $parentIdMap = $labels->pluck('parent_id', 'id') + ->when($this->isRestrictedToLabels(), function ($labels) { + $onlyLabels = $this->getOnlyLabels(); + + return $labels->map(function ($value) use ($onlyLabels) { + // Act as if excluded parent labels do not exist. + return in_array($value, $onlyLabels) ? $value : null; + }); + }) + ->filter(function ($value) { + return !is_null($value); + }); + + // Determine the highest parent label for all child labels. + do { + $hoistedParentLabel = false; + foreach ($parentIdMap as $id => $parentId) { + if ($parentIdMap->has($parentId)) { + $parentIdMap[$id] = $parentIdMap[$parentId]; + $hoistedParentLabel = true; + } + } + } while ($hoistedParentLabel); + + // Remove all labels that should be aggregated to their parent. + $labels = $labels->reject(function ($label) use ($parentIdMap) { + return $parentIdMap->has($label->id); + }); + + // Add all labels that are parents of existing labels but were not included + // because there are no annotations with these labels. + $missingLabels = $parentIdMap->values() + ->unique() + ->diff($labels->pluck('id')); + + $labels = $labels->concat(Label::whereIn('id', $missingLabels)->get()); + + foreach ($rows as $filename => $annotations) { + // Aggregate the number of annotations of child labels to the number of their + // parent. + $annotations = $annotations->keyBy('label_id'); + foreach ($annotations as $labelId => $annotation) { + $parentId = $parentIdMap->get($labelId); + if ($parentId) { + if ($annotations->has($parentId)) { + $annotations[$parentId]->count += $annotation->count; + } else { + // Add a new entry for a parent label which has no "own" + // annotations. + $annotations[$parentId] = (object) [ + 'count' => $annotation->count, + 'label_id' => $parentId, + 'filename' => $filename, + ]; + } + } + } + + // Remove rows of child labels so they are not counted twice. + $rows[$filename] = $annotations->values() + ->filter(function ($annotation) use ($parentIdMap) { + return !$parentIdMap->has($annotation->label_id); + }); + } + + return [$rows, $labels]; + } } diff --git a/src/Support/Reports/Volumes/Annotations/AnnotationReportGenerator.php b/src/Support/Reports/Volumes/Annotations/AnnotationReportGenerator.php index 16524378f..fe6aedac9 100644 --- a/src/Support/Reports/Volumes/Annotations/AnnotationReportGenerator.php +++ b/src/Support/Reports/Volumes/Annotations/AnnotationReportGenerator.php @@ -285,4 +285,14 @@ protected function isRestrictedToNewestLabel() { return $this->options->get('newestLabel', false); } + + /** + * Determines if this report should aggregate child labels. + * + * @return bool + */ + protected function shouldAggregateChildLabels() + { + return $this->options->get('aggregateChildLabels', false); + } } diff --git a/tests/Support/Reports/Volumes/Annotations/AbundanceReportGeneratorTest.php b/tests/Support/Reports/Volumes/Annotations/AbundanceReportGeneratorTest.php index 8e6bc657a..a85ef81cc 100644 --- a/tests/Support/Reports/Volumes/Annotations/AbundanceReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/Annotations/AbundanceReportGeneratorTest.php @@ -147,4 +147,209 @@ public function testGenerateReportSeparateLabelTrees() $generator->setPythonScriptRunner($mock); $generator->generateReport('my/path'); } + + public function testGenerateReportAggregateChildLabels() + { + $volume = VolumeTest::create(); + + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + + $childchild = LabelTest::create([ + 'parent_id' => $child->id, + 'label_tree_id' => $child->label_tree_id, + ]); + + $i1 = ImageTest::create(['volume_id' => $volume->id, 'filename' => 'a.jpg']); + + $al1 = AnnotationLabelTest::create([ + 'annotation_id' => AnnotationTest::create(['image_id' => $i1->id])->id, + 'label_id' => $child->id, + ]); + + $i2 = ImageTest::create(['volume_id' => $volume->id, 'filename' => 'b.jpg']); + + $al3 = AnnotationLabelTest::create([ + 'annotation_id' => AnnotationTest::create(['image_id' => $i2->id])->id, + 'label_id' => $child->id, + ]); + + $al3 = AnnotationLabelTest::create([ + 'annotation_id' => AnnotationTest::create(['image_id' => $i2->id])->id, + 'label_id' => $childchild->id, + ]); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->once() + ->with([$volume->name]); + + $mock->shouldReceive('put') + ->once() + ->with([ + 'image_filename', + $root->name, + ]); + + $mock->shouldReceive('put') + ->once() + ->with(['a.jpg', 1]); + + $mock->shouldReceive('put') + ->once() + ->with(['b.jpg', 2]); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $generator = new AbundanceReportGenerator([ + 'aggregateChildLabels' => true, + ]); + $generator->setSource($volume); + $mock = Mockery::mock(); + $mock->shouldReceive('run')->once(); + $generator->setPythonScriptRunner($mock); + $generator->generateReport('my/path'); + } + + public function testGenerateReportOnlyLabelsAggregateChildLabels() + { + $volume = VolumeTest::create(); + $image = ImageTest::create(['volume_id' => $volume->id, 'filename' => 'a.jpg']); + + $root1 = LabelTest::create(); + $child1 = LabelTest::create([ + 'parent_id' => $root1->id, + 'label_tree_id' => $root1->label_tree_id, + ]); + + // Test case where the child label should not be included. + AnnotationLabelTest::create([ + 'annotation_id' => AnnotationTest::create([ + 'image_id' => $image->id, + ])->id, + 'label_id' => $root1->id, + ]); + + AnnotationLabelTest::create([ + 'annotation_id' => AnnotationTest::create([ + 'image_id' => $image->id, + ])->id, + 'label_id' => $root1->id, + ]); + + AnnotationLabelTest::create([ + 'annotation_id' => AnnotationTest::create([ + 'image_id' => $image->id, + ])->id, + 'label_id' => $child1->id, + ]); + + $root2 = LabelTest::create(); + $child2 = LabelTest::create([ + 'parent_id' => $root2->id, + 'label_tree_id' => $root2->label_tree_id, + ]); + + // Test case where the root label should not be included but has annotations. + AnnotationLabelTest::create([ + 'annotation_id' => AnnotationTest::create([ + 'image_id' => $image->id, + ])->id, + 'label_id' => $root2->id, + ]); + + AnnotationLabelTest::create([ + 'annotation_id' => AnnotationTest::create([ + 'image_id' => $image->id, + ])->id, + 'label_id' => $root2->id, + ]); + + AnnotationLabelTest::create([ + 'annotation_id' => AnnotationTest::create([ + 'image_id' => $image->id, + ])->id, + 'label_id' => $child2->id, + ]); + + $root3 = LabelTest::create(); + $child3 = LabelTest::create([ + 'parent_id' => $root3->id, + 'label_tree_id' => $root3->label_tree_id, + ]); + + // Test case where the root label should not be included but has no annotations. + AnnotationLabelTest::create([ + 'annotation_id' => AnnotationTest::create([ + 'image_id' => $image->id, + ])->id, + 'label_id' => $child3->id, + ]); + + $root4 = LabelTest::create(); + $child4 = LabelTest::create([ + 'parent_id' => $root4->id, + 'label_tree_id' => $root4->label_tree_id, + ]); + + // Test case where the root label should be included but has no annotations. + AnnotationLabelTest::create([ + 'annotation_id' => AnnotationTest::create([ + 'image_id' => $image->id, + ])->id, + 'label_id' => $child4->id, + ]); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->once() + ->with([$volume->name]); + + $mock->shouldReceive('put') + ->once() + ->with([ + 'image_filename', + $root1->name, + $child2->name, + $child3->name, + $root4->name, + ]); + + $mock->shouldReceive('put') + ->once() + ->with([$image->filename, 2, 1, 1, 1]); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $generator = new AbundanceReportGenerator([ + 'aggregateChildLabels' => true, + 'onlyLabels' => [ + $root1->id, + $child2->id, + $child3->id, + $root4->id, + $child4->id, + ], + ]); + $generator->setSource($volume); + $mock = Mockery::mock(); + $mock->shouldReceive('run')->once(); + $generator->setPythonScriptRunner($mock); + $generator->generateReport('my/path'); + } } From cd5c30ec9a841f6f4184567b245e325886deee9a Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 5 Sep 2019 15:05:06 +0200 Subject: [PATCH 173/407] Implement aggregate child labels checkbox in volume and project form References #51 --- .../Api/Projects/ProjectReportController.php | 1 + src/Http/Controllers/Api/ReportController.php | 2 ++ .../Api/Volumes/VolumeReportController.php | 1 + src/public/assets/scripts/main.js | 2 +- .../assets/js/reports/exportProjectReportForm.js | 1 + .../assets/js/reports/exportVolumeReportForm.js | 1 + src/resources/assets/js/reports/mixins/reportForm.js | 10 +++++++++- src/resources/views/projectReports.blade.php | 11 +++++++++++ src/resources/views/volumeReports.blade.php | 11 +++++++++++ 9 files changed, 38 insertions(+), 2 deletions(-) diff --git a/src/Http/Controllers/Api/Projects/ProjectReportController.php b/src/Http/Controllers/Api/Projects/ProjectReportController.php index d700adfa3..ee1fc6233 100644 --- a/src/Http/Controllers/Api/Projects/ProjectReportController.php +++ b/src/Http/Controllers/Api/Projects/ProjectReportController.php @@ -28,6 +28,7 @@ class ProjectReportController extends ReportController * @apiParam (Optional arguments) {Boolean} newest_label If `true`, restrict the report to the newest label of each annotation. * @apiParam (Optional arguments) {Boolean} separateLabelTrees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet. * @apiParam (Optional arguments) {Number[]} only_labels Array of label IDs to restrict the report to. Omit or leave empty to take all labels. + * @apiParam (Optional arguments) {Boolean} aggregate_child_labels If `true`, add the abundance of child labels to the abundance of their parent labels and omit the child labels. This is only valid for the Basic, Extended and Abundance reports. Labels that are excluded with `only_labels` are not counted. * * @apiPermission projectMember * diff --git a/src/Http/Controllers/Api/ReportController.php b/src/Http/Controllers/Api/ReportController.php index 6d3b2b6e7..a25c6c4e7 100644 --- a/src/Http/Controllers/Api/ReportController.php +++ b/src/Http/Controllers/Api/ReportController.php @@ -23,6 +23,7 @@ protected function getOptions(Request $request) 'newest_label' => 'nullable|boolean', 'only_labels' => 'nullable|array', 'only_labels.*' => 'exists:labels,id', + 'aggregate_child_labels' => "nullable|boolean", ]); return [ @@ -30,6 +31,7 @@ protected function getOptions(Request $request) 'exportArea' => (bool) $request->input('export_area', false), 'newestLabel' => (bool) $request->input('newest_label', false), 'onlyLabels' => $request->input('only_labels', []), + 'aggregateChildLabels' => (bool) $request->input('aggregate_child_labels', false), ]; } } diff --git a/src/Http/Controllers/Api/Volumes/VolumeReportController.php b/src/Http/Controllers/Api/Volumes/VolumeReportController.php index a9e1cdc35..89b8eda0a 100644 --- a/src/Http/Controllers/Api/Volumes/VolumeReportController.php +++ b/src/Http/Controllers/Api/Volumes/VolumeReportController.php @@ -29,6 +29,7 @@ class VolumeReportController extends ReportController * @apiParam (Optional arguments) {Boolean} separate_label_trees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet. * @apiParam (Optional arguments) {Number} annotation_session_id ID of an annotation session of the volume. If given, only annotations belonging to the annotation session are included in the report. * @apiParam (Optional arguments) {Number[]} only_labels Array of label IDs to restrict the report to. Omit or leave empty to take all labels. + * @apiParam (Optional arguments) {Boolean} aggregate_child_labels If `true`, add the abundance of child labels to the abundance of their parent labels and omit the child labels. This is only valid for the Basic, Extended and Abundance reports. Labels that are excluded with `only_labels` are not counted. * * @apiPermission projectMember * diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index b9626c6c6..a360741d7 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -biigle.$viewModel("project-report-form",function(e){var t=biigle.$require("reports.projectId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","only_labels"],ImageLabels:["separate_label_trees","only_labels"],VideoAnnotations:["separate_label_trees","only_labels"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.projectReports"))}}})}),biigle.$viewModel("video-report-form",function(e){var t=biigle.$require("reports.videoId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{selectedType:"VideoAnnotations",selectedVariant:"Csv",allowedOptions:{VideoAnnotations:["separate_label_trees","only_labels"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.videoReports"))}}})}),biigle.$viewModel("volume-report-form",function(e){var t=biigle.$require("reports.volumeId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id","only_labels"],ImageLabels:["separate_label_trees","annotation_session_id","only_labels"]},options:{annotation_session_id:null}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.volumeReports"))}}})}),biigle.$component("reports.mixins.reportForm",{mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:biigle.$require("labelTrees.components.labelTrees")},data:{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,only_labels:[]}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach(function(t){Array.prototype.push.apply(e,t.labels)}),e},selectedLabels:function(){return this.flatLabels.filter(function(e){return e.selected})},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach(function(t){var r=t.name.split("\\");e.hasOwnProperty(r[0])||(e[r[0]]=[]),e[r[0]].push(r[1])}),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach(function(t){e[t.name]=t.id}),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e={};return this.allowedOptions[this.selectedType].forEach(function(t){e[t]=this.options[t]},this),e.type_id=this.selectedReportTypeId,e}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:biigle.$require("messages.store").handleErrorResponse(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.selectedType===e&&this.selectedVariant===t}},watch:{selectedLabels:function(e){this.options.only_labels=e.map(function(e){return e.id})},hasOnlyLabels:function(e){e||this.flatLabels.forEach(function(e){e.selected=!1})}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0],this.labelTrees=biigle.$require("reports.labelTrees")}}),biigle.$declare("reports.api.projectReports",Vue.resource("/api/v1/projects{/id}/reports")),biigle.$declare("reports.api.videoReports",Vue.resource("/api/v1/videos{/id}/reports")),biigle.$declare("reports.api.volumeReports",Vue.resource("/api/v1/volumes{/id}/reports")); \ No newline at end of file +biigle.$viewModel("project-report-form",function(e){var t=biigle.$require("reports.projectId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","only_labels"],VideoAnnotations:["separate_label_trees","only_labels"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.projectReports"))}}})}),biigle.$viewModel("video-report-form",function(e){var t=biigle.$require("reports.videoId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{selectedType:"VideoAnnotations",selectedVariant:"Csv",allowedOptions:{VideoAnnotations:["separate_label_trees","only_labels"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.videoReports"))}}})}),biigle.$viewModel("volume-report-form",function(e){var t=biigle.$require("reports.volumeId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","annotation_session_id","only_labels"]},options:{annotation_session_id:null}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.volumeReports"))}}})}),biigle.$declare("reports.api.projectReports",Vue.resource("/api/v1/projects{/id}/reports")),biigle.$declare("reports.api.videoReports",Vue.resource("/api/v1/videos{/id}/reports")),biigle.$declare("reports.api.volumeReports",Vue.resource("/api/v1/volumes{/id}/reports")),biigle.$component("reports.mixins.reportForm",{mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:biigle.$require("labelTrees.components.labelTrees")},data:{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,only_labels:[],aggregate_child_labels:!1}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach(function(t){Array.prototype.push.apply(e,t.labels)}),e},selectedLabels:function(){return this.flatLabels.filter(function(e){return e.selected})},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach(function(t){var r=t.name.split("\\");e.hasOwnProperty(r[0])||(e[r[0]]=[]),e[r[0]].push(r[1])}),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach(function(t){e[t.name]=t.id}),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e={};return this.allowedOptions[this.selectedType].forEach(function(t){e[t]=this.options[t]},this),e.type_id=this.selectedReportTypeId,e}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:biigle.$require("messages.store").handleErrorResponse(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map(function(e){return e.id})},hasOnlyLabels:function(e){e||this.flatLabels.forEach(function(e){e.selected=!1})}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0],this.labelTrees=biigle.$require("reports.labelTrees")}}); \ No newline at end of file diff --git a/src/resources/assets/js/reports/exportProjectReportForm.js b/src/resources/assets/js/reports/exportProjectReportForm.js index fe3b9301b..5e4d40396 100644 --- a/src/resources/assets/js/reports/exportProjectReportForm.js +++ b/src/resources/assets/js/reports/exportProjectReportForm.js @@ -14,6 +14,7 @@ biigle.$viewModel('project-report-form', function (element) { 'newest_label', 'separate_label_trees', 'only_labels', + 'aggregate_child_labels', ], 'ImageLabels': [ 'separate_label_trees', diff --git a/src/resources/assets/js/reports/exportVolumeReportForm.js b/src/resources/assets/js/reports/exportVolumeReportForm.js index fcf702238..229b85fdf 100644 --- a/src/resources/assets/js/reports/exportVolumeReportForm.js +++ b/src/resources/assets/js/reports/exportVolumeReportForm.js @@ -15,6 +15,7 @@ biigle.$viewModel('volume-report-form', function (element) { 'separate_label_trees', 'annotation_session_id', 'only_labels', + 'aggregate_child_labels', ], 'ImageLabels': [ 'separate_label_trees', diff --git a/src/resources/assets/js/reports/mixins/reportForm.js b/src/resources/assets/js/reports/mixins/reportForm.js index 2434e8108..6a05567a9 100644 --- a/src/resources/assets/js/reports/mixins/reportForm.js +++ b/src/resources/assets/js/reports/mixins/reportForm.js @@ -22,6 +22,7 @@ biigle.$component('reports.mixins.reportForm', { newest_label: false, separate_label_trees: false, only_labels: [], + aggregate_child_labels: false, }, }, computed: { @@ -110,6 +111,13 @@ biigle.$component('reports.mixins.reportForm', { wantsType: function (type) { return this.selectedType === type; }, + wantsVariant: function (variant) { + if (Array.isArray(variant)) { + return variant.indexOf(this.selectedVariant) !== -1; + } + + return this.selectedVariant === variant; + }, hasError: function (key) { return this.errors.hasOwnProperty(key); }, @@ -117,7 +125,7 @@ biigle.$component('reports.mixins.reportForm', { return this.errors[key] ? this.errors[key].join(' ') : ''; }, wantsCombination: function (type, variant) { - return this.selectedType === type && this.selectedVariant === variant; + return this.wantsType(type) && this.wantsVariant(variant); }, }, watch: { diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index f06034100..70fc8849f 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -93,6 +93,17 @@ Only the newest label of each annotation will be included in the report.
    +
    +
    + +
    +
    +
    + Aggregate the abundance of child labels to their parent label. +
    +
    diff --git a/src/resources/views/volumeReports.blade.php b/src/resources/views/volumeReports.blade.php index d67b9cffd..d9443296e 100644 --- a/src/resources/views/volumeReports.blade.php +++ b/src/resources/views/volumeReports.blade.php @@ -94,6 +94,17 @@ Only the newest label of each annotation will be included in the report.
    +
    +
    + +
    +
    +
    + Aggregate the abundance of child labels to their parent label. +
    +
    From 6ac4cf811907b27ad866022e3ef9f67d9357e1db Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 5 Sep 2019 15:05:45 +0200 Subject: [PATCH 174/407] Fix aggregate child label for Abundance report If a parent label without "own" annotations was more than one level up from the child labels with "own" annotations it was not included in the report. Now all possible labels are considered. --- .../Annotations/AbundanceReportGenerator.php | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/src/Support/Reports/Volumes/Annotations/AbundanceReportGenerator.php b/src/Support/Reports/Volumes/Annotations/AbundanceReportGenerator.php index 1cfb87074..7b7d05d57 100644 --- a/src/Support/Reports/Volumes/Annotations/AbundanceReportGenerator.php +++ b/src/Support/Reports/Volumes/Annotations/AbundanceReportGenerator.php @@ -134,6 +134,18 @@ protected function createCsv($rows, $title = '', $labels) */ protected function aggregateChildLabels($rows, $labels) { + // Add all possible labels because the parent to which the child labels should + // be aggregated may not have "own" annotations. Unused labels are filtered + // later. + $addLabels = Label::whereIn('label_tree_id', $labels->pluck('label_tree_id')->unique()) + ->whereNotIn('id', $labels->pluck('id')) + ->when($this->isRestrictedToLabels(), function ($query) { + $query->whereIn('id', $this->getOnlyLabels()); + }) + ->get(); + + $labels = $labels->concat($addLabels); + $parentIdMap = $labels->pluck('parent_id', 'id') ->when($this->isRestrictedToLabels(), function ($labels) { $onlyLabels = $this->getOnlyLabels(); @@ -143,8 +155,8 @@ protected function aggregateChildLabels($rows, $labels) return in_array($value, $onlyLabels) ? $value : null; }); }) - ->filter(function ($value) { - return !is_null($value); + ->reject(function ($value) { + return is_null($value); }); // Determine the highest parent label for all child labels. @@ -158,18 +170,7 @@ protected function aggregateChildLabels($rows, $labels) } } while ($hoistedParentLabel); - // Remove all labels that should be aggregated to their parent. - $labels = $labels->reject(function ($label) use ($parentIdMap) { - return $parentIdMap->has($label->id); - }); - - // Add all labels that are parents of existing labels but were not included - // because there are no annotations with these labels. - $missingLabels = $parentIdMap->values() - ->unique() - ->diff($labels->pluck('id')); - - $labels = $labels->concat(Label::whereIn('id', $missingLabels)->get()); + $presentLabels = collect([]); foreach ($rows as $filename => $annotations) { // Aggregate the number of annotations of child labels to the number of their @@ -178,6 +179,7 @@ protected function aggregateChildLabels($rows, $labels) foreach ($annotations as $labelId => $annotation) { $parentId = $parentIdMap->get($labelId); if ($parentId) { + $presentLabels->push($parentId); if ($annotations->has($parentId)) { $annotations[$parentId]->count += $annotation->count; } else { @@ -189,16 +191,24 @@ protected function aggregateChildLabels($rows, $labels) 'filename' => $filename, ]; } + } else { + $presentLabels->push($labelId); } } // Remove rows of child labels so they are not counted twice. $rows[$filename] = $annotations->values() - ->filter(function ($annotation) use ($parentIdMap) { - return !$parentIdMap->has($annotation->label_id); + ->reject(function ($annotation) use ($parentIdMap) { + return $parentIdMap->has($annotation->label_id); }); } + // Remove all labels that did not occur (as parent) in the rows. + $presentLabels = $presentLabels->unique()->flip(); + $labels = $labels->filter(function ($label) use ($presentLabels) { + return $presentLabels->has($label->id); + }); + return [$rows, $labels]; } } From c3edcaa46d679da9a3e2b11e66695b1d9e2919c4 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 5 Sep 2019 15:23:04 +0200 Subject: [PATCH 175/407] Add manual section for Abundance report --- .../manual/tutorials/reports-schema.blade.php | 19 +++++++++++++++++++ .../views/partials/reportTypeInfo.blade.php | 5 ++++- .../AbundanceReportGeneratorTest.php | 14 +++++++------- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index 37a05024e..078423b4f 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -58,6 +58,25 @@
  • Label abundance
  • +

    Abundance

    + +

    + Similar to the extended report, this report is an XLSX spreadsheet that contains the abundances of each label and image. In this report, there is one row for each image and one column for each label. If the annotations should be separated by label tree, there will be one worksheet for each label tree that was used. +

    +

    + For a single worksheet (not separated by label tree) the first line contains the volume name. For multiple worksheets the first lines contain the name of the respective label tree. The second line always contains the column headers. The columns are as follows: +

    +
      +
    1. Image filename
    2. +
    3. label name 1
    4. +
    5. label name 2
    6. +
    7. ...
    8. +
    + +

    + If "aggregate child labels" was enabled for this report, the abundances of all child labels will be added to the abundance of the highest parent label and the child labels will be excluded from the report. +

    +

    Area

    diff --git a/src/resources/views/partials/reportTypeInfo.blade.php b/src/resources/views/partials/reportTypeInfo.blade.php index 653d43370..06ca802e0 100644 --- a/src/resources/views/partials/reportTypeInfo.blade.php +++ b/src/resources/views/partials/reportTypeInfo.blade.php @@ -2,7 +2,10 @@ The basic annotation report contains graphical plots of abundances of the different annotation labels (as PDF). See the manual for the report schema.

    - The extended annotation report lists the abundances of annotation labels for each image (as XLSX). See the manual for the report schema. + The extended annotation report lists the abundances of annotation labels for each image and label (as XLSX). See the manual for the report schema. +
    +
    + The abundance annotation report lists the abundances of annotation labels for each image (as XLSX). Abundances can be aggregated to parent labels. See the manual for the report schema.
    The full annotation report lists the labels, shape and coordinates of all annotations (as XLSX). See the manual for the report schema. diff --git a/tests/Support/Reports/Volumes/Annotations/AbundanceReportGeneratorTest.php b/tests/Support/Reports/Volumes/Annotations/AbundanceReportGeneratorTest.php index a85ef81cc..7b33c0c81 100644 --- a/tests/Support/Reports/Volumes/Annotations/AbundanceReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/Annotations/AbundanceReportGeneratorTest.php @@ -36,14 +36,14 @@ public function testGenerateReport() $i1 = ImageTest::create(['volume_id' => $volume->id, 'filename' => 'a.jpg']); - $al1 = AnnotationLabelTest::create([ + AnnotationLabelTest::create([ 'annotation_id' => AnnotationTest::create(['image_id' => $i1->id])->id, 'label_id' => $root->id, ]); $i2 = ImageTest::create(['volume_id' => $volume->id, 'filename' => 'b.jpg']); - $al2 = AnnotationLabelTest::create([ + AnnotationLabelTest::create([ 'annotation_id' => AnnotationTest::create(['image_id' => $i2->id])->id, 'label_id' => $child->id, ]); @@ -96,11 +96,11 @@ public function testGenerateReportSeparateLabelTrees() 'image_id' => $image->id, ]); - $al1 = AnnotationLabelTest::create([ + AnnotationLabelTest::create([ 'annotation_id' => $annotation->id, 'label_id' => $label1->id, ]); - $al2 = AnnotationLabelTest::create([ + AnnotationLabelTest::create([ 'annotation_id' => $annotation->id, 'label_id' => $label2->id, ]); @@ -165,19 +165,19 @@ public function testGenerateReportAggregateChildLabels() $i1 = ImageTest::create(['volume_id' => $volume->id, 'filename' => 'a.jpg']); - $al1 = AnnotationLabelTest::create([ + AnnotationLabelTest::create([ 'annotation_id' => AnnotationTest::create(['image_id' => $i1->id])->id, 'label_id' => $child->id, ]); $i2 = ImageTest::create(['volume_id' => $volume->id, 'filename' => 'b.jpg']); - $al3 = AnnotationLabelTest::create([ + AnnotationLabelTest::create([ 'annotation_id' => AnnotationTest::create(['image_id' => $i2->id])->id, 'label_id' => $child->id, ]); - $al3 = AnnotationLabelTest::create([ + AnnotationLabelTest::create([ 'annotation_id' => AnnotationTest::create(['image_id' => $i2->id])->id, 'label_id' => $childchild->id, ]); From 2a5a5c1a8508fe84a6430b3770e3d356840a48c9 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 12 Sep 2019 10:08:45 +0200 Subject: [PATCH 176/407] Apply changes for upgrade to Laravel 5.8 --- src/Support/Reports/ReportGenerator.php | 3 ++- .../Reports/Volumes/Annotations/FullReportGenerator.php | 3 ++- .../Http/Controllers/Api/Videos/VideoReportControllerTest.php | 2 +- .../Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Support/Reports/ReportGenerator.php b/src/Support/Reports/ReportGenerator.php index c0b43524d..084e49d71 100644 --- a/src/Support/Reports/ReportGenerator.php +++ b/src/Support/Reports/ReportGenerator.php @@ -2,6 +2,7 @@ namespace Biigle\Modules\Reports\Support\Reports; +use Str; use File; use Exception; use Biigle\Label; @@ -73,7 +74,7 @@ public static function get($sourceClass, ReportType $type, $options = []) { if (class_exists($sourceClass)) { $reflect = new ReflectionClass($sourceClass); - $sourceClass = str_plural($reflect->getShortName()); + $sourceClass = Str::plural($reflect->getShortName()); $fullClass = __NAMESPACE__.'\\'.$sourceClass.'\\'.$type->name.'ReportGenerator'; if (class_exists($fullClass)) { diff --git a/src/Support/Reports/Volumes/Annotations/FullReportGenerator.php b/src/Support/Reports/Volumes/Annotations/FullReportGenerator.php index 1dd0cc3ae..b4bc4a831 100644 --- a/src/Support/Reports/Volumes/Annotations/FullReportGenerator.php +++ b/src/Support/Reports/Volumes/Annotations/FullReportGenerator.php @@ -3,6 +3,7 @@ namespace Biigle\Modules\Reports\Support\Reports\Volumes\Annotations; use DB; +use Arr; use Biigle\LabelTree; use Biigle\Modules\Reports\Support\CsvFile; @@ -112,7 +113,7 @@ protected function getArea($attrs) { $attrs = json_decode($attrs, true); if (is_array($attrs)) { - return array_get($attrs, 'laserpoints.area'); + return Arr::get($attrs, 'laserpoints.area'); } } } diff --git a/tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php b/tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php index 6b2022388..aa07789bb 100644 --- a/tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php +++ b/tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php @@ -10,7 +10,7 @@ class VideoReportControllerTest extends ApiTestCase { - public function setUp() + public function setUp(): void { parent::setUp(); if (!class_exists(VideoTest::class)) { diff --git a/tests/Support/Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php b/tests/Support/Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php index 218db5ff0..4d8451014 100644 --- a/tests/Support/Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php +++ b/tests/Support/Reports/Videos/VideoAnnotations/CsvReportGeneratorTest.php @@ -34,7 +34,7 @@ class CsvReportGeneratorTest extends TestCase 'video_annotation_id', ]; - public function setUp() + public function setUp(): void { parent::setUp(); if (!class_exists(VideosServiceProvider::class)) { From 08e619320101ef9a327f7f7f0ef2a0521934bd88 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 12 Sep 2019 10:41:20 +0200 Subject: [PATCH 177/407] Apply changes for upgrade to PHPUnit 8 --- .../AnnotationReportGeneratorTest.php | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php b/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php index 0ac97c978..0a879f89c 100644 --- a/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php @@ -95,23 +95,23 @@ public function testGetNameAndFilename() 'exportArea' => true, ]); - $this->assertContains('restricted to export area', $generator->getName()); - $this->assertContains('restricted_to_export_area', $generator->getFilename()); + $this->assertStringContainsString('restricted to export area', $generator->getName()); + $this->assertStringContainsString('restricted_to_export_area', $generator->getFilename()); $generator = new AnnotationReportGenerator([ 'annotationSession' => $session->id, ]); - $this->assertContains('restricted to annotation session', $generator->getName()); - $this->assertContains($session->name, $generator->getName()); - $this->assertContains('restricted_to_annotation_session', $generator->getFilename()); + $this->assertStringContainsString('restricted to annotation session', $generator->getName()); + $this->assertStringContainsString($session->name, $generator->getName()); + $this->assertStringContainsString('restricted_to_annotation_session', $generator->getFilename()); $generator = new AnnotationReportGenerator([ 'newestLabel' => true, ]); - $this->assertContains('restricted to newest label of each annotation', $generator->getName()); - $this->assertContains('restricted_to_newest_label', $generator->getFilename()); + $this->assertStringContainsString('restricted to newest label of each annotation', $generator->getName()); + $this->assertStringContainsString('restricted_to_newest_label', $generator->getFilename()); $generator = new AnnotationReportGenerator([ 'exportArea' => true, @@ -119,13 +119,13 @@ public function testGetNameAndFilename() 'annotationSession' => $session->id, ]); - $this->assertContains('export area', $generator->getName()); - $this->assertContains('export_area', $generator->getFilename()); - $this->assertContains('newest label', $generator->getName()); - $this->assertContains('newest_label', $generator->getFilename()); - $this->assertContains('annotation session', $generator->getName()); - $this->assertContains($session->name, $generator->getName()); - $this->assertContains('annotation_session', $generator->getFilename()); + $this->assertStringContainsString('export area', $generator->getName()); + $this->assertStringContainsString('export_area', $generator->getFilename()); + $this->assertStringContainsString('newest label', $generator->getName()); + $this->assertStringContainsString('newest_label', $generator->getFilename()); + $this->assertStringContainsString('annotation session', $generator->getName()); + $this->assertStringContainsString($session->name, $generator->getName()); + $this->assertStringContainsString('annotation_session', $generator->getFilename()); $session->delete(); @@ -133,10 +133,10 @@ public function testGetNameAndFilename() 'annotationSession' => $session->id, ]); - $this->assertContains('annotation session', $generator->getName()); - $this->assertNotContains($session->name, $generator->getName()); - $this->assertContains("{$session->id}", $generator->getName()); - $this->assertContains('annotation_session', $generator->getFilename()); + $this->assertStringContainsString('annotation session', $generator->getName()); + $this->assertStringNotContainsString($session->name, $generator->getName()); + $this->assertStringContainsString("{$session->id}", $generator->getName()); + $this->assertStringContainsString('annotation_session', $generator->getFilename()); } public function testRestrictToAnnotationSessionQuery() From ecfd68d75361e1257807aa4549860d0b18278017 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 17 Sep 2019 09:43:12 +0200 Subject: [PATCH 178/407] Remove unused option from video report controller --- .../Api/Videos/VideoReportController.php | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/src/Http/Controllers/Api/Videos/VideoReportController.php b/src/Http/Controllers/Api/Videos/VideoReportController.php index d8e99cb63..40497193f 100644 --- a/src/Http/Controllers/Api/Videos/VideoReportController.php +++ b/src/Http/Controllers/Api/Videos/VideoReportController.php @@ -53,19 +53,4 @@ public function store(Request $request, $id) GenerateReportJob::dispatch($report)->onQueue('high'); } - - /** - * Get the options of the requested report. - * - * @param Request $request - * @return array - */ - public function getOptions(Request $request) - { - $options = parent::getOptions($request); - - return array_merge($options, [ - 'annotationSession' => $request->input('annotation_session_id'), - ]); - } } From fe2547097de023b76dd8ffda2c468b4443659e5f Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 17 Sep 2019 09:43:36 +0200 Subject: [PATCH 179/407] Fix annotation session filtering Everywhere else in BIIGLE annotation sessions filter by the created_at attribute of annotations and not the attribute of annotation labels. Both can be correct but it should be consistent. References biigle/core#200 --- .../Annotations/AnnotationReportGenerator.php | 6 ++--- .../AnnotationReportGeneratorTest.php | 22 +++++++++++-------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/Support/Reports/Volumes/Annotations/AnnotationReportGenerator.php b/src/Support/Reports/Volumes/Annotations/AnnotationReportGenerator.php index fe6aedac9..86398c6e1 100644 --- a/src/Support/Reports/Volumes/Annotations/AnnotationReportGenerator.php +++ b/src/Support/Reports/Volumes/Annotations/AnnotationReportGenerator.php @@ -101,9 +101,9 @@ public function restrictToAnnotationSessionQuery($query) $session = $this->getAnnotationSession(); return $query->where(function ($query) use ($session) { - // take only annotation labels that belong to the time span... - $query->where('annotation_labels.created_at', '>=', $session->starts_at) - ->where('annotation_labels.created_at', '<', $session->ends_at) + // take only annotations that belong to the time span... + $query->where('annotations.created_at', '>=', $session->starts_at) + ->where('annotations.created_at', '<', $session->ends_at) // ...and to the users of the session ->whereIn('annotation_labels.user_id', function ($query) use ($session) { $query->select('user_id') diff --git a/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php b/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php index 0ac97c978..f83933a73 100644 --- a/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/Annotations/AnnotationReportGeneratorTest.php @@ -150,25 +150,29 @@ public function testRestrictToAnnotationSessionQuery() $session->users()->attach($user); - $a = AnnotationTest::create(); - $a->image->volume_id = $session->volume_id; - $a->image->save(); + $a1 = AnnotationTest::create([ + 'created_at' => '2016-10-04', + ]); + $a1->image->volume_id = $session->volume_id; + $a1->image->save(); $al1 = AnnotationLabelTest::create([ - 'created_at' => '2016-10-04', - 'annotation_id' => $a->id, + 'annotation_id' => $a1->id, 'user_id' => $user->id, ]); - $al2 = AnnotationLabelTest::create([ + $a2 = AnnotationTest::create([ + 'image_id' => $a1->image_id, 'created_at' => '2016-10-05', - 'annotation_id' => $a->id, + ]); + + $al2 = AnnotationLabelTest::create([ + 'annotation_id' => $a2->id, 'user_id' => $user->id, ]); $al3 = AnnotationLabelTest::create([ - 'created_at' => '2016-10-05', - 'annotation_id' => $a->id, + 'annotation_id' => $a2->id, ]); $generator = new AnnotationReportGenerator([ From 262aac8e84d1c571c99cee5cb6bae0ebf255df7f Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 17 Sep 2019 13:30:54 +0200 Subject: [PATCH 180/407] Add line string annotations to the area report Resolves #49 --- .../Annotations/AreaReportGenerator.php | 13 +++++ .../manual/tutorials/reports-schema.blade.php | 6 +- .../Annotations/AreaReportGeneratorTest.php | 56 +++++++++++++++++++ 3 files changed, 72 insertions(+), 3 deletions(-) diff --git a/src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php b/src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php index 7ab51b85b..a0f43a193 100644 --- a/src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php +++ b/src/Support/Reports/Volumes/Annotations/AreaReportGenerator.php @@ -91,6 +91,7 @@ protected function query() Shape::rectangleId(), Shape::polygonId(), Shape::ellipseId(), + Shape::lineId(), ]) ->orderBy('annotation_labels.id'); @@ -275,7 +276,19 @@ protected function setSize($annotation, $row) // Divide by 4 because $a and $b each are double the lengths. $annotation->area_sqpx = M_PI * $a * $b / 4; break; + case Shape::lineId(): + $totalPoints = count($points); + $length = 0; + for ($i = 3; $i < $totalPoints; $i += 2) { + $length += sqrt(pow($points[$i - 3] - $points[$i - 1], 2) + pow($points[$i - 2] - $points[$i], 2)); + } + + // A line has no area so we just set the width to the total length. + $annotation->width_px = $length; + $annotation->height_px = 0; + $annotation->area_sqpx = 0; + break; default: // We can't compute the area for this shape. return; diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index 078423b4f..56b47e05f 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -80,7 +80,7 @@

    Area

    - The annotation area report is an XLSX spreadsheet of all area annotations (rectangle, circle, ellipse and polygon) with their width and height in pixels (px) and their area in px². If a laser point detection was performed, the width and height in m and the area in m² is included as well. + The annotation area report is an XLSX spreadsheet of all area annotations (rectangle, circle, ellipse and polygon) with their width and height in pixels (px) and their area in px². Line string annotations are included, too, with the "width" set to the total length of the line string. If a laser point detection was performed, the width and height in m and the area in m² is included as well.

    @@ -105,8 +105,8 @@
  • Label names comma separated list of names of all labels that are attached to the annotation
  • Image ID
  • Image filename
  • -
  • Annotation width (m) Rectangle: the longer edge. Circle: the diameter. Ellipse: Length of the major axis. Polygon: width of the minimum (non-rotated) bounding rectangle.
  • -
  • Annotation height (m) Rectangle: the shorter edge. Circle: the diameter. Ellipse: Length of the minor axis. Polygon: height of the minimum (non-rotated) bounding rectangle.
  • +
  • Annotation width (m) Rectangle: the longer edge. Circle: the diameter. Ellipse: Length of the major axis. Polygon: width of the minimum (non-rotated) bounding rectangle. Line string: total length.
  • +
  • Annotation height (m) Rectangle: the shorter edge. Circle: the diameter. Ellipse: Length of the minor axis. Polygon: height of the minimum (non-rotated) bounding rectangle. Line string: always 0.
  • Annotation area (m²)
  • Annotation width (px) See the width in m for the interpretation of this value for different shapes.
  • Annotation height (px) See the height in m for the interpretation of this value for different shapes.
  • diff --git a/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php b/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php index cc1c15347..0353dc69a 100644 --- a/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/Annotations/AreaReportGeneratorTest.php @@ -440,4 +440,60 @@ public function testGenerateReportSeparateLabelTrees() $generator->setPythonScriptRunner($mock); $generator->generateReport('my/path'); } + + public function testGenerateReportLineString() + { + $volume = VolumeTest::create([ + 'name' => 'My Cool Volume', + ]); + + $image = ImageTest::create([ + 'volume_id' => $volume->id, + ]); + + // It's a simple open box so the length can be easily calculated manually. + $a = AnnotationTest::create([ + 'shape_id' => Shape::lineId(), + 'image_id' => $image->id, + 'points' => [100, 100, 100, 200, 200, 200, 200, 100], + ]); + + $al = AnnotationLabelTest::create([ + 'annotation_id' => $a->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('put') + ->once() + ->with([$volume->name]); + + $mock->shouldReceive('put') + ->once() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([ + $a->id, + Shape::lineId(), 'LineString', + $al->label_id, $al->label->name, + $image->id, $image->filename, + '', '', '', + 300, 0, 0, + ]); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $generator = new AreaReportGenerator; + $generator->setSource($volume); + $mock = Mockery::mock(); + $mock->shouldReceive('run')->once(); + $generator->setPythonScriptRunner($mock); + $generator->generateReport('my/path'); + } } From 9641a5915cb51337059a324c24c63850a4ce58b1 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 25 Nov 2019 07:50:31 +0100 Subject: [PATCH 181/407] Allow installation of dev-master --- composer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index f06e13cd7..1bb07dec2 100644 --- a/composer.json +++ b/composer.json @@ -8,8 +8,8 @@ ], "require": { "ext-zip": "*", - "biigle/projects": "~1.4", - "biigle/label-trees": "~1.27" + "biigle/projects": "^1.4 | dev-master", + "biigle/label-trees": "^1.27 | dev-master" }, "autoload": { "psr-4": { From 6c1dedf54c2349e11569a4af7f9fd30623ae1059 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 25 Nov 2019 09:13:09 +0100 Subject: [PATCH 182/407] Update installation instructions --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 86631b23b..f6ceadbd1 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,11 @@ This is the BIIGLE module to generate reports for projects, volumes and videos. ## Installation -1. Run `composer config repositories.reports vcs git@github.com:biigle/reports.git` -2. Run `composer require biigle/reports`. -3. Add `Biigle\Modules\Reports\ReportsServiceProvider::class` to the `providers` array in `config/app.php`. -4. Run `php artisan vendor:publish --tag=public` to publish the public assets of this module. -5. Run `pip install -r vendor/biigle/reports/requirements.txt` to install the python requirements. -6. Configure a storage disk for the report files and set the `REPORTS_STORAGE_DISK` variable to the name of this storage disk in the `.env` file. Example for a local disk: +1. Run `composer require biigle/reports`. +2. Add `Biigle\Modules\Reports\ReportsServiceProvider::class` to the `providers` array in `config/app.php`. +3. Run `php artisan vendor:publish --tag=public` to publish the public assets of this module. +4. Run `pip install -r vendor/biigle/reports/requirements.txt` to install the python requirements. +5. Configure a storage disk for the report files and set the `REPORTS_STORAGE_DISK` variable to the name of this storage disk in the `.env` file. Example for a local disk: ```php 'reports' => [ 'driver' => 'local', From 76b4b93be8d6d3653ddb0c6d9aacd08d11602b2b Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 26 Nov 2019 15:58:45 +0100 Subject: [PATCH 183/407] Add tests action --- .github/workflows/test.yml | 45 ++++++++++++++++++++++++++++++++++++++ README.md | 2 ++ 2 files changed, 47 insertions(+) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..90ea04d02 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,45 @@ +name: Tests + +on: [push] + +jobs: + + test-module: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + with: + repository: biigle/core + ref: dev-modules + fetch-depth: 1 + path: reports + + - name: Validate composer.json and composer.lock + run: composer validate + + - name: Copy .env + run: php -r "file_exists('.env') || copy('.env.example', '.env');" + + - name: Install Dependencies + run: composer install -q --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist --ignore-platform-reqs + + - name: Generate key + run: php artisan key:generate + + - name: Docker login + run: docker login docker.pkg.github.com -u $GITHUB_ACTOR -p $GITHUB_TOKEN + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + + - name: Fetch base images + run: | + docker pull docker.pkg.github.com/biigle/core/app:latest + docker pull docker.pkg.github.com/biigle/core/worker:latest + + - name: Start test database + run: docker-compose up -d --no-build database_testing + + - name: Run tests + run: docker-compose run --rm -u 1001 worker php -d memory_limit=1G vendor/bin/phpunit --colors=always --random-order --filter 'Biigle\\Tests\\Modules\\Reports' diff --git a/README.md b/README.md index f6ceadbd1..a6d1950c0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # BIIGLE Reports Module +[![Test status](https://github.com/biigle/reports/workflows/Tests/badge.svg)](https://github.com/biigle/reports/actions?query=workflow%3ATests) + This is the BIIGLE module to generate reports for projects, volumes and videos. ## Installation From 7cadf526a0935cf33076c6471e953e7d7e4096ff Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 27 Nov 2019 10:49:35 +0100 Subject: [PATCH 184/407] Update test action --- .github/workflows/test.yml | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 90ea04d02..a34200515 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,24 +9,52 @@ jobs: runs-on: ubuntu-latest steps: + - uses: actions/checkout@v1 + with: + fetch-depth: 1 + - uses: actions/checkout@v1 with: repository: biigle/core ref: dev-modules fetch-depth: 1 - path: reports + path: core - name: Validate composer.json and composer.lock run: composer validate + working-directory: ../core - name: Copy .env run: php -r "file_exists('.env') || copy('.env.example', '.env');" + working-directory: ../core + + - name: Get Composer Cache Directory + id: composer-cache + run: | + echo "::set-output name=dir::$(composer config cache-files-dir)" + + - uses: actions/cache@v1 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer + restore-keys: | + ${{ runner.os }}-composer - name: Install Dependencies run: composer install -q --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist --ignore-platform-reqs + working-directory: ../core + + - name: Remove installed package + run: rm -r vendor/${GITHUB_REPOSITORY} + working-directory: ../core + + - name: Copy current repository + run: cp -r ${GITHUB_WORKSPACE} vendor/biigle + working-directory: ../core - name: Generate key run: php artisan key:generate + working-directory: ../core - name: Docker login run: docker login docker.pkg.github.com -u $GITHUB_ACTOR -p $GITHUB_TOKEN @@ -40,6 +68,8 @@ jobs: - name: Start test database run: docker-compose up -d --no-build database_testing + working-directory: ../core - name: Run tests - run: docker-compose run --rm -u 1001 worker php -d memory_limit=1G vendor/bin/phpunit --colors=always --random-order --filter 'Biigle\\Tests\\Modules\\Reports' + run: docker-compose run --rm -u 1001 worker php -d memory_limit=1G vendor/bin/phpunit --random-order --filter 'Biigle\\Tests\\Modules\\'${GITHUB_REPOSITORY##*/} + working-directory: ../core From ff4754b96a8496a6212eb6eac264d175432475cc Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 9 Dec 2019 12:22:11 +0100 Subject: [PATCH 185/407] Add pull_request trigger to action --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a34200515..a78f20502 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,6 +1,6 @@ name: Tests -on: [push] +on: [push, pull_request] jobs: From 528230af188295a22f8c76c8891ecb194cbb9399 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 3 Mar 2020 10:58:49 +0100 Subject: [PATCH 186/407] Clarify CSV video report documentation --- src/resources/views/manual/tutorials/reports-schema.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index 56b47e05f..74654f654 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -252,7 +252,7 @@
  • Video annotation key frames

    - The key frames are encoded as a JSON array. Each key frame represents a time that corresponds to the ponts array at the same index. null menas there is a gap in the video annotation. + The key frames are encoded as a JSON array. Each key frame represents a time in seconds that corresponds to the ponts array at the same index. null means there is a gap in the video annotation.

  • Video annotation ID
  • From f3c8699b82562ab157886d408e34c3c135290aed Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 31 Mar 2020 10:54:45 +0200 Subject: [PATCH 187/407] Fix psr-4 compliance --- tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php b/tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php index aa07789bb..8d9739d38 100644 --- a/tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php +++ b/tests/Http/Controllers/Api/Videos/VideoReportControllerTest.php @@ -1,6 +1,6 @@ Date: Wed, 15 Apr 2020 08:48:51 +0200 Subject: [PATCH 188/407] Allow configuration of job queues --- .../Controllers/Api/Projects/ProjectReportController.php | 3 ++- src/Http/Controllers/Api/ReportController.php | 1 - src/Http/Controllers/Api/Videos/VideoReportController.php | 3 ++- src/Http/Controllers/Api/Volumes/VolumeReportController.php | 3 ++- src/config/reports.php | 5 +++++ 5 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Http/Controllers/Api/Projects/ProjectReportController.php b/src/Http/Controllers/Api/Projects/ProjectReportController.php index ee1fc6233..2131be556 100644 --- a/src/Http/Controllers/Api/Projects/ProjectReportController.php +++ b/src/Http/Controllers/Api/Projects/ProjectReportController.php @@ -62,6 +62,7 @@ public function store(Request $request, $id) $report->options = $this->getOptions($request); $report->save(); - GenerateReportJob::dispatch($report)->onQueue('high'); + $queue = config('reports.generate_report_queue'); + GenerateReportJob::dispatch($report)->onQueue($queue); } } diff --git a/src/Http/Controllers/Api/ReportController.php b/src/Http/Controllers/Api/ReportController.php index a25c6c4e7..6daee447b 100644 --- a/src/Http/Controllers/Api/ReportController.php +++ b/src/Http/Controllers/Api/ReportController.php @@ -5,7 +5,6 @@ use Illuminate\Http\Request; use Biigle\Modules\Reports\Report; use Biigle\Http\Controllers\Api\Controller; -use Biigle\Modules\Reports\Jobs\GenerateReportJob; class ReportController extends Controller { diff --git a/src/Http/Controllers/Api/Videos/VideoReportController.php b/src/Http/Controllers/Api/Videos/VideoReportController.php index 40497193f..8194c3ac8 100644 --- a/src/Http/Controllers/Api/Videos/VideoReportController.php +++ b/src/Http/Controllers/Api/Videos/VideoReportController.php @@ -51,6 +51,7 @@ public function store(Request $request, $id) $report->options = $this->getOptions($request); $report->save(); - GenerateReportJob::dispatch($report)->onQueue('high'); + $queue = config('reports.generate_report_queue'); + GenerateReportJob::dispatch($report)->onQueue($queue); } } diff --git a/src/Http/Controllers/Api/Volumes/VolumeReportController.php b/src/Http/Controllers/Api/Volumes/VolumeReportController.php index 89b8eda0a..feb53be72 100644 --- a/src/Http/Controllers/Api/Volumes/VolumeReportController.php +++ b/src/Http/Controllers/Api/Volumes/VolumeReportController.php @@ -56,7 +56,8 @@ public function store(Request $request, $id) $report->options = $this->getOptions($request); $report->save(); - GenerateReportJob::dispatch($report)->onQueue('high'); + $queue = config('reports.generate_report_queue'); + GenerateReportJob::dispatch($report)->onQueue($queue); } /** diff --git a/src/config/reports.php b/src/config/reports.php index fade9818b..7e4a0965e 100644 --- a/src/config/reports.php +++ b/src/config/reports.php @@ -40,4 +40,9 @@ */ 'allow_user_settings' => true, ], + + /* + | Specifies which queue should be used for which job. + */ + 'generate_report_queue' => env('REPORTS_GENERATE_REPORT_QUEUE', 'high'), ]; From 36fe301b14eaafb0d99995fed4953902b5698152 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 15 Apr 2020 15:35:57 +0200 Subject: [PATCH 189/407] Use the id validation rule References biigle/core#209 --- src/Http/Controllers/Api/Projects/ProjectReportController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Controllers/Api/Projects/ProjectReportController.php b/src/Http/Controllers/Api/Projects/ProjectReportController.php index 2131be556..02795aeef 100644 --- a/src/Http/Controllers/Api/Projects/ProjectReportController.php +++ b/src/Http/Controllers/Api/Projects/ProjectReportController.php @@ -39,7 +39,7 @@ public function store(Request $request, $id) { $project = Project::findOrFail($id); $this->authorize('access', $project); - $this->validate($request, ['type_id' => 'required|exists:report_types,id']); + $this->validate($request, ['type_id' => 'required|id|exists:report_types,id']); if (intval($request->input('type_id')) === ReportType::videoAnnotationsCsvId()) { $hasVideo = false; From 5177b1b83193ea490fc9df5eb1403876d38cc3aa Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 16 Apr 2020 11:30:33 +0200 Subject: [PATCH 190/407] Fix test action --- .github/workflows/test.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a78f20502..ccb6d3d3d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -41,7 +41,15 @@ jobs: ${{ runner.os }}-composer - name: Install Dependencies - run: composer install -q --no-ansi --no-interaction --no-scripts --no-suggest --no-progress --prefer-dist --ignore-platform-reqs + run: composer install --no-ansi --no-interaction --no-scripts --no-suggest --prefer-dist --ignore-platform-reqs + working-directory: ../core + + - name: Remove BIIGLE modules + run: rm -r vendor/biigle + working-directory: ../core + + - name: Update BIIGLE modules from source + run: composer update --no-ansi --no-interaction --no-scripts --no-suggest --prefer-source --ignore-platform-reqs biigle/* working-directory: ../core - name: Remove installed package From 7f201cb934f12e35743f04de24800a0516adc5a4 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 6 May 2020 12:55:33 +0200 Subject: [PATCH 191/407] Add update schema action --- .github/workflows/update-schema.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/update-schema.yml diff --git a/.github/workflows/update-schema.yml b/.github/workflows/update-schema.yml new file mode 100644 index 000000000..46ea35c70 --- /dev/null +++ b/.github/workflows/update-schema.yml @@ -0,0 +1,22 @@ +name: Update Schema + +on: + push: + branches: + - master + paths: + - 'database/migrations/**' + +jobs: + update-schema: + + runs-on: ubuntu-latest + + steps: + - name: Trigger schema update + run: | + curl -X POST --fail \ + -H "Authorization: token ${{ secrets.TOKEN }}" \ + -H "Content-Type: application/json" \ + --data '{"event_type": "build_application"}' \ + https://api.github.com/repos/biigle/schema/dispatches From 6577e59e1a70b52a2c66ae195f9d938f69a4a20e Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 18 May 2020 14:09:30 +0200 Subject: [PATCH 192/407] Use Python 3 --- src/config/reports.php | 2 +- src/resources/scripts/basic_report.py | 19 ++++++++----------- src/resources/scripts/full_report.py | 6 +++--- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/config/reports.php b/src/config/reports.php index 7e4a0965e..7f11e211f 100644 --- a/src/config/reports.php +++ b/src/config/reports.php @@ -5,7 +5,7 @@ /* | Path to the Python executable. */ - 'python' => '/usr/bin/env python', + 'python' => '/usr/bin/python3', /* | Paths to the python scripts. diff --git a/src/resources/scripts/basic_report.py b/src/resources/scripts/basic_report.py index 8b5b79acd..d55683005 100755 --- a/src/resources/scripts/basic_report.py +++ b/src/resources/scripts/basic_report.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt @@ -30,15 +28,15 @@ def TitleSlide(text): return fig pdf = PdfPages(target_file) -fig = TitleSlide("BIIGLE basic report for volume\n" + title.decode('UTF-8')) +fig = TitleSlide("BIIGLE basic report for volume\n" + title) pdf.savefig(fig) width = 1. for path in data_csvs: f = open(path, 'r') data_csv = csv.reader(f) - plot_title = data_csv.next() - rows = np.array(list(data_csv)) + plot_title = next(data_csv) + rows = np.array(list(data_csv), dtype=str) f.close() if rows.shape[0] == 0: continue @@ -50,21 +48,20 @@ def TitleSlide(text): fig.subplots_adjust(bottom=0.33) # '#'-characters to prepend to the hex color codes - hashes = np.chararray(rows.shape[0]) - hashes[:] = '#' + hashes = np.full(rows.shape[0], '#', dtype=str) - ax.bar(ind, counts, width, color=np.core.defchararray.add(hashes, rows[:, 1]), log=counts.max() > 100) + ax.bar(ind, counts, width, color=np.char.add(hashes, rows[:, 1]), log=counts.max() > 100) ax.set_xticks(ind + width / 2) - labels = [label.decode('UTF-8') for label in rows[:, 0]] + labels = [label for label in rows[:, 0]] ax.set_xticklabels(labels, rotation=45, fontsize=8, ha = 'right') if plot_title: - plt.title(plot_title[0].decode('UTF-8')) + plt.title(plot_title[0]) plt.xlim([0, ind.size]) pdf.savefig() d = pdf.infodict() -d['Title'] = "BIIGLE basic report for volume " + title.decode('UTF-8') +d['Title'] = "BIIGLE basic report for volume " + title d['Author'] = 'Biodata Mining Group, Bielefeld University' d['Subject'] = 'Histogram of label distribution of the volume' d['Keywords'] = '' diff --git a/src/resources/scripts/full_report.py b/src/resources/scripts/full_report.py index b4ff71dbd..c8824af5c 100755 --- a/src/resources/scripts/full_report.py +++ b/src/resources/scripts/full_report.py @@ -18,8 +18,8 @@ def addRow(x="", y="", label="", filename="", annotation_id="", shape="", area=" for path in csvs: f = open(path, 'r') csv_file = csv.reader(f) - csv_title = csv_file.next()[0] - csv_column_labels = csv_file.next() + csv_title = next(csv_file)[0] + csv_column_labels = next(csv_file) rows = np.array(list(csv_file)) f.close() if rows.shape[0] == 0: @@ -39,7 +39,7 @@ def addRow(x="", y="", label="", filename="", annotation_id="", shape="", area=" labels = ", ".join(curAnnotationData[:, 2]) points = ast.literal_eval(curAnnotationData[:, 4][0]) it = iter(points) - celldata.append(addRow(it.next(), it.next(), labels, img, annotation, curAnnotationData[0, 3], curAnnotationData[0, 5])) + celldata.append(addRow(next(it), next(it), labels, img, annotation, curAnnotationData[0, 3], curAnnotationData[0, 5])) try: for x in it: celldata.append(addRow(x, next(it))) From 93fff9358abe7de282aabdef2993034078849412 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 19 May 2020 13:48:26 +0200 Subject: [PATCH 193/407] Fix doc blocks --- src/Support/Reports/ReportGenerator.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Support/Reports/ReportGenerator.php b/src/Support/Reports/ReportGenerator.php index 084e49d71..78b7a14d8 100644 --- a/src/Support/Reports/ReportGenerator.php +++ b/src/Support/Reports/ReportGenerator.php @@ -102,7 +102,6 @@ public function __construct($options = []) * Generate the report. * * @param mixed $source Source to generate the report for (e.g. a volume) - * @param string $path Path to write the report file to. * * @return string Path to the generated report file. */ From 68a42221bef6d4201c6ef27d6e239ba0e8e03c9f Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 26 May 2020 17:49:06 +0200 Subject: [PATCH 194/407] Implement memory efficient full report generator Resolves #65 --- src/resources/scripts/full_report.py | 80 +++++++++++++++------------- 1 file changed, 42 insertions(+), 38 deletions(-) mode change 100755 => 100644 src/resources/scripts/full_report.py diff --git a/src/resources/scripts/full_report.py b/src/resources/scripts/full_report.py old mode 100755 new mode 100644 index c8824af5c..9599b54c7 --- a/src/resources/scripts/full_report.py +++ b/src/resources/scripts/full_report.py @@ -1,8 +1,6 @@ import sys -import numpy as np from pyexcelerate import Workbook, Style, Font import csv -import ast import json target_file = sys.argv[2] @@ -11,46 +9,52 @@ workbook = Workbook() numSheets = 0 +def add_sheet(csv_path, index): + with open(csv_path, 'r') as f: + csv_reader = csv.reader(f) -def addRow(x="", y="", label="", filename="", annotation_id="", shape="", area=""): - return [filename, annotation_id, shape, x, y, label, area] - -for path in csvs: - f = open(path, 'r') - csv_file = csv.reader(f) - csv_title = next(csv_file)[0] - csv_column_labels = next(csv_file) - rows = np.array(list(csv_file)) - f.close() - if rows.shape[0] == 0: - continue - numSheets += 1 - # rows have the content: image_filename, annotation_id, label_name, shape_name, points + csv_title = next(csv_reader)[0] + csv_column_labels = next(csv_reader) + + + images = {} + + for row in csv_reader: + if row[0] not in images: + images[row[0]] = { + 'annotations': {}, + 'area': row[5], + } + + image = images[row[0]] + + if row[1] not in image['annotations']: + image['annotations'][row[1]] = { + 'id': row[1], + 'shape': row[3], + 'points': json.loads(row[4]), + 'labels': [], + } + + image['annotations'][row[1]]['labels'].append(row[2]) + + # rows have the content: image_filename, annotation_id, label_name, shape_name, points, image area celldata = [[csv_title], csv_column_labels] - uniqueimages = np.unique(rows[:, 0]) - - for img in uniqueimages: - curImgData = rows[rows[:, 0] == img] - uniqueannotations = np.unique(curImgData[:, 1]) - - for annotation in uniqueannotations: - curAnnotationData = curImgData[curImgData[:, 1] == annotation] - labels = ", ".join(curAnnotationData[:, 2]) - points = ast.literal_eval(curAnnotationData[:, 4][0]) - it = iter(points) - celldata.append(addRow(next(it), next(it), labels, img, annotation, curAnnotationData[0, 3], curAnnotationData[0, 5])) - try: - for x in it: - celldata.append(addRow(x, next(it))) - except StopIteration: - pass - if len(points) % 2 == 1: - # add radius - celldata.append(addRow(points[-1], "")) - - ws = workbook.new_sheet("sheet " + str(numSheets), data=celldata) + for filename in sorted(images): + image = images[filename] + for annotation_id, annotation in image['annotations'].items(): + points = iter(annotation['points']) + labels = ' ,'.join(annotation['labels']) + celldata.append([filename, annotation_id, annotation['shape'], next(points), next(points), labels, image['area']]) + for point in points: + celldata.append(['', '', '', point, next(points, ''), '', '']) + + ws = workbook.new_sheet("sheet {}".format(index), data=celldata) ws.set_row_style(1, Style(font=Font(bold=True))) ws.set_row_style(2, Style(font=Font(bold=True))) +for i, csv_path in enumerate(csvs): + add_sheet(csv_path, i) + workbook.save(target_file) From 1f7e393b46f6b05c6a5d832a6637fa521bc8ca78 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 25 Jun 2020 08:21:02 +0200 Subject: [PATCH 195/407] Add package-lock.json --- package-lock.json | 10066 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 10066 insertions(+) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..1a49d3d47 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,10066 @@ +{ + "name": "biigle-projects", + "version": "0.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz", + "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.3" + } + }, + "@babel/compat-data": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.3.tgz", + "integrity": "sha512-BDIfJ9uNZuI0LajPfoYV28lX8kyCPMHY6uY4WH1lJdcicmAfxCK5ASzaeV0D/wsUaRH/cLk+amuxtC37sZ8TUg==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "semver": "^5.5.0" + } + }, + "@babel/core": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.3.tgz", + "integrity": "sha512-5YqWxYE3pyhIi84L84YcwjeEgS+fa7ZjK6IBVGTjDVfm64njkR2lfDhVR5OudLk8x2GK59YoSyVv+L/03k1q9w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.3", + "@babel/generator": "^7.10.3", + "@babel/helper-module-transforms": "^7.10.1", + "@babel/helpers": "^7.10.1", + "@babel/parser": "^7.10.3", + "@babel/template": "^7.10.3", + "@babel/traverse": "^7.10.3", + "@babel/types": "^7.10.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/generator": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz", + "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz", + "integrity": "sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw==", + "dev": true, + "requires": { + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.3.tgz", + "integrity": "sha512-lo4XXRnBlU6eRM92FkiZxpo1xFLmv3VsPFk61zJKMm7XYJfwqXHsYJTY6agoc4a3L8QPw1HqWehO18coZgbT6A==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.10.3", + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.10.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz", + "integrity": "sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.10.1", + "browserslist": "^4.12.0", + "invariant": "^2.2.4", + "levenary": "^1.1.1", + "semver": "^5.5.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.3.tgz", + "integrity": "sha512-iRT9VwqtdFmv7UheJWthGc/h2s7MqoweBF9RUj77NFZsg9VfISvBTum3k6coAhJ8RWv2tj3yUjA03HxPd0vfpQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.3", + "@babel/helper-member-expression-to-functions": "^7.10.3", + "@babel/helper-optimise-call-expression": "^7.10.3", + "@babel/helper-plugin-utils": "^7.10.3", + "@babel/helper-replace-supers": "^7.10.1", + "@babel/helper-split-export-declaration": "^7.10.1" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz", + "integrity": "sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.1", + "@babel/helper-regex": "^7.10.1", + "regexpu-core": "^4.7.0" + } + }, + "@babel/helper-define-map": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.3.tgz", + "integrity": "sha512-bxRzDi4Sin/k0drWCczppOhov1sBSdBvXJObM1NLHQzjhXhwRtn7aRWGvLJWCYbuu2qUk3EKs6Ci9C9ps8XokQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.3", + "@babel/types": "^7.10.3", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.3.tgz", + "integrity": "sha512-0nKcR64XrOC3lsl+uhD15cwxPvaB6QKUDlD84OT9C3myRbhJqTMYir69/RWItUvHpharv0eJ/wk7fl34ONSwZw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.10.3", + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-function-name": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz", + "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.3", + "@babel/template": "^7.10.3", + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz", + "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.3.tgz", + "integrity": "sha512-9JyafKoBt5h20Yv1+BXQMdcXXavozI1vt401KBiRc2qzUepbVnd7ogVNymY1xkQN9fekGwfxtotH2Yf5xsGzgg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.3.tgz", + "integrity": "sha512-q7+37c4EPLSjNb2NmWOjNwj0+BOyYlssuQ58kHEWk1Z78K5i8vTUsteq78HMieRPQSl/NtpQyJfdjt3qZ5V2vw==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-module-imports": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.3.tgz", + "integrity": "sha512-Jtqw5M9pahLSUWA+76nhK9OG8nwYXzhQzVIGFoNaHnXF/r4l7kz4Fl0UAW7B6mqC5myoJiBP5/YQlXQTMfHI9w==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-module-transforms": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", + "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.1", + "@babel/helper-replace-supers": "^7.10.1", + "@babel/helper-simple-access": "^7.10.1", + "@babel/helper-split-export-declaration": "^7.10.1", + "@babel/template": "^7.10.1", + "@babel/types": "^7.10.1", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz", + "integrity": "sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg==", + "dev": true, + "requires": { + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz", + "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.1.tgz", + "integrity": "sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g==", + "dev": true, + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.3.tgz", + "integrity": "sha512-sLB7666ARbJUGDO60ZormmhQOyqMX/shKBXZ7fy937s+3ID8gSrneMvKSSb+8xIM5V7Vn6uNVtOY1vIm26XLtA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.1", + "@babel/helper-wrap-function": "^7.10.1", + "@babel/template": "^7.10.3", + "@babel/traverse": "^7.10.3", + "@babel/types": "^7.10.3" + } + }, + "@babel/helper-replace-supers": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", + "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.10.1", + "@babel/helper-optimise-call-expression": "^7.10.1", + "@babel/traverse": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-simple-access": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", + "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", + "dev": true, + "requires": { + "@babel/template": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", + "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", + "dev": true, + "requires": { + "@babel/types": "^7.10.1" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz", + "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz", + "integrity": "sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.1", + "@babel/template": "^7.10.1", + "@babel/traverse": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/helpers": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.1.tgz", + "integrity": "sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==", + "dev": true, + "requires": { + "@babel/template": "^7.10.1", + "@babel/traverse": "^7.10.1", + "@babel/types": "^7.10.1" + } + }, + "@babel/highlight": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz", + "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.3", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz", + "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.3.tgz", + "integrity": "sha512-WUUWM7YTOudF4jZBAJIW9D7aViYC/Fn0Pln4RIHlQALyno3sXSjqmTA4Zy1TKC2D49RCR8Y/Pn4OIUtEypK3CA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.3", + "@babel/helper-remap-async-to-generator": "^7.10.3", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz", + "integrity": "sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz", + "integrity": "sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz", + "integrity": "sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz", + "integrity": "sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz", + "integrity": "sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1", + "@babel/plugin-syntax-numeric-separator": "^7.10.1" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.3.tgz", + "integrity": "sha512-ZZh5leCIlH9lni5bU/wB/UcjtcVLgR8gc+FAgW2OOY+m9h1II3ItTO1/cewNUcsIDZSYcSaz/rYVls+Fb0ExVQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.1" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz", + "integrity": "sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.3.tgz", + "integrity": "sha512-yyG3n9dJ1vZ6v5sfmIlMMZ8azQoqx/5/nZTSWX1td6L1H1bsjzA8TInDChpafCZiJkeOFzp/PtrfigAQXxI1Ng==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz", + "integrity": "sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz", + "integrity": "sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz", + "integrity": "sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz", + "integrity": "sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz", + "integrity": "sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz", + "integrity": "sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz", + "integrity": "sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.1", + "@babel/helper-remap-async-to-generator": "^7.10.1" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz", + "integrity": "sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz", + "integrity": "sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.3.tgz", + "integrity": "sha512-irEX0ChJLaZVC7FvvRoSIxJlmk0IczFLcwaRXUArBKYHCHbOhe57aG8q3uw/fJsoSXvZhjRX960hyeAGlVBXZw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.1", + "@babel/helper-define-map": "^7.10.3", + "@babel/helper-function-name": "^7.10.3", + "@babel/helper-optimise-call-expression": "^7.10.3", + "@babel/helper-plugin-utils": "^7.10.3", + "@babel/helper-replace-supers": "^7.10.1", + "@babel/helper-split-export-declaration": "^7.10.1", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.3.tgz", + "integrity": "sha512-GWzhaBOsdbjVFav96drOz7FzrcEW6AP5nax0gLIpstiFaI3LOb2tAg06TimaWU6YKOfUACK3FVrxPJ4GSc5TgA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.3" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz", + "integrity": "sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz", + "integrity": "sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz", + "integrity": "sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz", + "integrity": "sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz", + "integrity": "sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz", + "integrity": "sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz", + "integrity": "sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz", + "integrity": "sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz", + "integrity": "sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.1", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz", + "integrity": "sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.1", + "@babel/helper-simple-access": "^7.10.1", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.3.tgz", + "integrity": "sha512-GWXWQMmE1GH4ALc7YXW56BTh/AlzvDWhUNn9ArFF0+Cz5G8esYlVbXfdyHa1xaD1j+GnBoCeoQNlwtZTVdiG/A==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.10.3", + "@babel/helper-module-transforms": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.3", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz", + "integrity": "sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.3.tgz", + "integrity": "sha512-I3EH+RMFyVi8Iy/LekQm948Z4Lz4yKT7rK+vuCAeRm0kTa6Z5W7xuhRxDNJv0FPya/her6AUgrDITb70YHtTvA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz", + "integrity": "sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz", + "integrity": "sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1", + "@babel/helper-replace-supers": "^7.10.1" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz", + "integrity": "sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz", + "integrity": "sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.3.tgz", + "integrity": "sha512-H5kNeW0u8mbk0qa1jVIVTeJJL6/TJ81ltD4oyPx0P499DhMJrTmmIFCmJ3QloGpQG8K9symccB7S7SJpCKLwtw==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz", + "integrity": "sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.3.tgz", + "integrity": "sha512-b5OzMD1Hi8BBzgQdRHyVVaYrk9zG0wset1it2o3BgonkPadXfOv0aXRqd7864DeOIu3FGKP/h6lr15FE5mahVw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.3", + "@babel/helper-plugin-utils": "^7.10.3", + "resolve": "^1.8.1", + "semver": "^5.5.1" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz", + "integrity": "sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz", + "integrity": "sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz", + "integrity": "sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1", + "@babel/helper-regex": "^7.10.1" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.3.tgz", + "integrity": "sha512-yaBn9OpxQra/bk0/CaA4wr41O0/Whkg6nqjqApcinxM7pro51ojhX6fv1pimAnVjVfDy14K0ULoRL70CA9jWWA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.3" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz", + "integrity": "sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz", + "integrity": "sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz", + "integrity": "sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.1" + } + }, + "@babel/preset-env": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.3.tgz", + "integrity": "sha512-jHaSUgiewTmly88bJtMHbOd1bJf2ocYxb5BWKSDQIP5tmgFuS/n0gl+nhSrYDhT33m0vPxp+rP8oYYgPgMNQlg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.10.3", + "@babel/helper-compilation-targets": "^7.10.2", + "@babel/helper-module-imports": "^7.10.3", + "@babel/helper-plugin-utils": "^7.10.3", + "@babel/plugin-proposal-async-generator-functions": "^7.10.3", + "@babel/plugin-proposal-class-properties": "^7.10.1", + "@babel/plugin-proposal-dynamic-import": "^7.10.1", + "@babel/plugin-proposal-json-strings": "^7.10.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1", + "@babel/plugin-proposal-numeric-separator": "^7.10.1", + "@babel/plugin-proposal-object-rest-spread": "^7.10.3", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.1", + "@babel/plugin-proposal-optional-chaining": "^7.10.3", + "@babel/plugin-proposal-private-methods": "^7.10.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.1", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-class-properties": "^7.10.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.10.1", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.10.1", + "@babel/plugin-transform-arrow-functions": "^7.10.1", + "@babel/plugin-transform-async-to-generator": "^7.10.1", + "@babel/plugin-transform-block-scoped-functions": "^7.10.1", + "@babel/plugin-transform-block-scoping": "^7.10.1", + "@babel/plugin-transform-classes": "^7.10.3", + "@babel/plugin-transform-computed-properties": "^7.10.3", + "@babel/plugin-transform-destructuring": "^7.10.1", + "@babel/plugin-transform-dotall-regex": "^7.10.1", + "@babel/plugin-transform-duplicate-keys": "^7.10.1", + "@babel/plugin-transform-exponentiation-operator": "^7.10.1", + "@babel/plugin-transform-for-of": "^7.10.1", + "@babel/plugin-transform-function-name": "^7.10.1", + "@babel/plugin-transform-literals": "^7.10.1", + "@babel/plugin-transform-member-expression-literals": "^7.10.1", + "@babel/plugin-transform-modules-amd": "^7.10.1", + "@babel/plugin-transform-modules-commonjs": "^7.10.1", + "@babel/plugin-transform-modules-systemjs": "^7.10.3", + "@babel/plugin-transform-modules-umd": "^7.10.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.3", + "@babel/plugin-transform-new-target": "^7.10.1", + "@babel/plugin-transform-object-super": "^7.10.1", + "@babel/plugin-transform-parameters": "^7.10.1", + "@babel/plugin-transform-property-literals": "^7.10.1", + "@babel/plugin-transform-regenerator": "^7.10.3", + "@babel/plugin-transform-reserved-words": "^7.10.1", + "@babel/plugin-transform-shorthand-properties": "^7.10.1", + "@babel/plugin-transform-spread": "^7.10.1", + "@babel/plugin-transform-sticky-regex": "^7.10.1", + "@babel/plugin-transform-template-literals": "^7.10.3", + "@babel/plugin-transform-typeof-symbol": "^7.10.1", + "@babel/plugin-transform-unicode-escapes": "^7.10.1", + "@babel/plugin-transform-unicode-regex": "^7.10.1", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.10.3", + "browserslist": "^4.12.0", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.1", + "semver": "^5.5.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.3.tgz", + "integrity": "sha512-RzGO0RLSdokm9Ipe/YD+7ww8X2Ro79qiXZF3HU9ljrM+qnJmH1Vqth+hbiQZy761LnMJTMitHDuKVYTk3k4dLw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz", + "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.3", + "@babel/parser": "^7.10.3", + "@babel/types": "^7.10.3" + } + }, + "@babel/traverse": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz", + "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.3", + "@babel/generator": "^7.10.3", + "@babel/helper-function-name": "^7.10.3", + "@babel/helper-split-export-declaration": "^7.10.1", + "@babel/parser": "^7.10.3", + "@babel/types": "^7.10.3", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + } + }, + "@babel/types": { + "version": "7.10.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz", + "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.3", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@biigle/ol": { + "version": "5.3.0", + "resolved": "https://npm.pkg.github.com/download/@biigle/ol/5.3.0/d0711bd8db11d47db8ae07a4fd210506e4003d93760aca7fb1b8f8583e3756e8", + "integrity": "sha512-CR91F5cK8QsagVSsudozkqT3rGTwsykMaV9sobAUPdI2ygxvXHRXwlEUT4eeQWq450wNcJOjDmwWa05gnuujoQ==", + "requires": { + "@turf/boolean-contains": "^6.0.1", + "@turf/boolean-overlap": "^6.0.1", + "@turf/difference": "6.0.1", + "@turf/helpers": "^6.1.4", + "@turf/union": "^6.0.3", + "pbf": "3.1.0", + "pixelworks": "1.1.0", + "rbush": "2.0.2" + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "@turf/area": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.0.1.tgz", + "integrity": "sha512-Zv+3N1ep9P5JvR0YOYagLANyapGWQBh8atdeR3bKpWcigVXFsEKNUw03U/5xnh+cKzm7yozHD6MFJkqQv55y0g==", + "requires": { + "@turf/helpers": "6.x", + "@turf/meta": "6.x" + } + }, + "@turf/bbox": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.0.1.tgz", + "integrity": "sha512-EGgaRLettBG25Iyx7VyUINsPpVj1x3nFQFiGS3ER8KCI1MximzNLsam3eXRabqQDjyAKyAE1bJ4EZEpGvspQxw==", + "requires": { + "@turf/helpers": "6.x", + "@turf/meta": "6.x" + } + }, + "@turf/bearing": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-6.0.1.tgz", + "integrity": "sha512-mXY1NozqV9EFfBTbUItujwfqfQF0G/Xe2fzvnZle90ekPEUfhi4Dgf5JswJTd96J9LiT8kcd6Jonp5khnx0wIg==", + "requires": { + "@turf/helpers": "6.x", + "@turf/invariant": "6.x" + } + }, + "@turf/boolean-contains": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-6.0.1.tgz", + "integrity": "sha512-usAexEdWu7dV43paowGSFEM0PljexnlOuj09HF/VDZwO3FKelwUovF2ymetYatuG7KcIYcexeNEkQ5qQnGExlw==", + "requires": { + "@turf/bbox": "6.x", + "@turf/boolean-point-in-polygon": "6.x", + "@turf/boolean-point-on-line": "6.x", + "@turf/helpers": "6.x", + "@turf/invariant": "6.x" + } + }, + "@turf/boolean-overlap": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-6.0.1.tgz", + "integrity": "sha512-Ud6a75BzNYICVc5/Pf/GJ/3M5XZci6AOGlBNUPvhUrG4nT4NNYeXIpVrx1FB/tAg8EwZZXlhwSO26CTDC13XlA==", + "requires": { + "@turf/helpers": "6.x", + "@turf/invariant": "6.x", + "@turf/line-intersect": "6.x", + "@turf/line-overlap": "6.x", + "@turf/meta": "6.x", + "geojson-equality": "0.1.6" + } + }, + "@turf/boolean-point-in-polygon": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.0.1.tgz", + "integrity": "sha512-FKLOZ124vkJhjzNSDcqpwp2NvfnsbYoUOt5iAE7uskt4svix5hcjIEgX9sELFTJpbLGsD1mUbKdfns8tZxcMNg==", + "requires": { + "@turf/helpers": "6.x", + "@turf/invariant": "6.x" + } + }, + "@turf/boolean-point-on-line": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-6.0.1.tgz", + "integrity": "sha512-Vl724Tzh4CF/13kgblOAQnMcHagromCP1EfyJ9G/8SxpSoTYeY2G6FmmcpbW51GqKxC7xgM9+Pck50dun7oYkg==", + "requires": { + "@turf/helpers": "6.x", + "@turf/invariant": "6.x" + } + }, + "@turf/destination": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-6.0.1.tgz", + "integrity": "sha512-MroK4nRdp7as174miCAugp8Uvorhe6rZ7MJiC9Hb4+hZR7gNFJyVKmkdDDXIoCYs6MJQsx0buI+gsCpKwgww0Q==", + "requires": { + "@turf/helpers": "6.x", + "@turf/invariant": "6.x" + } + }, + "@turf/difference": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@turf/difference/-/difference-6.0.1.tgz", + "integrity": "sha512-lkhJjNfPeLARQm232A851vVhrUvX3gdvTft5QlqkUlr7AzLpiT8PW14yEkU9xABxRh6PGv7T1UUVAeRgC7JxuA==", + "requires": { + "@turf/area": "6.x", + "@turf/helpers": "6.x", + "@turf/invariant": "6.x", + "@turf/meta": "6.x", + "martinez-polygon-clipping": "*" + } + }, + "@turf/distance": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-6.0.1.tgz", + "integrity": "sha512-q7t7rWIWfkg7MP1Vt4uLjSEhe5rPfCO2JjpKmk7JC+QZKEQkuvHEqy3ejW1iC7Kw5ZcZNR3qdMGGz+6HnVwqvg==", + "requires": { + "@turf/helpers": "6.x", + "@turf/invariant": "6.x" + } + }, + "@turf/helpers": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.1.4.tgz", + "integrity": "sha512-vJvrdOZy1ngC7r3MDA7zIGSoIgyrkWcGnNIEaqn/APmw+bVLF2gAW7HIsdTxd12s5wQMqEpqIQrmrbRRZ0xC7g==" + }, + "@turf/invariant": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.1.2.tgz", + "integrity": "sha512-WU08Ph8j0J2jVGlQCKChXoCtI50BB3yEH21V++V0T4cR1T27HKCxkehV2sYMwTierfMBgjwSwDIsxnR4/2mWXg==", + "requires": { + "@turf/helpers": "6.x" + } + }, + "@turf/line-intersect": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.0.2.tgz", + "integrity": "sha512-pfL/lBu7ukBPdTjvSCmcNUzZ83V4R95htwqs5NqU8zeS4R+5KTwacbrOYKztjpmHBwUmPEIIpSbqkUoD0Fp7kg==", + "requires": { + "@turf/helpers": "6.x", + "@turf/invariant": "6.x", + "@turf/line-segment": "6.x", + "@turf/meta": "6.x", + "geojson-rbush": "3.x" + } + }, + "@turf/line-overlap": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-6.0.2.tgz", + "integrity": "sha512-Y7VTttNM+31R2hPa9N4a9ZaX/n1eOHvJkeBivXr/LBZClba365IzD9vtljYHMZQqD3SN7VmFJSmJyBIghO4V3Q==", + "requires": { + "@turf/boolean-point-on-line": "6.x", + "@turf/helpers": "6.x", + "@turf/invariant": "6.x", + "@turf/line-segment": "6.x", + "@turf/meta": "6.x", + "@turf/nearest-point-on-line": "6.x", + "deep-equal": "1.x", + "geojson-rbush": "3.x" + } + }, + "@turf/line-segment": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.0.2.tgz", + "integrity": "sha512-8AkzDHoNw3X68y115josal+lvdAi4b2P1K0YNTKGyLRBaUhPXVSuMBpMd53FRF1hYEb9UJgMbugF9ZE7m5L6zg==", + "requires": { + "@turf/helpers": "6.x", + "@turf/invariant": "6.x", + "@turf/meta": "6.x" + } + }, + "@turf/meta": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.0.2.tgz", + "integrity": "sha512-VA7HJkx7qF1l3+GNGkDVn2oXy4+QoLP6LktXAaZKjuT1JI0YESat7quUkbCMy4zP9lAUuvS4YMslLyTtr919FA==", + "requires": { + "@turf/helpers": "6.x" + } + }, + "@turf/nearest-point-on-line": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.0.2.tgz", + "integrity": "sha512-re9tSEwYyG1EMo4ObXXAKYVhkMVANPIIJQ1V/J1lKcNfHVc1pYmd3D5jkTNBh+oriI9VL4PVML3eqYE+Zcg0mg==", + "requires": { + "@turf/bearing": "6.x", + "@turf/destination": "6.x", + "@turf/distance": "6.x", + "@turf/helpers": "6.x", + "@turf/invariant": "6.x", + "@turf/line-intersect": "6.x", + "@turf/meta": "6.x" + } + }, + "@turf/union": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@turf/union/-/union-6.0.3.tgz", + "integrity": "sha512-SJPhEvsR96k4vFqymxPPC43jcqFydTafGjHWnYzlupxqUDzIYD8X5d9Ed8mONl2T9oM4ErbNuuZ9j/eHvoWtKw==", + "requires": { + "@turf/helpers": "6.x", + "@turf/invariant": "6.x", + "martinez-polygon-clipping": "^0.4.3" + }, + "dependencies": { + "martinez-polygon-clipping": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.4.3.tgz", + "integrity": "sha512-3ZNS0ksKhWTLsmCUkNf+/UimndZ5U2cVOS0I+IjiwF+M23E77TmeOZSmbRJbfCoQUog/vcQ42s3DXrhgOhgPqw==", + "requires": { + "splaytree": "^0.1.4", + "tinyqueue": "^1.2.0" + } + } + } + }, + "@types/glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", + "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "dev": true + }, + "@types/node": { + "version": "14.0.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.14.tgz", + "integrity": "sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==", + "dev": true + }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "dev": true + }, + "@vue/component-compiler-utils": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.1.2.tgz", + "integrity": "sha512-QLq9z8m79mCinpaEeSURhnNCN6djxpHw0lpP/bodMlt5kALfONpryMthvnrQOlTcIKoF+VoPi+lPHUYeDFPXug==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.14", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + } + } + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "dev": true + }, + "adjust-sourcemap-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", + "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", + "dev": true, + "requires": { + "assert": "1.4.1", + "camelcase": "5.0.0", + "loader-utils": "1.2.3", + "object-path": "0.11.4", + "regex-parser": "2.2.10" + }, + "dependencies": { + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } + }, + "camelcase": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", + "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "aggregate-error": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", + "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.0.tgz", + "integrity": "sha512-eyoaac3btgU8eJlvh01En8OCKzRqlLe2G5jDsCr3RiE2uLGMEEB1aaGwVVpwR8M95956tGH6R+9edC++OvzaVw==", + "dev": true + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "9.8.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.4.tgz", + "integrity": "sha512-84aYfXlpUe45lvmS+HoAWKCkirI/sw4JK0/bTeeqgHYco3dcsOn0NqdejISjptsYwNji/21dnkDri9PsYKk89A==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001087", + "colorette": "^1.2.0", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "dev": true, + "requires": { + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" + } + }, + "babel-merge": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/babel-merge/-/babel-merge-2.0.1.tgz", + "integrity": "sha512-puTQQxuzS+0JlMyVdfsTVaCgzqjBXKPMv7oUANpYcHFY+7IptWZ4PZDYX+qBxrRMtrriuBA44LkKpS99EJzqVA==", + "dev": true, + "requires": { + "@babel/core": "^7.0.0-beta.49", + "deepmerge": "^2.1.0", + "object.omit": "^3.0.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", + "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "browserify-sign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", + "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.2", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.1.tgz", + "integrity": "sha512-WMjXwFtPskSW1pQUDJRxvRKRkeCr7usN0O/Za76N+F4oadaTdQHotSGcX9jT/Hs7mSKPkyMFNvqawB/1HzYDKQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001088", + "electron-to-chromium": "^1.3.481", + "escalade": "^3.0.1", + "node-releases": "^1.1.58" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", + "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", + "dev": true, + "requires": { + "chownr": "^1.1.2", + "figgy-pudding": "^3.5.1", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "infer-owner": "^1.0.4", + "lru-cache": "^5.1.1", + "minipass": "^3.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "p-map": "^3.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^2.7.1", + "ssri": "^7.0.0", + "unique-filename": "^1.1.1" + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001088", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001088.tgz", + "integrity": "sha512-6eYUrlShRYveyqKG58HcyOfPgh3zb2xqs7NvT2VVtP3hEUeeWvc3lqhpeMTxYWBBeeaT9A4bKsrtjATm66BTHg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collect.js": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.27.3.tgz", + "integrity": "sha512-2nmoyhUJbhjVVE0W9W0cSBeg8/PL3ObGe1ijj9WDlLG3RrpvePsBZd6p3uTm1dTAUKJVd3qT8mnH6iXCdENEHQ==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorette": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.0.tgz", + "integrity": "sha512-soRSroY+OF/8OdA3PTQXwaDJeMc7TfknKKrxeSCencL2a4+Tx5zhxmmv7hdpCjhKBjehzp8+bwe/T68K0hpIjw==", + "dev": true + }, + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "dev": true, + "requires": { + "arity-n": "^1.0.4" + } + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "concatenate": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/concatenate/-/concatenate-0.0.2.tgz", + "integrity": "sha1-C0nW6MQQR9dyjNyNYqCGYjOXtJ8=", + "dev": true, + "requires": { + "globs": "^0.1.2" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js-compat": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "dev": true, + "requires": { + "browserslist": "^4.8.5", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-env": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", + "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.5" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "dev": true + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, + "css-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz", + "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash": "^4.17.11", + "postcss": "^6.0.23", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz", + "integrity": "sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2", + "regexpu-core": "^4.6.0" + } + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-what": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", + "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "dev": true, + "requires": { + "mdn-data": "2.0.6", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "dev": true + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + } + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", + "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", + "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", + "dev": true + }, + "dotenv-expand": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", + "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.482", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.482.tgz", + "integrity": "sha512-iRK2JHR6Q3x20Pkl1Rf+gzalOwmVG+PF2J9BHiVOCPotloQmDSG6dT+Vtf2D+3JT3fpzoDNdtHgGuRO6OAUlhQ==", + "dev": true + }, + "elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.2.0.tgz", + "integrity": "sha512-S7eiFb/erugyd1rLb6mQ3Vuq+EXHv5cpCkNqqIkYkBgN2QdFnyCZzFBleqwGEx4lgNGYij81BWnCrFNK7vxvjQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", + "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "dev": true, + "requires": { + "stackframe": "^1.1.1" + } + }, + "es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-templates": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", + "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", + "dev": true, + "requires": { + "recast": "~0.11.12", + "through": "~2.3.6" + } + }, + "escalade": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.1.tgz", + "integrity": "sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", + "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "dev": true + }, + "events": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", + "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", + "dev": true + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", + "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", + "dev": true + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "extract-text-webpack-plugin": { + "version": "4.0.0-beta.0", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-4.0.0-beta.0.tgz", + "integrity": "sha512-Hypkn9jUTnFr0DpekNam53X47tXn3ucY08BQumv7kdGgeVUBLq3DJHJTi6HNxv4jl9W+Skxjz9+RnK0sJyqqjA==", + "dev": true, + "requires": { + "async": "^2.4.1", + "loader-utils": "^1.1.0", + "schema-utils": "^0.4.5", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, + "file-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz", + "integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "file-type": { + "version": "10.11.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", + "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", + "dev": true + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz", + "integrity": "sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "friendly-errors-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "error-stack-parser": "^2.0.0", + "string-width": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, + "geojson-equality": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/geojson-equality/-/geojson-equality-0.1.6.tgz", + "integrity": "sha1-oXE3TvBD5dR5eZWEC65GSOB1LXI=", + "requires": { + "deep-equal": "^1.0.0" + } + }, + "geojson-rbush": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.1.2.tgz", + "integrity": "sha512-grkfdg3HIeTjwTfiJe5FT8+fGU3fABCc+vRJDBwdQz9kkLF0Sbif2gs2JUzjewwgmnvLGy9fInySDeADoNuk7w==", + "requires": { + "@turf/bbox": "*", + "@turf/helpers": "6.x", + "@turf/meta": "6.x", + "rbush": "^2.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + }, + "dependencies": { + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + } + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "globs": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globs/-/globs-0.1.4.tgz", + "integrity": "sha512-D23dWbOq48vlOraoSigbcQV4tWrnhwk+E/Um2cMuDS3/5dwGmdFeA7L/vAvDhLFlQOTDqHcXh35m/71g2A2WzQ==", + "dev": true, + "requires": { + "glob": "^7.1.1" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true + }, + "html-entities": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "dev": true + }, + "html-loader": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz", + "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==", + "dev": true, + "requires": { + "es6-templates": "^0.2.3", + "fastparse": "^1.1.1", + "html-minifier": "^3.5.8", + "loader-utils": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "imagemin": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz", + "integrity": "sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==", + "dev": true, + "requires": { + "file-type": "^10.7.0", + "globby": "^8.0.1", + "make-dir": "^1.0.0", + "p-pipe": "^1.1.0", + "pify": "^4.0.1", + "replace-ext": "^1.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + } + } + }, + "img-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-3.0.1.tgz", + "integrity": "sha512-0jDJqexgzOuq3zlXwFTBKJlMcaP1uXyl5t4Qu6b1IgXb3IwBDjPfVylBC8vHFIIESDw/S+5QkBbtBrt4T8wESA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + } + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jest-worker": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", + "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + } + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "laravel-mix": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-5.0.4.tgz", + "integrity": "sha512-/fkcMdlxhGDBcH+kFDqKONlAfhJinMAWd+fjQ+VLii4UzIeXUF5Q8FbS4+ZrZs9JO3Y1E4KoNq3hMw0t/soahA==", + "dev": true, + "requires": { + "@babel/core": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-dynamic-import": "^7.2.0", + "@babel/plugin-transform-runtime": "^7.2.0", + "@babel/preset-env": "^7.2.0", + "@babel/runtime": "^7.2.0", + "autoprefixer": "^9.4.2", + "babel-loader": "^8.0.4", + "babel-merge": "^2.0.1", + "chokidar": "^2.0.3", + "clean-css": "^4.1.3", + "collect.js": "^4.12.8", + "concatenate": "0.0.2", + "css-loader": "^1.0.1", + "dotenv": "^6.2.0", + "dotenv-expand": "^4.2.0", + "extract-text-webpack-plugin": "v4.0.0-beta.0", + "file-loader": "^2.0.0", + "friendly-errors-webpack-plugin": "^1.6.1", + "fs-extra": "^7.0.1", + "glob": "^7.1.2", + "html-loader": "^0.5.5", + "imagemin": "^6.0.0", + "img-loader": "^3.0.0", + "lodash": "^4.17.15", + "md5": "^2.2.1", + "optimize-css-assets-webpack-plugin": "^5.0.1", + "postcss-loader": "^3.0.0", + "style-loader": "^0.23.1", + "terser": "^3.11.0", + "terser-webpack-plugin": "^2.2.3", + "vue-loader": "^15.4.2", + "webpack": "^4.36.1", + "webpack-cli": "^3.1.2", + "webpack-dev-server": "^3.1.14", + "webpack-merge": "^4.1.0", + "webpack-notifier": "^1.5.1", + "yargs": "^12.0.5" + } + }, + "laravel-mix-artisan-publish": { + "version": "git://github.com/mzur/laravel-mix-artisan-publish.git#c677462f05c13cb96f8a5434da7398b0f4bc6af2", + "from": "git://github.com/mzur/laravel-mix-artisan-publish.git", + "dev": true, + "requires": { + "node-cmd": "^3.0.0" + } + }, + "last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "dev": true, + "requires": { + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" + } + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levenary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", + "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", + "dev": true, + "requires": { + "leven": "^3.1.0" + } + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "loglevel": { + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", + "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + }, + "dependencies": { + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "martinez-polygon-clipping": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.7.0.tgz", + "integrity": "sha512-EBxKjlUqrVjzT1HRwJARaSwj66JZqEUl+JnqnrzHZLU4hd4XrCQWqShZx40264NR/pm5wIHRlNEaIrev44wvKA==", + "requires": { + "robust-predicates": "^2.0.4", + "splaytree": "^0.1.4", + "tinyqueue": "^1.2.0" + } + }, + "md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "dev": true, + "requires": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "minipass-pipeline": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz", + "integrity": "sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "nan": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "dev": true, + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-cmd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/node-cmd/-/node-cmd-3.0.0.tgz", + "integrity": "sha1-OP/3CkqqT2WdID61eGJzcBjiT28=", + "dev": true + }, + "node-forge": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", + "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + } + } + }, + "node-notifier": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", + "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "node-releases": { + "version": "1.1.58", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz", + "integrity": "sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" + }, + "object-is": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", + "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-path": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", + "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "object.omit": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz", + "integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==", + "dev": true, + "requires": { + "is-extendable": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optimize-css-assets-webpack-plugin": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", + "dev": true, + "requires": { + "cssnano": "^4.1.10", + "last-call-webpack-plugin": "^3.0.0" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-pipe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", + "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", + "dev": true + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parse-asn1": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pbf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz", + "integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==", + "requires": { + "ieee754": "^1.1.6", + "resolve-protobuf-schema": "^2.0.0" + } + }, + "pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "optional": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pixelworks": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pixelworks/-/pixelworks-1.1.0.tgz", + "integrity": "sha1-Hwla1I3Ki/ihyCWOAJIDGkTyLKU=" + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "portfinder": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", + "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.1" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-calc": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz", + "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==", + "dev": true, + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-load-config": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", + "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", + "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", + "dev": true, + "requires": { + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-selector-parser": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", + "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "dev": true, + "requires": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true, + "optional": true + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "protocol-buffers-schema": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.4.0.tgz", + "integrity": "sha512-G/2kcamPF2S49W5yaMGdIpkG6+5wZF0fzBteLKgEHjbNzqjZQ85aAs1iJGto31EJaSTkNvHs5IXuHSaTLWBAiA==" + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", + "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "dev": true + }, + "quickselect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", + "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + } + } + }, + "rbush": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", + "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", + "requires": { + "quickselect": "^1.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "recast": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "dev": true, + "requires": { + "ast-types": "0.9.6", + "esprima": "~3.1.0", + "private": "~0.1.5", + "source-map": "~0.5.0" + } + }, + "regenerate": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4", + "private": "^0.1.8" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regex-parser": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", + "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==", + "dev": true + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + } + }, + "regexpu-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "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" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "dependencies": { + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + } + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "requires": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resolve-url-loader": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz", + "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "2.0.0", + "camelcase": "5.3.1", + "compose-function": "3.0.3", + "convert-source-map": "1.7.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.21", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + } + }, + "postcss": { + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true + }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "dev": true, + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "dev": true + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "robust-predicates": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz", + "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==" + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.26.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.9.tgz", + "integrity": "sha512-t8AkRVi+xvba4yZiLWkJdgJHBFCB3Dh4johniQkPy9ywkgFHNasXFEFP+RG/F6LhQ+aoE4aX+IorIWQjS0esVw==", + "dev": true, + "requires": { + "chokidar": ">=2.0.0 <4.0.0" + } + }, + "sass-loader": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", + "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.7", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", + "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "dev": true, + "requires": { + "node-forge": "0.9.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", + "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.4.0", + "websocket-driver": "0.6.5" + } + }, + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "dev": true, + "requires": { + "debug": "^3.2.5", + "eventsource": "^1.0.7", + "faye-websocket": "~0.11.1", + "inherits": "^2.0.3", + "json3": "^3.3.2", + "url-parse": "^1.4.3" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "splaytree": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-0.1.4.tgz", + "integrity": "sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ==" + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "ssri": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", + "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stackframe": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", + "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "style-loader": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", + "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", + "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "dev": true, + "requires": { + "commander": "^2.19.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.10" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.7.tgz", + "integrity": "sha512-xzYyaHUNhzgaAdBsXxk2Yvo/x1NJdslUaussK3fdpBbvttm1iIwU+c26dj9UxJcwk2c5UWt5F55MUTIA8BE7Dg==", + "dev": true, + "requires": { + "cacache": "^13.0.1", + "find-cache-dir": "^3.3.1", + "jest-worker": "^25.4.0", + "p-limit": "^2.3.0", + "schema-utils": "^2.6.6", + "serialize-javascript": "^3.1.0", + "source-map": "^0.6.1", + "terser": "^4.6.12", + "webpack-sources": "^1.4.3" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tinyqueue": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-1.2.3.tgz", + "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA==" + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tslib": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "dev": true, + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "vue-loader": { + "version": "15.9.3", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.3.tgz", + "integrity": "sha512-Y67VnGGgVLH5Voostx8JBZgPQTlDQeOVBLOEsjc2cXbCYBKexSKEpOA56x0YZofoDOTszrLnIShyOX1p9uCEHA==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + } + }, + "vue-style-loader": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz", + "integrity": "sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "vue-template-compiler": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz", + "integrity": "sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "watchpack": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", + "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==", + "dev": true, + "requires": { + "chokidar": "^3.4.0", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "optional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true, + "optional": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "optional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", + "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.4.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "optional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "optional": true + }, + "readdirp": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", + "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "webpack": { + "version": "4.43.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", + "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.6.1", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, + "terser-webpack-plugin": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz", + "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^3.1.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + } + } + } + }, + "webpack-cli": { + "version": "3.3.12", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", + "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.1.1", + "findup-sync": "^3.0.0", + "global-modules": "^2.0.0", + "import-local": "^2.0.0", + "interpret": "^1.4.0", + "loader-utils": "^1.4.0", + "supports-color": "^6.1.0", + "v8-compile-cache": "^2.1.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.7", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "webpack-notifier": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.8.0.tgz", + "integrity": "sha512-I6t76NoPe5DZCCm5geELmDV2wlJ89LbU425uN6T2FG8Ywrrt1ZcUMz6g8yWGNg4pttqTPFQJYUPjWAlzUEQ+cQ==", + "dev": true, + "requires": { + "node-notifier": "^5.1.2", + "object-assign": "^4.1.0", + "strip-ansi": "^3.0.1" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dev": true, + "requires": { + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^11.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } +} From ec8bb24e52bde3db469fdcd36f846cf1155ffb75 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 25 Jun 2020 08:21:12 +0200 Subject: [PATCH 196/407] Migrate annotations scripts to ES6 --- .npmrc | 1 + package.json | 22 +- src/public/assets/scripts/annotations.js | 3 +- .../assets/scripts/annotations.js.LICENSE.txt | 6 + src/public/assets/scripts/main.js | 2 +- src/public/assets/styles/main.css | 2 +- src/public/mix-manifest.json | 5 + .../assets/js/annotations/annotations.js | 1 + .../api/{volumes.js => exportArea.js} | 4 +- .../components/settingsTabPlugins.js | 235 ----------------- src/resources/assets/js/annotations/import.js | 3 + .../js/annotations/settingsTabPlugin.js | 241 ++++++++++++++++++ .../assets/js/reports/api/projectReports.js | 2 +- .../assets/js/reports/api/videoReports.js | 2 +- .../assets/js/reports/api/volumeReports.js | 2 +- .../js/reports/exportProjectReportForm.js | 4 +- .../js/reports/exportVideoReportForm.js | 4 +- .../js/reports/exportVolumeReportForm.js | 4 +- src/resources/assets/js/reports/import.js | 0 src/resources/assets/js/reports/main.js | 0 .../assets/js/reports/mixins/reportForm.js | 52 ++-- webpack.mix.js | 30 +++ 22 files changed, 347 insertions(+), 278 deletions(-) create mode 100644 .npmrc create mode 100644 src/public/assets/scripts/annotations.js.LICENSE.txt create mode 100644 src/public/mix-manifest.json create mode 100644 src/resources/assets/js/annotations/annotations.js rename src/resources/assets/js/annotations/api/{volumes.js => exportArea.js} (68%) delete mode 100644 src/resources/assets/js/annotations/components/settingsTabPlugins.js create mode 100644 src/resources/assets/js/annotations/import.js create mode 100644 src/resources/assets/js/annotations/settingsTabPlugin.js create mode 100644 src/resources/assets/js/reports/import.js create mode 100644 src/resources/assets/js/reports/main.js create mode 100644 webpack.mix.js diff --git a/.npmrc b/.npmrc new file mode 100644 index 000000000..3eae983b5 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +registry=https://npm.pkg.github.com/biigle diff --git a/package.json b/package.json index c56737f92..89ceed3d9 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,25 @@ { - "name": "biigle-reports", + "name": "biigle-projects", "version": "0.0.1", "license": "GPL-3.0-only", + "scripts": { + "dev": "npm run development", + "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", + "watch": "npm run development -- --watch", + "watch-poll": "npm run watch -- --watch-poll", + "prod": "npm run production", + "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" + }, "devDependencies": { - "gulp": "^3.9.1", - "gulp-helpers": "git+https://github.com/mzur/gulp-helpers.git#v1.1.0" + "cross-env": "^5.1", + "laravel-mix": "^5.0.1", + "laravel-mix-artisan-publish": "git://github.com/mzur/laravel-mix-artisan-publish.git", + "resolve-url-loader": "^3.1.0", + "sass": "^1.15.2", + "sass-loader": "^8.0.0", + "vue-template-compiler": "^2.6.11" + }, + "dependencies": { + "@biigle/ol": "^5.3.0" } } diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index 4a299e00d..cacb66da8 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1,2 @@ -biigle.$require("annotations.components.settingsTabPlugins").exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},exportAreaApi:function(){return biigle.$require("reports.api.volumes")},volumeId:function(){return biigle.$require("annotations.volumeId")},messages:function(){return biigle.$require("messages.store")},layer:function(){return new ol.layer.Vector({source:new ol.source.Vector({features:new ol.Collection}),style:[new ol.style.Style({stroke:new ol.style.Stroke({color:"white",width:4}),image:new ol.style.Circle({radius:6,fill:new ol.style.Fill({color:"#666666"}),stroke:new ol.style.Stroke({color:"white",width:2,lineDash:[2]})})}),new ol.style.Style({stroke:new ol.style.Stroke({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new ol.interaction.Draw({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(e,t){e.length>1&&(e=[e[0],[e[0][0],e[1][1]],e[1],[e[1][0],e[0][1]]]);var r=t;return r?r.setCoordinates([e]):r=new ol.geom.Rectangle([e]),r}})},modifyInteraction:function(){return new ol.interaction.Modify({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:ol.events.condition.never})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this,t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.exportAreaApi.delete({id:this.volumeId}).then(function(){e.exportArea=null}).catch(function(i){t.addFeature(r),e.messages.handleErrorResponse(i)})}},updateCurrentImage:function(e,t){this.currentImage=t},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var e=this.currentImage.tiled?0:this.height,t=new ol.geom.Rectangle([[[this.exportArea[0],e-this.exportArea[1]],[this.exportArea[0],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[3]],[this.exportArea[2],e-this.exportArea[1]]]]);this.layer.getSource().addFeature(new ol.Feature({geometry:t}))}},handleModifyend:function(e){this.updateExportArea(e.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(e){var t=this.layer.getSource(),r=t.getFeatures()[0];t.clear(),this.updateExportArea(e.feature).catch(function(){t.clear(),r&&t.addFeature(r)})},updateExportArea:function(e){var t=this,r=e.getGeometry().getCoordinates()[0],i=this.currentImage.tiled?0:this.height;r=[r[0][0],i-r[0][1],r[2][0],i-r[2][1]].map(Math.round);var n=this.exportAreaApi.save({id:this.volumeId},{coordinates:r}).then(function(){t.exportArea=r});return n.catch(this.messages.handleErrorResponse),n},extendMap:function(e){e.addLayer(this.layer),e.addInteraction(this.drawInteraction),e.addInteraction(this.modifyInteraction)}},watch:{opacity:function(e,t){e<1?this.settings.set("exportAreaOpacity",e):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(e)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend);var e=biigle.$require("events");e.$on("images.change",this.updateCurrentImage),e.$on("annotations.map.init",this.extendMap)}},biigle.$declare("reports.api.volumes",Vue.resource("/api/v1/volumes{/id}/export-area")); \ No newline at end of file +/*! For license information please see annotations.js.LICENSE.txt */ +!function(t){var e={};function i(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)i.d(n,r,function(e){return t[e]}.bind(null,r));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="/",i(i.s=1)}({1:function(t,e,i){t.exports=i("2R1P")},"2R1P":function(t,e,i){"use strict";function n(){return function(){throw new Error("Unimplemented abstract method.")}()}i.r(e);var r=0;function o(t){return t.ol_uid||(t.ol_uid=String(++r))}var s=function(t){function e(e){var i="Assertion failed. See https://openlayers.org/en/"+("v"+"5.3.0".split("-")[0])+"/doc/errors/#"+e+" for details.";t.call(this,i),this.code=e,this.name="AssertionError",this.message=i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error);function a(t,e){if(!t)throw new s(e)}function h(t,e,i){return Math.min(Math.max(t,e),i)}var u="cosh"in Math?Math.cosh:function(t){var e=Math.exp(t);return(e+1/e)/2};function l(t,e,i,n,r,o){var s=r-i,a=o-n;if(0!==s||0!==a){var h=((t-i)*s+(e-n)*a)/(s*s+a*a);h>1?(i=r,n=o):h>0&&(i+=s*h,n+=a*h)}return c(t,e,i,n)}function c(t,e,i,n){var r=i-t,o=n-e;return r*r+o*o}function p(t,e,i){return t+i*(e-t)}var f=/^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i,d=/^([a-z]*)$/i;function _(t){return"string"==typeof t?t:y(t)}!function(){var t={},e=0}();function g(t){return t[0]=h(t[0]+.5|0,0,255),t[1]=h(t[1]+.5|0,0,255),t[2]=h(t[2]+.5|0,0,255),t[3]=h(t[3],0,1),t}function y(t){var e=t[0];e!=(0|e)&&(e=e+.5|0);var i=t[1];i!=(0|i)&&(i=i+.5|0);var n=t[2];return n!=(0|n)&&(n=n+.5|0),"rgba("+e+","+i+","+n+","+(void 0===t[3]?1:t[3])+")"}function v(t){return Array.isArray(t)?y(t):t}function m(t,e){var i=document.createElement("canvas");return t&&(i.width=t),e&&(i.height=e),i.getContext("2d")}var C="undefined"!=typeof navigator?navigator.userAgent.toLowerCase():"",x=(C.indexOf("firefox"),-1!==C.indexOf("safari")&&C.indexOf("chrom"),-1!==C.indexOf("webkit")&&C.indexOf("edge"),C.indexOf("macintosh"),window.devicePixelRatio,function(){var t=!1;try{t=!!document.createElement("canvas").getContext("2d").setLineDash}catch(t){}return t}()),w=(navigator,window,window,navigator.msPointerEnabled,2),E=function(){var t,e={};return function(i){if(t||(t=document.createElement("div").style),!(i in e)){t.font=i;var n=t.fontFamily;if(t.font="",!n)return null;e[i]=n.split(/,\s?/)}return e[i]}}(),F="function"==typeof Object.assign?Object.assign:function(t,e){var i=arguments;if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(t),r=1,o=arguments.length;r0},e.prototype.removeEventListener=function(t,e){var i=this.listeners_[t];if(i){var n=i.indexOf(e);t in this.pendingRemovals_?(i[n]=j,++this.pendingRemovals_[t]):(i.splice(n,1),0===i.length&&delete this.listeners_[t])}},e}(P),W="change",V="clear",z="contextmenu",K="dblclick",U=function(t){function e(e){t.call(this),this.highWaterMark=void 0!==e?e:2048,this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.canExpireCache=function(){return this.getCount()>this.highWaterMark},e.prototype.clear=function(){this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null,this.dispatchEvent(V)},e.prototype.containsKey=function(t){return this.entries_.hasOwnProperty(t)},e.prototype.forEach=function(t,e){for(var i=this.oldest_;i;)t.call(e,i.value_,i.key_,this),i=i.newer},e.prototype.get=function(t){var e=this.entries_[t];return a(void 0!==e,15),e===this.newest_||(e===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(e.newer.older=e.older,e.older.newer=e.newer),e.newer=null,e.older=this.newest_,this.newest_.newer=e,this.newest_=e),e.value_},e.prototype.remove=function(t){var e=this.entries_[t];return a(void 0!==e,15),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_},e.prototype.getCount=function(){return this.count_},e.prototype.getKeys=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.key_;return e},e.prototype.getValues=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.value_;return e},e.prototype.peekLast=function(){return this.oldest_.value_},e.prototype.peekLastKey=function(){return this.oldest_.key_},e.prototype.peekFirstKey=function(){return this.newest_.key_},e.prototype.pop=function(){var t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_},e.prototype.replace=function(t,e){this.get(t),this.entries_[t].value_=e},e.prototype.set=function(t,e){a(!(t in this.entries_),16);var i={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=i:this.oldest_=i,this.newest_=i,this.entries_[t]=i,++this.count_},e.prototype.setSize=function(t){this.highWaterMark=t},e.prototype.prune=function(){for(;this.canExpireCache();)this.pop()},e}(N);new Array(6);var H=[0,0,0,1],J=[0,0,0,1],Z=new U,$={},Q=null,tt={};!function(){var t,e,i=$,n=["monospace","serif"],r=n.length,o="wmytzilWMYTZIL@#/&?$%10";function s(t){for(var i=et(),s=100;s<=700;s+=300){for(var a=s+" ",h=!0,u=0;u0;)this.pop()},e.prototype.extend=function(t){for(var e=0,i=t.length;e=1?(i=l,n=c):(i=h+d*p,n=u+d*f),[i,n]}function kt(t,e){for(var i=!0,n=t.length-1;n>=0;--n)if(t[n]!=e[n]){i=!1;break}return i}function Mt(t,e){var i=t[0]-e[0],n=t[1]-e[1];return i*i+n*n}function It(t,e){return Math.sqrt(Mt(t,e))}var Pt=X,Rt=Y,bt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey},Dt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&e.shiftKey},At=function(t){var e=t.pointerEvent;return a(void 0!==e,56),e.isPrimary&&0===e.button},Gt=0,Ot=1,Lt=2,Tt=4,Xt=8,Yt=16;function jt(t){for(var e=Vt(),i=0,n=t.length;ir&&(h|=Tt),ao&&(h|=Lt),h===Gt&&(h=Ot),h}function Vt(){return[1/0,1/0,-1/0,-1/0]}function zt(t,e,i,n,r){return r?(r[0]=t,r[1]=e,r[2]=i,r[3]=n,r):[t,e,i,n]}function Kt(t){return zt(1/0,1/0,-1/0,-1/0,t)}function Ut(t,e){var i=t[0],n=t[1];return zt(i,n,i,n,e)}function Ht(t,e,i,n,r){return $t(Kt(r),t,e,i,n)}function Jt(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function Zt(t,e){e[0]t[2]&&(t[2]=e[0]),e[1]t[3]&&(t[3]=e[1])}function $t(t,e,i,n,r){for(;i=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}var he="Point",ue="LineString",le="LinearRing",ce="Polygon",pe="MultiPoint",fe="MultiLineString",de="MultiPolygon",_e="GeometryCollection",ge="Circle",ye="Rectangle",ve="Ellipse";function me(t,e,i,n,r,o){for(var s=o||[],a=0,h=e;h1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=Se,a=0;as?h=s:h<-s&&(h=-s),o[a+1]=h}return o}function be(t,e,i){var n=t.length,r=i>1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=0;s=e[0]||(t[1]<=e[1]&&t[3]>=e[1]||te(t,this.intersectsCoordinate,this))}return!1},e.prototype.setCenter=function(t){var e=this.stride,i=this.flatCoordinates[e]-this.flatCoordinates[0],n=t.slice();n[e]=n[0]+i;for(var r=1;re?1:t1)a=i;else{if(f>0){for(var d=0;dr&&(r=u),o=a,s=h}return r}function ci(t,e,i,n,r){for(var o=0,s=i.length;o>1)],e))<0?s=n+1:(a=n,h=!r);return h?s:~s}(f,y);if(v<0){var m=(y-f[-v-2])/(f[-v-1]-f[-v-2]),C=e+(-v-2)*n;s=p(t[C],t[C+n],m),a=p(t[C+1],t[C+n+1],m)}else s=t[e+v*n],a=t[e+v*n+1]}return o?(o[0]=s,o[1]=a,o):[s,a]}function yi(t,e,i,n,r,o){if(i==e)return null;var s;if(r>1;ro&&(u-a)*(o-h)-(r-a)*(l-h)>0&&s++:l<=o&&(u-a)*(o-h)-(r-a)*(l-h)<0&&s--,a=u,h=l}return 0!==s}function Ci(t,e,i,n,r,o){if(0===i.length)return!1;if(!mi(t,e,i[0],n,r,o))return!1;for(var s=1,a=i.length;s=r[0]&&o[2]<=r[2]||(o[1]>=r[1]&&o[3]<=r[3]||xi(t,e,i,n,(function(t,e){return function(t,e,i){var n=!1,r=Wt(t,e),o=Wt(t,i);if(r===Ot||o===Ot)n=!0;else{var s,a,h=t[0],u=t[1],l=t[2],c=t[3],p=e[0],f=e[1],d=i[0],_=i[1],g=(_-f)/(d-p);o&Lt&&!(r&Lt)&&(n=(s=d-(_-c)/g)>=h&&s<=l),n||!(o&Tt)||r&Tt||(n=(a=_-(d-l)*g)>=u&&a<=c),n||!(o&Xt)||r&Xt||(n=(s=d-(_-u)/g)>=h&&s<=l),n||!(o&Yt)||r&Yt||(n=(a=_-(d-h)*g)>=u&&a<=c)}return n}(r,t,e)})))))}function Ei(t,e,i,n,r){if(!function(t,e,i,n,r){return!!wi(t,e,i,n,r)||(!!mi(t,e,i,n,r[0],r[1])||(!!mi(t,e,i,n,r[0],r[3])||(!!mi(t,e,i,n,r[2],r[1])||!!mi(t,e,i,n,r[2],r[3]))))}(t,e,i[0],n,r))return!1;if(1===i.length)return!0;for(var o=1,s=i.length;o0;){for(var p=u.pop(),f=u.pop(),d=0,_=t[f],g=t[f+1],y=t[p],v=t[p+1],m=f+n;md&&(c=m,d=C)}d>r&&(h[(c-e)/n]=1,f+n0&&_>f)&&(d<0&&g0&&g>d)?(a=c,h=p):(o[s++]=a,o[s++]=h,u=a,l=h,a=c,h=p)}}return o[s++]=a,o[s++]=h,s}function Pi(t,e,i,n,r,o,s,a){for(var h=0,u=i.length;hC&&Ci(t,e,i,n,u=(l+c)/2,d)&&(m=u,C=x),l=c}return isNaN(m)&&(m=r[o]),s?(s.push(m,d,C),s):[m,d,C]}function Xi(t,e,i,n){for(;e0}function ji(t,e,i,n,r){for(var o=void 0!==r&&r,s=0,a=i.length;s0}}else if(t.type==wt){var n=this.handleDownEvent(t);n&&t.preventDefault(),this.handlingDownUpSequence=n,e=this.stopDown(n)}else t.type==xt&&this.handleMoveEvent(t);return!e},e.prototype.handleMoveEvent=function(t){},e.prototype.handleUpEvent=function(t){return!1},e.prototype.stopDown=function(t){return t},e.prototype.updateTrackedPointers_=function(t){if(function(t){var e=t.type;return e===wt||e===Ct||e===Et}(t)){var e=t.pointerEvent,i=e.pointerId.toString();t.type==Et?delete this.trackedPointers_[i]:(t.type==wt||i in this.trackedPointers_)&&(this.trackedPointers_[i]=e),this.targetPointers=k(this.trackedPointers_)}},e}(function(t){function e(e){t.call(this),e.handleEvent&&(this.handleEvent=e.handleEvent),this.map_=null,this.setActive(!0)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getActive=function(){return this.get(Ki)},e.prototype.getMap=function(){return this.map_},e.prototype.handleEvent=function(t){return!0},e.prototype.setActive=function(t){this.set(Ki,t)},e.prototype.setMap=function(t){this.map_=t},e}(ft)),Hi="VECTOR",Ji="opacity",Zi="visible",$i="extent",Qi="zIndex",tn="maxResolution",en="minResolution",nn="source",rn="precompose",on="undefined",sn="ready";var an=function(t){function e(e){var i=F({},e);delete i.source,t.call(this,i),this.mapPrecomposeKey_=null,this.mapRenderKey_=null,this.sourceChangeKey_=null,e.map&&this.setMap(e.map),G(this,pt(nn),this.handleSourcePropertyChange_,this);var n=e.source?e.source:null;this.setSource(n)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getLayersArray=function(t){var e=t||[];return e.push(this),e},e.prototype.getLayerStatesArray=function(t){var e=t||[];return e.push(this.getLayerState()),e},e.prototype.getSource=function(){return this.get(nn)||null},e.prototype.getSourceState=function(){var t=this.getSource();return t?t.getState():on},e.prototype.handleSourceChange_=function(){this.changed()},e.prototype.handleSourcePropertyChange_=function(){this.sourceChangeKey_&&(T(this.sourceChangeKey_),this.sourceChangeKey_=null);var t=this.getSource();t&&(this.sourceChangeKey_=G(t,W,this.handleSourceChange_,this)),this.changed()},e.prototype.setMap=function(t){this.mapPrecomposeKey_&&(T(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(T(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=G(t,rn,(function(t){var e=t,i=this.getLayerState();i.managed=!1,void 0===this.getZIndex()&&(i.zIndex=1/0),e.frameState.layerStatesArray.push(i),e.frameState.layerStates[o(this)]=i}),this),this.mapRenderKey_=G(this,W,t.render,t),this.changed())},e.prototype.setSource=function(t){this.set(nn,t)},e}(function(t){function e(e){t.call(this);var i=F({},e);i[Ji]=void 0!==e.opacity?e.opacity:1,i[Zi]=void 0===e.visible||e.visible,i[Qi]=e.zIndex,i[tn]=void 0!==e.maxResolution?e.maxResolution:1/0,i[en]=void 0!==e.minResolution?e.minResolution:0,this.setProperties(i),this.state_=null,this.type}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getType=function(){return this.type},e.prototype.getLayerState=function(){var t=this.state_||{layer:this,managed:!0};return t.opacity=h(this.getOpacity(),0,1),t.sourceState=this.getSourceState(),t.visible=this.getVisible(),t.extent=this.getExtent(),t.zIndex=this.getZIndex()||0,t.maxResolution=this.getMaxResolution(),t.minResolution=Math.max(this.getMinResolution(),0),this.state_=t,t},e.prototype.getLayersArray=function(t){return n()},e.prototype.getLayerStatesArray=function(t){return n()},e.prototype.getExtent=function(){return this.get($i)},e.prototype.getMaxResolution=function(){return this.get(tn)},e.prototype.getMinResolution=function(){return this.get(en)},e.prototype.getOpacity=function(){return this.get(Ji)},e.prototype.getSourceState=function(){return n()},e.prototype.getVisible=function(){return this.get(Zi)},e.prototype.getZIndex=function(){return this.get(Qi)},e.prototype.setExtent=function(t){this.set($i,t)},e.prototype.setMaxResolution=function(t){this.set(tn,t)},e.prototype.setMinResolution=function(t){this.set(en,t)},e.prototype.setOpacity=function(t){this.set(Ji,t)},e.prototype.setVisible=function(t){this.set(Zi,t)},e.prototype.setZIndex=function(t){this.set(Qi,t)},e}(ft)),hn="vector",un=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.checksum_=void 0};un.prototype.clone=function(){var t=this.getColor();return new un({color:Array.isArray(t)?t.slice():t||void 0})},un.prototype.getColor=function(){return this.color_},un.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},un.prototype.getChecksum=function(){if(void 0===this.checksum_){var t=this.color_;t?Array.isArray(t)||"string"==typeof t?this.checksum_="f"+_(t):this.checksum_=o(this.color_):this.checksum_="f-"}return this.checksum_};var ln=un,cn=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.lineCap_=e.lineCap,this.lineDash_=void 0!==e.lineDash?e.lineDash:null,this.lineDashOffset_=e.lineDashOffset,this.lineJoin_=e.lineJoin,this.miterLimit_=e.miterLimit,this.width_=e.width,this.checksum_=void 0};cn.prototype.clone=function(){var t=this.getColor();return new cn({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})},cn.prototype.getColor=function(){return this.color_},cn.prototype.getLineCap=function(){return this.lineCap_},cn.prototype.getLineDash=function(){return this.lineDash_},cn.prototype.getLineDashOffset=function(){return this.lineDashOffset_},cn.prototype.getLineJoin=function(){return this.lineJoin_},cn.prototype.getMiterLimit=function(){return this.miterLimit_},cn.prototype.getWidth=function(){return this.width_},cn.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},cn.prototype.setLineCap=function(t){this.lineCap_=t,this.checksum_=void 0},cn.prototype.setLineDash=function(t){this.lineDash_=t,this.checksum_=void 0},cn.prototype.setLineDashOffset=function(t){this.lineDashOffset_=t,this.checksum_=void 0},cn.prototype.setLineJoin=function(t){this.lineJoin_=t,this.checksum_=void 0},cn.prototype.setMiterLimit=function(t){this.miterLimit_=t,this.checksum_=void 0},cn.prototype.setWidth=function(t){this.width_=t,this.checksum_=void 0},cn.prototype.getChecksum=function(){return void 0===this.checksum_&&(this.checksum_="s",this.color_?"string"==typeof this.color_?this.checksum_+=this.color_:this.checksum_+=o(this.color_):this.checksum_+="-",this.checksum_+=","+(void 0!==this.lineCap_?this.lineCap_.toString():"-")+","+(this.lineDash_?this.lineDash_.toString():"-")+","+(void 0!==this.lineDashOffset_?this.lineDashOffset_:"-")+","+(void 0!==this.lineJoin_?this.lineJoin_:"-")+","+(void 0!==this.miterLimit_?this.miterLimit_.toString():"-")+","+(void 0!==this.width_?this.width_.toString():"-")),this.checksum_};var pn=cn,fn=function(t){var e=t||{};this.geometry_=null,this.geometryFunction_=yn,void 0!==e.geometry&&this.setGeometry(e.geometry),this.fill_=void 0!==e.fill?e.fill:null,this.image_=void 0!==e.image?e.image:null,this.renderer_=void 0!==e.renderer?e.renderer:null,this.stroke_=void 0!==e.stroke?e.stroke:null,this.text_=void 0!==e.text?e.text:null,this.zIndex_=e.zIndex};fn.prototype.clone=function(){var t=this.getGeometry();return t&&"object"==typeof t&&(t=t.clone()),new fn({geometry:t,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})},fn.prototype.getRenderer=function(){return this.renderer_},fn.prototype.setRenderer=function(t){this.renderer_=t},fn.prototype.getGeometry=function(){return this.geometry_},fn.prototype.getGeometryFunction=function(){return this.geometryFunction_},fn.prototype.getFill=function(){return this.fill_},fn.prototype.setFill=function(t){this.fill_=t},fn.prototype.getImage=function(){return this.image_},fn.prototype.setImage=function(t){this.image_=t},fn.prototype.getStroke=function(){return this.stroke_},fn.prototype.setStroke=function(t){this.stroke_=t},fn.prototype.getText=function(){return this.text_},fn.prototype.setText=function(t){this.text_=t},fn.prototype.getZIndex=function(){return this.zIndex_},fn.prototype.setGeometry=function(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=yn,this.geometry_=t},fn.prototype.setZIndex=function(t){this.zIndex_=t};var dn=null;function _n(t,e){if(!dn){var i=new ln({color:"rgba(255,255,255,0.4)"}),n=new pn({color:"#3399CC",width:1.25});dn=[new fn({image:new ot({fill:i,stroke:n,radius:5}),fill:i,stroke:n})]}return dn}function gn(){var t={},e=[255,255,255,1],i=[0,153,255,1];return t[ce]=[new fn({fill:new ln({color:[255,255,255,.5]})})],t[de]=t[ce],t[ue]=[new fn({stroke:new pn({color:e,width:5})}),new fn({stroke:new pn({color:i,width:3})})],t[fe]=t[ue],t[ge]=t[ce].concat(t[ue]),t[he]=[new fn({image:new ot({radius:6,fill:new ln({color:i}),stroke:new pn({color:e,width:1.5})}),zIndex:1/0})],t[pe]=t[he],t[_e]=t[ce].concat(t[ue],t[he]),t}function yn(t){return t.getGeometry()}var vn=fn,mn="renderOrder",Cn=function(t){function e(e){var i=e||{},n=F({},i);delete n.style,delete n.renderBuffer,delete n.updateWhileAnimating,delete n.updateWhileInteracting,t.call(this,n),this.declutter_=void 0!==i.declutter&&i.declutter,this.renderBuffer_=void 0!==i.renderBuffer?i.renderBuffer:100,this.style_=null,this.styleFunction_=void 0,this.setStyle(i.style),this.updateWhileAnimating_=void 0!==i.updateWhileAnimating&&i.updateWhileAnimating,this.updateWhileInteracting_=void 0!==i.updateWhileInteracting&&i.updateWhileInteracting,this.renderMode_=i.renderMode||hn,this.type=Hi}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDeclutter=function(){return this.declutter_},e.prototype.setDeclutter=function(t){this.declutter_=t},e.prototype.getRenderBuffer=function(){return this.renderBuffer_},e.prototype.getRenderOrder=function(){return this.get(mn)},e.prototype.getStyle=function(){return this.style_},e.prototype.getStyleFunction=function(){return this.styleFunction_},e.prototype.getUpdateWhileAnimating=function(){return this.updateWhileAnimating_},e.prototype.getUpdateWhileInteracting=function(){return this.updateWhileInteracting_},e.prototype.setRenderOrder=function(t){this.set(mn,t)},e.prototype.setStyle=function(t){this.style_=void 0!==t?t:_n,this.styleFunction_=null===t?void 0:function(t){var e;if("function"==typeof t)e=t;else{var i;if(Array.isArray(t))i=t;else a("function"==typeof t.getZIndex,41),i=[t];e=function(){return i}}return e}(this.style_),this.changed()},e.prototype.getRenderMode=function(){return this.renderMode_},e}(an);Cn.prototype.getSource;var xn=Cn,wn="arraybuffer",En="json",Fn="text",Sn="xml";function kn(t,e){return function(t,e,i,n){return function(r,o,s){var a=new XMLHttpRequest;a.open("GET","function"==typeof t?t(r,o,s):t,!0),e.getType()==wn&&(a.responseType="arraybuffer"),a.onload=function(t){if(!a.status||a.status>=200&&a.status<300){var r,o=e.getType();o==En||o==Fn?r=a.responseText:o==Sn?(r=a.responseXML)||(r=(new DOMParser).parseFromString(a.responseText,"application/xml")):o==wn&&(r=a.response),r?i.call(this,e.readFeatures(r,{featureProjection:s}),e.readProjection(r),e.getLastExtent()):n.call(this)}else n.call(this)}.bind(this),a.onerror=function(){n.call(this)}.bind(this),a.send()}}(t,e,(function(t,e){"function"==typeof this.addFeatures&&this.addFeatures(t)}),j)}function Mn(t,e){return[[-1/0,-1/0,1/0,1/0]]}function In(t){return t?Array.isArray(t)?function(e){return t}:"function"==typeof t?t:function(e){return[t]}:null}var Pn=function(t){function e(e){t.call(this),this.projection_=Ve(e.projection),this.attributions_=In(e.attributions),this.attributionsCollapsible_=void 0===e.attributionsCollapsible||e.attributionsCollapsible,this.loading=!1,this.state_=void 0!==e.state?e.state:sn,this.wrapX_=void 0!==e.wrapX&&e.wrapX}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getAttributions=function(){return this.attributions_},e.prototype.getAttributionsCollapsible=function(){return this.attributionsCollapsible_},e.prototype.getProjection=function(){return this.projection_},e.prototype.getResolutions=function(){return n()},e.prototype.getState=function(){return this.state_},e.prototype.getWrapX=function(){return this.wrapX_},e.prototype.refresh=function(){this.changed()},e.prototype.setAttributions=function(t){this.attributions_=In(t),this.changed()},e.prototype.setState=function(t){this.state_=t,this.changed()},e}(ft),Rn="addfeature",bn="changefeature",Dn="clear",An="removefeature",Gn=i("A1R+"),On=i.n(Gn),Ln=function(t){this.rbush_=On()(t,void 0),this.items_={}};Ln.prototype.insert=function(t,e){var i={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3],value:e};this.rbush_.insert(i),this.items_[o(e)]=i},Ln.prototype.load=function(t,e){for(var i=new Array(e.length),n=0,r=e.length;n2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]];if(0===o[1])t=[[i,i,i,i]];else{var s=[-1*o[1],o[0]],a=o[0]/o[1],h=(r[0]+a*(n[1]-r[1])-n[0])/(s[0]-s[1]*a),u=[h*s[0],h*s[1]];t=[[[i[0]-u[0],i[1]-u[1]],[n[0]-u[0],n[1]-u[1]],[n[0]+u[0],n[1]+u[1]],[i[0]+u[0],i[1]+u[1]]]]}}else t=[t];var l=e;return l?l.setCoordinates(t):l=new jn(t),l};else if(this.type_===ve)this.minPoints_=3,this.maxPoints_=3,r=function(t,e){if(t.length>2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]],s=[i[0]+.5*o[0],i[1]+.5*o[1]];if(0===o[1])t=[[i,i,i,i]];else{var a=[-1*o[1],o[0]],h=o[0]/o[1],u=(r[0]+h*(n[1]-r[1])-n[0])/(a[0]-a[1]*h),l=[u*a[0],u*a[1]];t=[[[i[0],i[1]],[s[0]-l[0],s[1]-l[1]],[n[0],n[1]],[s[0]+l[0],s[1]+l[1]]]]}}else t=[t];var c=e;return c?c.setCoordinates(t):c=new qn(t),c};else{var o,s=this.mode_;s===Bn?o=Di:s===Nn?o=Ri:s===Wn&&(o=Wi),r=function(t,e){var i=e;return i?s===Wn?t[0].length?i.setCoordinates([t[0].concat([t[0][0]])]):i.setCoordinates([]):i.setCoordinates(t):i=new o(t),i}}this.geometryFunction_=r,this.dragVertexDelay_=void 0!==e.dragVertexDelay?e.dragVertexDelay:500,this.finishCoordinate_=null,this.sketchFeature_=null,this.sketchPoint_=null,this.sketchCoords_=null,this.sketchLine_=null,this.sketchLineCoords_=null,this.squaredClickTolerance_=e.clickTolerance?e.clickTolerance*e.clickTolerance:36,this.overlay_=new xn({source:new Yn({useSpatialIndex:!1,wrapX:!!e.wrapX&&e.wrapX}),style:e.style?e.style:(n=gn(),function(t,e){return n[t.getGeometry().getType()]}),updateWhileInteracting:!0}),this.geometryName_=e.geometryName,this.condition_=e.condition?e.condition:bt,this.freehandCondition_,e.freehand?this.freehandCondition_=Pt:this.freehandCondition_=e.freehandCondition?e.freehandCondition:Dt,G(this,pt(Ki),this.updateState_,this)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setMap=function(e){t.prototype.setMap.call(this,e),this.updateState_()},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleEvent=function(e){e.originalEvent.type===z&&e.preventDefault(),this.freehand_=this.mode_!==Bn&&this.freehandCondition_(e);var i=e.type===xt,n=!0;!this.freehand_&&this.lastDragTime_&&e.type===Ct&&(Date.now()-this.lastDragTime_>=this.dragVertexDelay_?(this.downPx_=e.pixel,this.shouldHandle_=!this.freehand_,i=!0):this.lastDragTime_=void 0,this.shouldHandle_&&void 0!==this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0));return this.freehand_&&e.type===Ct&&null!==this.sketchFeature_?(this.addToDrawing_(e),n=!1):this.freehand_&&e.type===wt?n=!1:i?(n=e.type===xt)&&this.freehand_?n=this.handlePointerMove_(e):("mouse"==e.pointerEvent.pointerType||e.type===Ct&&void 0===this.downTimeout_)&&this.handlePointerMove_(e):e.type===mt&&(n=!1),t.prototype.handleEvent.call(this,e)&&n},e.prototype.handleDownEvent=function(t){return this.shouldHandle_=!this.freehand_,this.freehand_?(this.downPx_=t.pixel,this.finishCoordinate_||this.startDrawing_(t),!0):!!this.condition_(t)&&(this.lastDragTime_=Date.now(),this.downTimeout_=setTimeout(function(){this.handlePointerMove_(new Ft(xt,t.map,t.pointerEvent,!1,t.frameState))}.bind(this),this.dragVertexDelay_),this.downPx_=t.pixel,!0)},e.prototype.handleUpEvent=function(t){var e=!0;this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0),this.handlePointerMove_(t);var i=this.mode_===Vn;return this.shouldHandle_?(this.finishCoordinate_?this.freehand_||i?this.finishDrawing():this.atFinish_(t)?this.finishCondition_(t)&&this.finishDrawing():this.addToDrawing_(t):(this.startDrawing_(t),this.mode_===Bn&&this.finishDrawing()),e=!1):this.freehand_&&(this.finishCoordinate_=null,this.abortDrawing_()),!e&&this.stopClick_&&t.stopPropagation(),e},e.prototype.handlePointerMove_=function(t){if(this.downPx_&&(!this.freehand_&&this.shouldHandle_||this.freehand_&&!this.shouldHandle_)){var e=this.downPx_,i=t.pixel,n=e[0]-i[0],r=e[1]-i[1],o=n*n+r*r;if(this.shouldHandle_=this.freehand_?o>this.squaredClickTolerance_:o<=this.squaredClickTolerance_,!this.shouldHandle_)return!0}return this.finishCoordinate_?this.modifyDrawing_(t):this.createOrUpdateSketchPoint_(t),!0},e.prototype.atFinish_=function(t){var e=!1;if(this.sketchFeature_){var i=!1,n=[this.finishCoordinate_];if(this.mode_===Nn)i=this.sketchCoords_.length>this.minPoints_;else if(this.mode_===Wn){var r=this.sketchCoords_;i=r[0].length>this.minPoints_,n=[r[0][0],r[0][r[0].length-2]]}if(i)for(var o=t.map,s=0,a=n.length;s=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),this.geometryFunction_(i,r)):this.mode_===Wn&&((i=this.sketchCoords_[0]).length>=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),e&&(this.finishCoordinate_=i[0]),this.geometryFunction_(this.sketchCoords_,r)),this.updateSketchFeatures_(),e&&this.finishDrawing()},e.prototype.removeLastPoint=function(){if(this.sketchFeature_){var t,e=this.sketchFeature_.getGeometry();this.mode_===Nn?((t=this.sketchCoords_).splice(-2,1),this.geometryFunction_(t,e),t.length>=2&&(this.finishCoordinate_=t[t.length-2].slice())):this.mode_===Wn&&((t=this.sketchCoords_[0]).splice(-2,1),this.sketchLine_.getGeometry().setCoordinates(t),this.geometryFunction_(this.sketchCoords_,e)),0===t.length&&(this.finishCoordinate_=null),this.updateSketchFeatures_()}},e.prototype.finishDrawing=function(){var t=this.abortDrawing_();if(t){var e=this.sketchCoords_,i=t.getGeometry();this.mode_===Nn?(e.pop(),this.geometryFunction_(e,i)):this.mode_===Wn&&(e[0].pop(),this.geometryFunction_(e,i),e=i.getCoordinates()),this.type_===pe?t.setGeometry(new Ai([e])):this.type_===fe?t.setGeometry(new bi([e])):this.type_===de&&t.setGeometry(new Vi([e])),this.dispatchEvent(new Hn(Un,t)),this.features_&&this.features_.push(t),this.source_&&this.source_.addFeature(t)}},e.prototype.abortDrawing_=function(){this.finishCoordinate_=null;var t=this.sketchFeature_;return t&&(this.sketchFeature_=null,this.sketchPoint_=null,this.sketchLine_=null,this.overlay_.getSource().clear(!0)),t},e.prototype.extend=function(t){var e=t.getGeometry();this.sketchFeature_=t,this.sketchCoords_=e.getCoordinates();var i=this.sketchCoords_[this.sketchCoords_.length-1];this.finishCoordinate_=i.slice(),this.sketchCoords_.push(i.slice()),this.updateSketchFeatures_(),this.dispatchEvent(new Hn(Kn,this.sketchFeature_))},e.prototype.updateSketchFeatures_=function(){var t=[];this.sketchFeature_&&t.push(this.sketchFeature_),this.sketchLine_&&t.push(this.sketchLine_),this.sketchPoint_&&t.push(this.sketchPoint_);var e=this.overlay_.getSource();e.clear(!0),e.addFeatures(t)},e.prototype.updateState_=function(){var t=this.getMap(),e=this.getActive();t&&e||this.abortDrawing_(),this.overlay_.setMap(e?t:null)},e}(Ui),Zn=Vue.resource("/api/v1/volumes{/id}/export-area"),$n="modifystart",Qn="modifyend",tr=function(t){function e(e,i,n){t.call(this,e),this.features=i,this.mapBrowserEvent=n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(B);function er(t,e){return t.index-e.index}function ir(t,e){var i,n,r=e.geometry;if(r.getType()===ge){var o=r;if(1===e.index){var s=Mt(o.getCenter(),t),a=Math.sqrt(s)-o.getRadius();return a*a}}return i=t,n=e.segment,Mt(i,St(i,n))}function nr(t,e){var i=e.geometry;return i.getType()===ge&&1===e.index||i.getType()===ve||i.getType()===ye?i.getClosestPoint(t):St(t,e.segment)}var rr=function(t){function e(e){var i,n;if(t.call(this,e),this.condition_=e.condition?e.condition:At,this.defaultDeleteCondition_=function(t){return function(t){var e=t.originalEvent;return e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey}(t)&&function(t){return t.type==vt}(t)},this.deleteCondition_=e.deleteCondition?e.deleteCondition:this.defaultDeleteCondition_,this.insertVertexCondition_=e.insertVertexCondition?e.insertVertexCondition:Pt,this.vertexFeature_=null,this.vertexSegments_=null,this.lastPixel_=[0,0],this.ignoreNextSingleClick_=!1,this.modified_=!1,this.rBush_=new Tn,this.pixelTolerance_=void 0!==e.pixelTolerance?e.pixelTolerance:10,this.snappedToVertex_=!1,this.changingFeature_=!1,this.dragSegments_=[],this.overlay_=new xn({source:new Yn({useSpatialIndex:!1,wrapX:!!e.wrapX}),style:e.style?e.style:(i=gn(),function(t,e){return i[he]}),updateWhileAnimating:!0,updateWhileInteracting:!0}),this.SEGMENT_WRITERS_={Point:this.writePointGeometry_,LineString:this.writeLineStringGeometry_,LinearRing:this.writeLineStringGeometry_,Polygon:this.writePolygonGeometry_,MultiPoint:this.writeMultiPointGeometry_,MultiLineString:this.writeMultiLineStringGeometry_,MultiPolygon:this.writeMultiPolygonGeometry_,Rectangle:this.writePolygonGeometry_,Ellipse:this.writePolygonGeometry_,Circle:this.writeCircleGeometry_,GeometryCollection:this.writeGeometryCollectionGeometry_},this.source_=null,e.source?(this.source_=e.source,n=new gt(this.source_.getFeatures()),G(this.source_,Rn,this.handleSourceAdd_,this),G(this.source_,An,this.handleSourceRemove_,this)):n=e.features,!n)throw new Error("The modify interaction requires features or a source");this.features_=n,this.features_.forEach(this.addFeature_.bind(this)),G(this.features_,st,this.handleFeatureAdd_,this),G(this.features_,at,this.handleFeatureRemove_,this),this.lastPointerEvent_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.addFeature_=function(t){var e=t.getGeometry();e&&e.getType()in this.SEGMENT_WRITERS_&&this.SEGMENT_WRITERS_[e.getType()].call(this,t,e);var i=this.getMap();i&&i.isRendered()&&this.getActive()&&this.handlePointerAtPixel_(this.lastPixel_,i),G(t,W,this.handleFeatureChange_,this)},e.prototype.willModifyFeatures_=function(t){this.modified_||(this.modified_=!0,this.dispatchEvent(new tr($n,this.features_,t)))},e.prototype.removeFeature_=function(t){this.removeFeatureSegmentData_(t),this.vertexFeature_&&0===this.features_.getLength()&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),L(t,W,this.handleFeatureChange_,this)},e.prototype.removeFeatureSegmentData_=function(t){var e=this.rBush_,i=[];e.forEach((function(e){t===e.feature&&i.push(e)}));for(var n=i.length-1;n>=0;--n)e.remove(i[n])},e.prototype.setActive=function(e){this.vertexFeature_&&!e&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),t.prototype.setActive.call(this,e)},e.prototype.setMap=function(e){this.overlay_.setMap(e),t.prototype.setMap.call(this,e)},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleSourceAdd_=function(t){t.feature&&this.features_.push(t.feature)},e.prototype.handleSourceRemove_=function(t){t.feature&&this.features_.remove(t.feature)},e.prototype.handleFeatureAdd_=function(t){this.addFeature_(t.element)},e.prototype.handleFeatureChange_=function(t){if(!this.changingFeature_){var e=t.target;this.removeFeature_(e),this.addFeature_(e)}},e.prototype.handleFeatureRemove_=function(t){var e=t.element;this.removeFeature_(e)},e.prototype.writePointGeometry_=function(t,e){var i=e.getCoordinates(),n={feature:t,geometry:e,segment:[i,i]};this.rBush_.insert(e.getExtent(),n)},e.prototype.writeMultiPointGeometry_=function(t,e){for(var i=e.getCoordinates(),n=0,r=i.length;n=0;--_)this.insertVertex_.apply(this,n[_])}return!!this.vertexFeature_},e.prototype.handleUpEvent=function(t){for(var e=this.dragSegments_.length-1;e>=0;--e){var i=this.dragSegments_[e][0],n=i.geometry;if(n.getType()===ye||n.getType()===ve)this.features_.remove(i.feature),this.features_.push(i.feature);else if(n.getType()===ge){var r=n.getCenter(),o=i.featureSegments[0],s=i.featureSegments[1];o.segment[0]=o.segment[1]=r,s.segment[0]=s.segment[1]=r,this.rBush_.update(Ut(r),o),this.rBush_.update(n.getExtent(),s)}else this.rBush_.update(jt(i.segment),i)}return this.modified_&&(this.dispatchEvent(new tr(Qn,this.features_,t)),this.modified_=!1),!1},e.prototype.handlePointerMove_=function(t){this.lastPixel_=t.pixel,this.handlePointerAtPixel_(t.pixel,t.map)},e.prototype.handlePointerAtPixel_=function(t,e){var i,n,r,s=e.getCoordinateFromPixel(t),a=(i=Ut(s),n=e.getView().getResolution()*this.pixelTolerance_,r?(r[0]=i[0]-n,r[1]=i[1]-n,r[2]=i[2]+n,r[3]=i[3]+n,r):[i[0]-n,i[1]-n,i[2]+n,i[3]+n]),h=this.rBush_.getInExtent(a);if(h.length>0){h.sort((function(t,e){return ir(s,t)-ir(s,e)}));var u=h[0],l=u.segment,c=nr(s,u),p=e.getPixelFromCoordinate(c),f=It(t,p);if(f<=this.pixelTolerance_){var d={};if(u.geometry.getType()===ge&&1===u.index)this.snappedToVertex_=!0,this.createOrUpdateVertexFeature_(c);else{var _=e.getPixelFromCoordinate(l[0]),g=e.getPixelFromCoordinate(l[1]),y=Mt(p,_),v=Mt(p,g);f=Math.sqrt(Math.min(y,v)),this.snappedToVertex_=f<=this.pixelTolerance_,this.snappedToVertex_&&(c=y>v?l[1]:l[0]),this.createOrUpdateVertexFeature_(c);for(var m=1,C=h.length;m=0;--r)c=o((l=(i=p[r])[0]).feature),l.depth&&(c+="-"+l.depth.join("-")),c in f||(f[c]={}),0===i[1]?(f[c].right=l,f[c].index=l.index):1==i[1]&&(f[c].left=l,f[c].index=l.index+1);for(c in f){switch(u=f[c].right,a=f[c].left,(h=(s=f[c].index)-1)<0&&(h=0),t=e=(n=(l=void 0!==a?a:u).geometry).getCoordinates(),d=!1,n.getType()){case fe:e[l.depth[0]].length>2&&(e[l.depth[0]].splice(s,1),d=!0);break;case ue:e.length>2&&(e.splice(s,1),d=!0);break;case de:t=t[l.depth[1]];case ce:(t=t[l.depth[0]]).length>4&&(s==t.length-1&&(s=0),t.splice(s,1),d=!0,0===s&&(t.pop(),t.push(t[0]),h=t.length-1))}if(d){this.setGeometryCoordinates_(n,e);var _=[];if(void 0!==a&&(this.rBush_.remove(a),_.push(a.segment[0])),void 0!==u&&(this.rBush_.remove(u),_.push(u.segment[1])),void 0!==a&&void 0!==u){var g={depth:l.depth,feature:l.feature,geometry:l.geometry,index:h,segment:_};this.rBush_.insert(jt(g.segment),g)}this.updateSegmentIndices_(n,s,l.depth,-1),this.vertexFeature_&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),p.length=0}}return d},e.prototype.setGeometryCoordinates_=function(t,e){this.changingFeature_=!0,t.setCoordinates(e),this.changingFeature_=!1},e.prototype.updateSegmentIndices_=function(t,e,i,n){this.rBush_.forEachInExtent(t.getExtent(),(function(r){r.geometry===t&&(void 0===i||void 0===r.depth||function(t,e){var i=t.length;if(i!==e.length)return!1;for(var n=0;ne&&(r.index+=n)}))},e}(Ui),or=biigle.$require("events"),sr=biigle.$require("messages").handleErrorResponse,ar=biigle.$require("annotations.components.settingsTabPlugins");ar&&(ar.exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null,volumeId:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},layer:function(){return new xn({source:new Yn({features:new gt}),style:[new vn({stroke:new pn({color:"white",width:4}),image:new ot({radius:6,fill:new ln({color:"#666666"}),stroke:new pn({color:"white",width:2,lineDash:[2]})})}),new vn({stroke:new pn({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new Jn({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(t,e){t.length>1&&(t=[t[0],[t[0][0],t[1][1]],t[1],[t[1][0],t[0][1]]]);var i=e;return i?i.setCoordinates([t]):i=new jn([t]),i}})},modifyInteraction:function(){return new rr({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:Rt})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){var t=this;if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),Zn.delete({id:this.volumeId}).then((function(){return t.exportArea=null})).catch((function(t){e.addFeature(i),sr(t)}))}},updateCurrentImage:function(t,e){this.currentImage=e},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var t=this.currentImage.tiled?0:this.height,e=new jn([[[this.exportArea[0],t-this.exportArea[1]],[this.exportArea[0],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[1]]]]);this.layer.getSource().addFeature(new yt({geometry:e}))}},handleModifyend:function(t){this.updateExportArea(t.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(t){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),this.updateExportArea(t.feature).catch((function(){e.clear(),i&&e.addFeature(i)}))},updateExportArea:function(t){var e=this,i=t.getGeometry().getCoordinates()[0],n=this.currentImage.tiled?0:this.height;i=[i[0][0],n-i[0][1],i[2][0],n-i[2][1]].map(Math.round);var r=Zn.save({id:this.volumeId},{coordinates:i}).then((function(){return e.exportArea=i}));return r.catch(sr),r},extendMap:function(t){t.addLayer(this.layer),t.addInteraction(this.drawInteraction),t.addInteraction(this.modifyInteraction)}},watch:{opacity:function(t,e){t<1?this.settings.set("exportAreaOpacity",t):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(t)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.volumeId=biigle.$require("annotations.volumeId"),this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend),or.$on("images.change",this.updateCurrentImage),or.$on("annotations.map.init",this.extendMap)}})},"A1R+":function(t,e,i){"use strict";t.exports=r,t.exports.default=r;var n=i("YcpW");function r(t,e){if(!(this instanceof r))return new r(t,e);this._maxEntries=Math.max(4,t||9),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),e&&this._initFormat(e),this.clear()}function o(t,e,i){if(!i)return e.indexOf(t);for(var n=0;n=t.minX&&e.maxY>=t.minY}function _(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function g(t,e,i,r,o){for(var s,a=[e,i];a.length;)(i=a.pop())-(e=a.pop())<=r||(s=e+Math.ceil((i-e)/r/2)*r,n(t,s,e,i,o),a.push(e,s,s,i))}r.prototype={all:function(){return this._all(this.data,[])},search:function(t){var e=this.data,i=[],n=this.toBBox;if(!d(t,e))return i;for(var r,o,s,a,h=[];e;){for(r=0,o=e.children.length;r=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(r,o,e)},_split:function(t,e){var i=t[e],n=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,n);var o=this._chooseSplitIndex(i,r,n),a=_(i.children.splice(o,i.children.length-o));a.height=i.height,a.leaf=i.leaf,s(i,this.toBBox),s(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(i,a)},_splitRoot:function(t,e){this.data=_([t,e]),this.data.height=t.height+1,this.data.leaf=!1,s(this.data,this.toBBox)},_chooseSplitIndex:function(t,e,i){var n,r,o,s,h,u,l,p,f,d,_,g,y,v;for(u=l=1/0,n=e;n<=i-e;n++)r=a(t,0,n,this.toBBox),o=a(t,n,i,this.toBBox),f=r,d=o,_=void 0,g=void 0,y=void 0,v=void 0,_=Math.max(f.minX,d.minX),g=Math.max(f.minY,d.minY),y=Math.min(f.maxX,d.maxX),v=Math.min(f.maxY,d.maxY),s=Math.max(0,y-_)*Math.max(0,v-g),h=c(r)+c(o),s=e;r--)o=t.children[r],h(l,t.leaf?s(o):o),c+=p(l);return c},_adjustParentBBoxes:function(t,e,i){for(var n=i;n>=0;n--)h(e[n],t)},_condense:function(t){for(var e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children).splice(e.indexOf(t[i]),1):this.clear():s(t[i],this.toBBox)},_initFormat:function(t){var e=["return a"," - b",";"];this.compareMinX=new Function("a","b",e.join(t[0])),this.compareMinY=new Function("a","b",e.join(t[1])),this.toBBox=new Function("a","return {minX: a"+t[0]+", minY: a"+t[1]+", maxX: a"+t[2]+", maxY: a"+t[3]+"};")}}},YcpW:function(t,e,i){t.exports=function(){"use strict";function t(t,e,i){var n=t[e];t[e]=t[i],t[i]=n}function e(t,e){return te?1:0}return function(i,n,r,o,s){!function e(i,n,r,o,s){for(;o>r;){if(o-r>600){var a=o-r+1,h=n-r+1,u=Math.log(a),l=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*l*(a-l)/a)*(h-a/2<0?-1:1),p=Math.max(r,Math.floor(n-h*l/a+c)),f=Math.min(o,Math.floor(n+(a-h)*l/a+c));e(i,n,p,f,s)}var d=i[n],_=r,g=o;for(t(i,r,n),s(i[o],d)>0&&t(i,r,o);_0;)g--}0===s(i[r],d)?t(i,r,g):(g++,t(i,g,o)),g<=n&&(r=g+1),n<=g&&(o=g-1)}}(i,n,r||0,o||i.length-1,s||e)}}()}}); \ No newline at end of file diff --git a/src/public/assets/scripts/annotations.js.LICENSE.txt b/src/public/assets/scripts/annotations.js.LICENSE.txt new file mode 100644 index 000000000..07eaadcb5 --- /dev/null +++ b/src/public/assets/scripts/annotations.js.LICENSE.txt @@ -0,0 +1,6 @@ +/** + * @license + * Latitude/longitude spherical geodesy formulae taken from + * http://www.movable-type.co.uk/scripts/latlong.html + * Licensed under CC-BY-3.0. + */ diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index a360741d7..1fcee3ea9 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -biigle.$viewModel("project-report-form",function(e){var t=biigle.$require("reports.projectId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","only_labels"],VideoAnnotations:["separate_label_trees","only_labels"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.projectReports"))}}})}),biigle.$viewModel("video-report-form",function(e){var t=biigle.$require("reports.videoId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{selectedType:"VideoAnnotations",selectedVariant:"Csv",allowedOptions:{VideoAnnotations:["separate_label_trees","only_labels"]}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.videoReports"))}}})}),biigle.$viewModel("volume-report-form",function(e){var t=biigle.$require("reports.volumeId");new Vue({el:e,mixins:[biigle.$require("reports.mixins.reportForm")],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","annotation_session_id","only_labels"]},options:{annotation_session_id:null}},methods:{submit:function(){this.request(t,biigle.$require("reports.api.volumeReports"))}}})}),biigle.$declare("reports.api.projectReports",Vue.resource("/api/v1/projects{/id}/reports")),biigle.$declare("reports.api.videoReports",Vue.resource("/api/v1/videos{/id}/reports")),biigle.$declare("reports.api.volumeReports",Vue.resource("/api/v1/volumes{/id}/reports")),biigle.$component("reports.mixins.reportForm",{mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:biigle.$require("labelTrees.components.labelTrees")},data:{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,only_labels:[],aggregate_child_labels:!1}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach(function(t){Array.prototype.push.apply(e,t.labels)}),e},selectedLabels:function(){return this.flatLabels.filter(function(e){return e.selected})},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach(function(t){var r=t.name.split("\\");e.hasOwnProperty(r[0])||(e[r[0]]=[]),e[r[0]].push(r[1])}),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach(function(t){e[t.name]=t.id}),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e={};return this.allowedOptions[this.selectedType].forEach(function(t){e[t]=this.options[t]},this),e.type_id=this.selectedReportTypeId,e}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:biigle.$require("messages.store").handleErrorResponse(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map(function(e){return e.id})},hasOnlyLabels:function(e){e||this.flatLabels.forEach(function(e){e.selected=!1})}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0],this.labelTrees=biigle.$require("reports.labelTrees")}}); \ No newline at end of file +!function(e){var r={};function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)t.d(n,o,function(r){return e[r]}.bind(null,o));return n},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p="/",t(t.s=0)}({0:function(e,r,t){t("Or9D"),e.exports=t("zcrr")},Or9D:function(e,r){},zcrr:function(e,r){}}); \ No newline at end of file diff --git a/src/public/assets/styles/main.css b/src/public/assets/styles/main.css index cedb8ade2..b876bf18d 100644 --- a/src/public/assets/styles/main.css +++ b/src/public/assets/styles/main.css @@ -1 +1 @@ -.request-labels-well{height:500px} +.request-labels-well{height:500px} \ No newline at end of file diff --git a/src/public/mix-manifest.json b/src/public/mix-manifest.json new file mode 100644 index 000000000..01f4744cb --- /dev/null +++ b/src/public/mix-manifest.json @@ -0,0 +1,5 @@ +{ + "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=ddf029b7386f1c6772d0", + "/assets/scripts/main.js": "/assets/scripts/main.js?id=9e1e0df9e6e77e9854e2", + "/assets/styles/main.css": "/assets/styles/main.css?id=9d45536e01d0a0b3c70b" +} diff --git a/src/resources/assets/js/annotations/annotations.js b/src/resources/assets/js/annotations/annotations.js new file mode 100644 index 000000000..5c2e76c34 --- /dev/null +++ b/src/resources/assets/js/annotations/annotations.js @@ -0,0 +1 @@ +import './settingsTabPlugin'; diff --git a/src/resources/assets/js/annotations/api/volumes.js b/src/resources/assets/js/annotations/api/exportArea.js similarity index 68% rename from src/resources/assets/js/annotations/api/volumes.js rename to src/resources/assets/js/annotations/api/exportArea.js index a854cb698..71c1db590 100644 --- a/src/resources/assets/js/annotations/api/volumes.js +++ b/src/resources/assets/js/annotations/api/exportArea.js @@ -1,7 +1,7 @@ /** * Resource for editing the export area of a volume * - * var resource = biigle.$require('reports.api.volumes'); + * let resource = biigle.$require('reports.api.volumes'); * * Get the export area: * resource.get({id: volumeId}).then(...); @@ -13,4 +13,4 @@ * resource.delete({id: columeId}).then(...); * */ -biigle.$declare('reports.api.volumes', Vue.resource('/api/v1/volumes{/id}/export-area')); +export default Vue.resource('/api/v1/volumes{/id}/export-area'); diff --git a/src/resources/assets/js/annotations/components/settingsTabPlugins.js b/src/resources/assets/js/annotations/components/settingsTabPlugins.js deleted file mode 100644 index 3bc2c1498..000000000 --- a/src/resources/assets/js/annotations/components/settingsTabPlugins.js +++ /dev/null @@ -1,235 +0,0 @@ -/** - * The plugin component to edit the export area in the annotation tool. - * - * @type {Object} - */ -biigle.$require('annotations.components.settingsTabPlugins').exportArea = { - props: { - settings: { - type: Object, - required: true, - }, - }, - data: function () { - return { - opacityValue: '1', - currentImage: null, - isEditing: false, - exportArea: null, - }; - }, - computed: { - opacity: function () { - return parseFloat(this.opacityValue); - }, - shown: function () { - return this.opacity > 0; - }, - height: function () { - return this.currentImage ? this.currentImage.height : 0; - }, - hasExportArea: function () { - return this.exportArea !== null; - }, - exportAreaApi: function () { - return biigle.$require('reports.api.volumes'); - }, - volumeId: function () { - return biigle.$require('annotations.volumeId'); - }, - messages: function () { - return biigle.$require('messages.store'); - }, - layer: function () { - return new ol.layer.Vector({ - source: new ol.source.Vector({ - features: new ol.Collection(), - }), - style: [ - new ol.style.Style({ - stroke: new ol.style.Stroke({ - color: 'white', - width: 4 - }), - image: new ol.style.Circle({ - radius: 6, - fill: new ol.style.Fill({ - color: '#666666' - }), - stroke: new ol.style.Stroke({ - color: 'white', - width: 2, - lineDash: [2] - }) - }) - }), - new ol.style.Style({ - stroke: new ol.style.Stroke({ - color: '#666666', - width: 1, - lineDash: [2] - }) - }) - ], - zIndex: 4, - updateWhileAnimating: true, - updateWhileInteracting: true, - }); - }, - drawInteraction: function () { - return new ol.interaction.Draw({ - source: this.layer.getSource(), - type: 'Rectangle', - style: this.layer.getStyle(), - minPoints: 2, - maxPoints: 2, - geometryFunction: function (coordinates, opt_geometry) { - if (coordinates.length > 1) { - coordinates = [ - coordinates[0], - [coordinates[0][0], coordinates[1][1]], - coordinates[1], - [coordinates[1][0], coordinates[0][1]] - ]; - } - var geometry = opt_geometry; - if (geometry) { - geometry.setCoordinates([coordinates]); - } else { - geometry = new ol.geom.Rectangle([coordinates]); - } - return geometry; - } - }); - }, - modifyInteraction: function () { - return new ol.interaction.Modify({ - features: this.layer.getSource().getFeaturesCollection(), - style: this.layer.getStyle(), - deleteCondition: ol.events.condition.never - }); - }, - }, - methods: { - toggleEditing: function () { - this.isEditing = !this.isEditing; - if (this.isEditing) { - this.drawInteraction.setActive(true); - this.modifyInteraction.setActive(true); - } else { - this.drawInteraction.setActive(false); - this.modifyInteraction.setActive(false); - } - }, - deleteArea: function () { - if (this.hasExportArea && confirm('Do you really want to delete the export area?')) { - var self = this; - var source = this.layer.getSource(); - var feature = source.getFeatures()[0]; - source.clear(); - this.exportAreaApi.delete({id: this.volumeId}) - .then(function () { - self.exportArea = null; - }) - .catch(function (response) { - source.addFeature(feature); - self.messages.handleErrorResponse(response); - }); - } - }, - updateCurrentImage: function (id, image) { - this.currentImage = image; - }, - maybeDrawArea: function () { - this.clearSource(); - if (this.exportArea && this.height > 0) { - // Handle coordinates for tiled and regular images differently. - var height = this.currentImage.tiled ? 0 : this.height; - - var geometry = new ol.geom.Rectangle([[ - // Swap y coordinates for OpenLayers. - [this.exportArea[0], height - this.exportArea[1]], - [this.exportArea[0], height - this.exportArea[3]], - [this.exportArea[2], height - this.exportArea[3]], - [this.exportArea[2], height - this.exportArea[1]], - ]]); - this.layer.getSource().addFeature(new ol.Feature({geometry: geometry})); - } - }, - handleModifyend: function (e) { - this.updateExportArea(e.features.item(0)); - }, - clearSource: function () { - this.layer.getSource().clear(); - }, - handleDrawend: function (e) { - var source = this.layer.getSource(); - var oldFeature = source.getFeatures()[0]; - source.clear(); - // Remove the feature again if creating it failed. - this.updateExportArea(e.feature).catch(function () { - source.clear(); - if (oldFeature) { - source.addFeature(oldFeature); - } - }); - }, - updateExportArea: function (feature) { - var self = this; - var coordinates = feature.getGeometry().getCoordinates()[0]; - // Handle coordinates for tiled and regular images differently. - var height = this.currentImage.tiled ? 0 : this.height; - coordinates = [ - coordinates[0][0], height - coordinates[0][1], - coordinates[2][0], height - coordinates[2][1], - ].map(Math.round); - - var promise = this.exportAreaApi.save({id: this.volumeId}, {coordinates: coordinates}) - .then(function () { - self.exportArea = coordinates; - }); - - promise.catch(this.messages.handleErrorResponse); - - return promise; - }, - extendMap: function (map) { - map.addLayer(this.layer); - map.addInteraction(this.drawInteraction); - map.addInteraction(this.modifyInteraction); - }, - }, - watch: { - opacity: function (opacity, oldOpacity) { - if (opacity < 1) { - this.settings.set('exportAreaOpacity', opacity); - } else { - this.settings.delete('exportAreaOpacity'); - } - - this.layer.setOpacity(opacity); - }, - exportArea: function () { - this.maybeDrawArea(); - }, - height: function () { - this.maybeDrawArea(); - }, - }, - created: function () { - if (this.settings.has('exportAreaOpacity')) { - this.opacityValue = this.settings.get('exportAreaOpacity'); - } - - this.exportArea = biigle.$require('annotations.exportArea'); - - this.drawInteraction.setActive(false); - this.modifyInteraction.setActive(false); - this.drawInteraction.on('drawend', this.handleDrawend); - this.modifyInteraction.on('modifyend', this.handleModifyend); - - var events = biigle.$require('events'); - events.$on('images.change', this.updateCurrentImage); - events.$on('annotations.map.init', this.extendMap); - }, -}; diff --git a/src/resources/assets/js/annotations/import.js b/src/resources/assets/js/annotations/import.js new file mode 100644 index 000000000..d8c4a11a5 --- /dev/null +++ b/src/resources/assets/js/annotations/import.js @@ -0,0 +1,3 @@ +export let Events = biigle.$require('events'); +export let handleErrorResponse = biigle.$require('messages').handleErrorResponse; +export let SettingsTabPlugins = biigle.$require('annotations.components.settingsTabPlugins'); diff --git a/src/resources/assets/js/annotations/settingsTabPlugin.js b/src/resources/assets/js/annotations/settingsTabPlugin.js new file mode 100644 index 000000000..4cd243b10 --- /dev/null +++ b/src/resources/assets/js/annotations/settingsTabPlugin.js @@ -0,0 +1,241 @@ +import Circle from '@biigle/ol/style/Circle'; +import Collection from '@biigle/ol/Collection'; +import DrawInteraction from '@biigle/ol/interaction/Draw'; +import ExportAreaApi from './api/exportArea'; +import Feature from '@biigle/ol/Feature'; +import Fill from '@biigle/ol/style/Fill'; +import ModifyInteraction from '@biigle/ol/interaction/Modify'; +import Rectangle from '@biigle/ol/geom/Rectangle'; +import Stroke from '@biigle/ol/style/Stroke'; +import Style from '@biigle/ol/style/Style'; +import VectorLayer from '@biigle/ol/layer/Vector'; +import VectorSource from '@biigle/ol/source/Vector'; +import {Events} from './import'; +import {handleErrorResponse} from './import'; +import {never as neverCondition} from '@biigle/ol/events/condition'; +import {SettingsTabPlugins} from './import'; + +/** + * The plugin component to edit the export area in the annotation tool. + * + * @type {Object} + */ +if (SettingsTabPlugins) { + SettingsTabPlugins.exportArea = { + props: { + settings: { + type: Object, + required: true, + }, + }, + data() { + return { + opacityValue: '1', + currentImage: null, + isEditing: false, + exportArea: null, + volumeId: null, + }; + }, + computed: { + opacity() { + return parseFloat(this.opacityValue); + }, + shown() { + return this.opacity > 0; + }, + height() { + return this.currentImage ? this.currentImage.height : 0; + }, + hasExportArea() { + return this.exportArea !== null; + }, + layer() { + return new VectorLayer({ + source: new VectorSource({ + features: new Collection(), + }), + style: [ + new Style({ + stroke: new Stroke({ + color: 'white', + width: 4 + }), + image: new Circle({ + radius: 6, + fill: new Fill({ + color: '#666666' + }), + stroke: new Stroke({ + color: 'white', + width: 2, + lineDash: [2] + }), + }), + }), + new Style({ + stroke: new Stroke({ + color: '#666666', + width: 1, + lineDash: [2] + }), + }), + ], + zIndex: 4, + updateWhileAnimating: true, + updateWhileInteracting: true, + }); + }, + drawInteraction() { + return new DrawInteraction({ + source: this.layer.getSource(), + type: 'Rectangle', + style: this.layer.getStyle(), + minPoints: 2, + maxPoints: 2, + geometryFunction(coordinates, opt_geometry) { + if (coordinates.length > 1) { + coordinates = [ + coordinates[0], + [coordinates[0][0], coordinates[1][1]], + coordinates[1], + [coordinates[1][0], coordinates[0][1]] + ]; + } + let geometry = opt_geometry; + if (geometry) { + geometry.setCoordinates([coordinates]); + } else { + geometry = new Rectangle([coordinates]); + } + return geometry; + } + }); + }, + modifyInteraction() { + return new ModifyInteraction({ + features: this.layer.getSource().getFeaturesCollection(), + style: this.layer.getStyle(), + deleteCondition: neverCondition, + }); + }, + }, + methods: { + toggleEditing() { + this.isEditing = !this.isEditing; + if (this.isEditing) { + this.drawInteraction.setActive(true); + this.modifyInteraction.setActive(true); + } else { + this.drawInteraction.setActive(false); + this.modifyInteraction.setActive(false); + } + }, + deleteArea() { + if (this.hasExportArea && confirm('Do you really want to delete the export area?')) { + let source = this.layer.getSource(); + let feature = source.getFeatures()[0]; + source.clear(); + ExportAreaApi.delete({id: this.volumeId}) + .then(() => this.exportArea = null) + .catch(function (response) { + source.addFeature(feature); + handleErrorResponse(response); + }); + } + }, + updateCurrentImage(id, image) { + this.currentImage = image; + }, + maybeDrawArea() { + this.clearSource(); + if (this.exportArea && this.height > 0) { + // Handle coordinates for tiled and regular images differently. + let height = this.currentImage.tiled ? 0 : this.height; + + let geometry = new Rectangle([[ + // Swap y coordinates for OpenLayers. + [this.exportArea[0], height - this.exportArea[1]], + [this.exportArea[0], height - this.exportArea[3]], + [this.exportArea[2], height - this.exportArea[3]], + [this.exportArea[2], height - this.exportArea[1]], + ]]); + this.layer.getSource().addFeature(new Feature({geometry: geometry})); + } + }, + handleModifyend(e) { + this.updateExportArea(e.features.item(0)); + }, + clearSource() { + this.layer.getSource().clear(); + }, + handleDrawend(e) { + let source = this.layer.getSource(); + let oldFeature = source.getFeatures()[0]; + source.clear(); + // Remove the feature again if creating it failed. + this.updateExportArea(e.feature).catch(function () { + source.clear(); + if (oldFeature) { + source.addFeature(oldFeature); + } + }); + }, + updateExportArea(feature) { + let coordinates = feature.getGeometry().getCoordinates()[0]; + // Handle coordinates for tiled and regular images differently. + let height = this.currentImage.tiled ? 0 : this.height; + coordinates = [ + coordinates[0][0], height - coordinates[0][1], + coordinates[2][0], height - coordinates[2][1], + ].map(Math.round); + + let promise = ExportAreaApi.save({id: this.volumeId}, {coordinates: coordinates}) + .then(() => this.exportArea = coordinates); + + promise.catch(handleErrorResponse); + + return promise; + }, + extendMap(map) { + map.addLayer(this.layer); + map.addInteraction(this.drawInteraction); + map.addInteraction(this.modifyInteraction); + }, + }, + watch: { + opacity(opacity, oldOpacity) { + if (opacity < 1) { + this.settings.set('exportAreaOpacity', opacity); + } else { + this.settings.delete('exportAreaOpacity'); + } + + this.layer.setOpacity(opacity); + }, + exportArea() { + this.maybeDrawArea(); + }, + height() { + this.maybeDrawArea(); + }, + }, + created() { + this.volumeId = biigle.$require('annotations.volumeId'); + + if (this.settings.has('exportAreaOpacity')) { + this.opacityValue = this.settings.get('exportAreaOpacity'); + } + + this.exportArea = biigle.$require('annotations.exportArea'); + + this.drawInteraction.setActive(false); + this.modifyInteraction.setActive(false); + this.drawInteraction.on('drawend', this.handleDrawend); + this.modifyInteraction.on('modifyend', this.handleModifyend); + + Events.$on('images.change', this.updateCurrentImage); + Events.$on('annotations.map.init', this.extendMap); + }, + }; +} diff --git a/src/resources/assets/js/reports/api/projectReports.js b/src/resources/assets/js/reports/api/projectReports.js index 950a47ea0..3e76e0130 100644 --- a/src/resources/assets/js/reports/api/projectReports.js +++ b/src/resources/assets/js/reports/api/projectReports.js @@ -1,7 +1,7 @@ /** * Resource for requesting reports for projects * - * var resource = biigle.$require('reports.api.projectReports'); + * let resource = biigle.$require('reports.api.projectReports'); * * Request a basic annotation report: * diff --git a/src/resources/assets/js/reports/api/videoReports.js b/src/resources/assets/js/reports/api/videoReports.js index c5131d028..96fc267a0 100644 --- a/src/resources/assets/js/reports/api/videoReports.js +++ b/src/resources/assets/js/reports/api/videoReports.js @@ -1,7 +1,7 @@ /** * Resource for requesting reports for videos * - * var resource = biigle.$require('reports.api.videoReports'); + * let resource = biigle.$require('reports.api.videoReports'); * * Request a CSV report: * diff --git a/src/resources/assets/js/reports/api/volumeReports.js b/src/resources/assets/js/reports/api/volumeReports.js index 48202afa3..73ffad5d1 100644 --- a/src/resources/assets/js/reports/api/volumeReports.js +++ b/src/resources/assets/js/reports/api/volumeReports.js @@ -1,7 +1,7 @@ /** * Resource for requesting reports for volumes * - * var resource = biigle.$require('reports.api.volumeReports'); + * let resource = biigle.$require('reports.api.volumeReports'); * * Request a basic annotation report: * diff --git a/src/resources/assets/js/reports/exportProjectReportForm.js b/src/resources/assets/js/reports/exportProjectReportForm.js index 5e4d40396..1a7583f7c 100644 --- a/src/resources/assets/js/reports/exportProjectReportForm.js +++ b/src/resources/assets/js/reports/exportProjectReportForm.js @@ -2,7 +2,7 @@ * The form for requesting a project report */ biigle.$viewModel('project-report-form', function (element) { - var projectId = biigle.$require('reports.projectId'); + let projectId = biigle.$require('reports.projectId'); new Vue({ el: element, @@ -27,7 +27,7 @@ biigle.$viewModel('project-report-form', function (element) { }, }, methods: { - submit: function () { + submit() { this.request(projectId, biigle.$require('reports.api.projectReports')); } }, diff --git a/src/resources/assets/js/reports/exportVideoReportForm.js b/src/resources/assets/js/reports/exportVideoReportForm.js index e9c62bb31..4ac679e36 100644 --- a/src/resources/assets/js/reports/exportVideoReportForm.js +++ b/src/resources/assets/js/reports/exportVideoReportForm.js @@ -2,7 +2,7 @@ * The form for requesting a video report */ biigle.$viewModel('video-report-form', function (element) { - var videoId = biigle.$require('reports.videoId'); + let videoId = biigle.$require('reports.videoId'); new Vue({ el: element, @@ -18,7 +18,7 @@ biigle.$viewModel('video-report-form', function (element) { }, }, methods: { - submit: function () { + submit() { this.request(videoId, biigle.$require('reports.api.videoReports')); }, }, diff --git a/src/resources/assets/js/reports/exportVolumeReportForm.js b/src/resources/assets/js/reports/exportVolumeReportForm.js index 229b85fdf..0f0ab0322 100644 --- a/src/resources/assets/js/reports/exportVolumeReportForm.js +++ b/src/resources/assets/js/reports/exportVolumeReportForm.js @@ -2,7 +2,7 @@ * The form for requesting a volume report */ biigle.$viewModel('volume-report-form', function (element) { - var volumeId = biigle.$require('reports.volumeId'); + let volumeId = biigle.$require('reports.volumeId'); new Vue({ el: element, @@ -28,7 +28,7 @@ biigle.$viewModel('volume-report-form', function (element) { }, }, methods: { - submit: function () { + submit() { this.request(volumeId, biigle.$require('reports.api.volumeReports')); }, }, diff --git a/src/resources/assets/js/reports/import.js b/src/resources/assets/js/reports/import.js new file mode 100644 index 000000000..e69de29bb diff --git a/src/resources/assets/js/reports/main.js b/src/resources/assets/js/reports/main.js new file mode 100644 index 000000000..e69de29bb diff --git a/src/resources/assets/js/reports/mixins/reportForm.js b/src/resources/assets/js/reports/mixins/reportForm.js index 6a05567a9..b515f7e1e 100644 --- a/src/resources/assets/js/reports/mixins/reportForm.js +++ b/src/resources/assets/js/reports/mixins/reportForm.js @@ -26,26 +26,26 @@ biigle.$component('reports.mixins.reportForm', { }, }, computed: { - flatLabels: function () { - var labels = []; + flatLabels() { + let labels = []; this.labelTrees.forEach(function (tree) { Array.prototype.push.apply(labels, tree.labels); }); return labels; }, - selectedLabels: function () { + selectedLabels() { return this.flatLabels.filter(function (label) { return label.selected; }); }, - selectedLabelsCount: function () { + selectedLabelsCount() { return this.selectedLabels.length; }, - variants: function () { - var variants = {}; + variants() { + let variants = {}; this.reportTypes.forEach(function (type) { - var fragments = type.name.split('\\'); + let fragments = type.name.split('\\'); if (!variants.hasOwnProperty(fragments[0])) { variants[fragments[0]] = []; } @@ -54,25 +54,25 @@ biigle.$component('reports.mixins.reportForm', { return variants; }, - availableReportTypes: function () { - var types = {}; + availableReportTypes() { + let types = {}; this.reportTypes.forEach(function (type) { types[type.name] = type.id; }); return types; }, - selectedReportTypeId: function () { + selectedReportTypeId() { return this.availableReportTypes[this.selectedType + '\\' + this.selectedVariant]; }, - availableVariants: function () { + availableVariants() { return this.variants[this.selectedType]; }, - onlyOneAvailableVariant: function () { + onlyOneAvailableVariant() { return this.availableVariants.length === 1; }, - selectedOptions: function () { - var options = {}; + selectedOptions() { + let options = {}; this.allowedOptions[this.selectedType].forEach(function (allowed) { options[allowed] = this.options[allowed]; }, this); @@ -83,7 +83,7 @@ biigle.$component('reports.mixins.reportForm', { }, }, methods: { - request: function (id, resource) { + request(id, resource) { if (this.loading) return; this.success = false; this.startLoading(); @@ -91,50 +91,50 @@ biigle.$component('reports.mixins.reportForm', { .then(this.submitted, this.handleError) .finally(this.finishLoading); }, - submitted: function () { + submitted() { this.success = true; this.errors = {}; }, - handleError: function (response) { + handleError(response) { if (response.status === 422) { this.errors = response.data; } else { biigle.$require('messages.store').handleErrorResponse(response); } }, - selectType: function (type) { + selectType(type) { this.selectedType = type; if (this.availableVariants.indexOf(this.selectedVariant) === -1) { this.selectedVariant = this.availableVariants[0]; } }, - wantsType: function (type) { + wantsType(type) { return this.selectedType === type; }, - wantsVariant: function (variant) { + wantsVariant(variant) { if (Array.isArray(variant)) { return variant.indexOf(this.selectedVariant) !== -1; } return this.selectedVariant === variant; }, - hasError: function (key) { + hasError(key) { return this.errors.hasOwnProperty(key); }, - getError: function (key) { + getError(key) { return this.errors[key] ? this.errors[key].join(' ') : ''; }, - wantsCombination: function (type, variant) { + wantsCombination(type, variant) { return this.wantsType(type) && this.wantsVariant(variant); }, }, watch: { - selectedLabels: function (labels) { + selectedLabels(labels) { this.options.only_labels = labels.map(function (label) { return label.id; }); }, - hasOnlyLabels: function (has) { + hasOnlyLabels(has) { if (!has) { this.flatLabels.forEach(function (label) { label.selected = false; @@ -142,7 +142,7 @@ biigle.$component('reports.mixins.reportForm', { } }, }, - created: function () { + created() { this.reportTypes = biigle.$require('reports.reportTypes'); this.selectedType = Object.keys(this.variants)[0]; this.selectedVariant = this.availableVariants[0]; diff --git a/webpack.mix.js b/webpack.mix.js new file mode 100644 index 000000000..0775a8c2d --- /dev/null +++ b/webpack.mix.js @@ -0,0 +1,30 @@ +const mix = require('laravel-mix'); +require('laravel-mix-artisan-publish'); + +/* + |-------------------------------------------------------------------------- + | Mix Asset Management + |-------------------------------------------------------------------------- + | + | Mix provides a clean, fluent API for defining some Webpack build steps + | for your Laravel application. By default, we are compiling the Sass + | file for the application as well as bundling up all the JS files. + | + */ + +mix.disableSuccessNotifications(); +mix.options({processCssUrls: false}); + +mix.setPublicPath('src/public'); + +mix.js('src/resources/assets/js/reports/main.js', 'assets/scripts') + .js('src/resources/assets/js/annotations/annotations.js', 'assets/scripts') + .sass('src/resources/assets/sass/main.scss', 'assets/styles') + .publish({ + provider: 'Biigle\\Modules\\Reports\\ReportsServiceProvider', + tag: 'public', + }); + +if (mix.inProduction()) { + mix.version(); +} From c761eeb3f431f63ab7da84fbd28c4bae5be098de Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 25 Jun 2020 08:42:10 +0200 Subject: [PATCH 197/407] Finish migration to ES6 --- package.json | 2 +- src/public/assets/scripts/main.js | 2 +- src/public/mix-manifest.json | 2 +- .../assets/js/reports/api/projectReports.js | 2 +- .../assets/js/reports/api/videoReports.js | 2 +- .../assets/js/reports/api/volumeReports.js | 2 +- .../js/reports/exportProjectReportForm.js | 35 ------------------ .../js/reports/exportVideoReportForm.js | 26 ------------- .../js/reports/exportVolumeReportForm.js | 36 ------------------ src/resources/assets/js/reports/import.js | 3 ++ src/resources/assets/js/reports/main.js | 7 ++++ .../assets/js/reports/mixins/reportForm.js | 26 ++++++------- .../assets/js/reports/projectForm.js | 37 +++++++++++++++++++ src/resources/assets/js/reports/videoForm.js | 28 ++++++++++++++ src/resources/assets/js/reports/volumeForm.js | 37 +++++++++++++++++++ 15 files changed, 131 insertions(+), 116 deletions(-) delete mode 100644 src/resources/assets/js/reports/exportProjectReportForm.js delete mode 100644 src/resources/assets/js/reports/exportVideoReportForm.js delete mode 100644 src/resources/assets/js/reports/exportVolumeReportForm.js create mode 100644 src/resources/assets/js/reports/projectForm.js create mode 100644 src/resources/assets/js/reports/videoForm.js create mode 100644 src/resources/assets/js/reports/volumeForm.js diff --git a/package.json b/package.json index 89ceed3d9..40bf28aae 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "biigle-projects", + "name": "biigle-reports", "version": "0.0.1", "license": "GPL-3.0-only", "scripts": { diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index 1fcee3ea9..d69100ffe 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -!function(e){var r={};function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:n})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,r){if(1&r&&(e=t(e)),8&r)return e;if(4&r&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(t.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&r&&"string"!=typeof e)for(var o in e)t.d(n,o,function(r){return e[r]}.bind(null,o));return n},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},t.p="/",t(t.s=0)}({0:function(e,r,t){t("Or9D"),e.exports=t("zcrr")},Or9D:function(e,r){},zcrr:function(e,r){}}); \ No newline at end of file +!function(e){var t={};function r(s){if(t[s])return t[s].exports;var i=t[s]={i:s,l:!1,exports:{}};return e[s].call(i.exports,i,i.exports,r),i.l=!0,i.exports}r.m=e,r.c=t,r.d=function(e,t,s){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(r.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(s,i,function(t){return e[t]}.bind(null,i));return s},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/",r(r.s=0)}({0:function(e,t,r){r("Or9D"),e.exports=r("zcrr")},Or9D:function(e,t,r){"use strict";r.r(t);var s=biigle.$require("messages").handleErrorResponse,i=biigle.$require("labelTrees.components.labelTrees"),n={mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:i},data:{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,only_labels:[],aggregate_child_labels:!1}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var r=t.name.split("\\");e.hasOwnProperty(r[0])||(e[r[0]]=[]),e[r[0]].push(r[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(r){t[r]=e.options[r]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:s(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0],this.labelTrees=biigle.$require("reports.labelTrees")}},a=Vue.resource("/api/v1/projects{/id}/reports"),o={mixins:[n],data:{projectId:null,allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","only_labels"],VideoAnnotations:["separate_label_trees","only_labels"]}},methods:{submit:function(){this.request(this.projectId,a)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},l=Vue.resource("/api/v1/videos{/id}/reports"),u={mixins:[n],data:{videoId:null,selectedType:"VideoAnnotations",selectedVariant:"Csv",allowedOptions:{VideoAnnotations:["separate_label_trees","only_labels"]}},methods:{submit:function(){this.request(this.videoId,l)}},created:function(){this.videoId=biigle.$require("reports.videoId")}},c=Vue.resource("/api/v1/volumes{/id}/reports"),d={mixins:[n],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","annotation_session_id","only_labels"]},options:{annotation_session_id:null}},methods:{submit:function(){this.request(this.volumeId,c)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}};biigle.$mount("project-report-form",o),biigle.$mount("video-report-form",u),biigle.$mount("volume-report-form",d)},zcrr:function(e,t){}}); \ No newline at end of file diff --git a/src/public/mix-manifest.json b/src/public/mix-manifest.json index 01f4744cb..4a72e059a 100644 --- a/src/public/mix-manifest.json +++ b/src/public/mix-manifest.json @@ -1,5 +1,5 @@ { "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=ddf029b7386f1c6772d0", - "/assets/scripts/main.js": "/assets/scripts/main.js?id=9e1e0df9e6e77e9854e2", + "/assets/scripts/main.js": "/assets/scripts/main.js?id=0b411999e5e7c5498cbf", "/assets/styles/main.css": "/assets/styles/main.css?id=9d45536e01d0a0b3c70b" } diff --git a/src/resources/assets/js/reports/api/projectReports.js b/src/resources/assets/js/reports/api/projectReports.js index 3e76e0130..90ed04737 100644 --- a/src/resources/assets/js/reports/api/projectReports.js +++ b/src/resources/assets/js/reports/api/projectReports.js @@ -12,4 +12,4 @@ * }).then(...) * */ -biigle.$declare('reports.api.projectReports', Vue.resource('/api/v1/projects{/id}/reports')); +export default Vue.resource('/api/v1/projects{/id}/reports'); diff --git a/src/resources/assets/js/reports/api/videoReports.js b/src/resources/assets/js/reports/api/videoReports.js index 96fc267a0..15c1fadda 100644 --- a/src/resources/assets/js/reports/api/videoReports.js +++ b/src/resources/assets/js/reports/api/videoReports.js @@ -11,4 +11,4 @@ * }).then(...) * */ -biigle.$declare('reports.api.videoReports', Vue.resource('/api/v1/videos{/id}/reports')); +export default Vue.resource('/api/v1/videos{/id}/reports'); diff --git a/src/resources/assets/js/reports/api/volumeReports.js b/src/resources/assets/js/reports/api/volumeReports.js index 73ffad5d1..779047f17 100644 --- a/src/resources/assets/js/reports/api/volumeReports.js +++ b/src/resources/assets/js/reports/api/volumeReports.js @@ -13,4 +13,4 @@ * }).then(...) * */ -biigle.$declare('reports.api.volumeReports', Vue.resource('/api/v1/volumes{/id}/reports')); +export default Vue.resource('/api/v1/volumes{/id}/reports'); diff --git a/src/resources/assets/js/reports/exportProjectReportForm.js b/src/resources/assets/js/reports/exportProjectReportForm.js deleted file mode 100644 index 1a7583f7c..000000000 --- a/src/resources/assets/js/reports/exportProjectReportForm.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * The form for requesting a project report - */ -biigle.$viewModel('project-report-form', function (element) { - let projectId = biigle.$require('reports.projectId'); - - new Vue({ - el: element, - mixins: [biigle.$require('reports.mixins.reportForm')], - data: { - allowedOptions: { - 'Annotations': [ - 'export_area', - 'newest_label', - 'separate_label_trees', - 'only_labels', - 'aggregate_child_labels', - ], - 'ImageLabels': [ - 'separate_label_trees', - 'only_labels', - ], - 'VideoAnnotations': [ - 'separate_label_trees', - 'only_labels', - ], - }, - }, - methods: { - submit() { - this.request(projectId, biigle.$require('reports.api.projectReports')); - } - }, - }); -}); diff --git a/src/resources/assets/js/reports/exportVideoReportForm.js b/src/resources/assets/js/reports/exportVideoReportForm.js deleted file mode 100644 index 4ac679e36..000000000 --- a/src/resources/assets/js/reports/exportVideoReportForm.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * The form for requesting a video report - */ -biigle.$viewModel('video-report-form', function (element) { - let videoId = biigle.$require('reports.videoId'); - - new Vue({ - el: element, - mixins: [biigle.$require('reports.mixins.reportForm')], - data: { - selectedType: 'VideoAnnotations', - selectedVariant: 'Csv', - allowedOptions: { - 'VideoAnnotations': [ - 'separate_label_trees', - 'only_labels', - ], - }, - }, - methods: { - submit() { - this.request(videoId, biigle.$require('reports.api.videoReports')); - }, - }, - }); -}); diff --git a/src/resources/assets/js/reports/exportVolumeReportForm.js b/src/resources/assets/js/reports/exportVolumeReportForm.js deleted file mode 100644 index 0f0ab0322..000000000 --- a/src/resources/assets/js/reports/exportVolumeReportForm.js +++ /dev/null @@ -1,36 +0,0 @@ -/** - * The form for requesting a volume report - */ -biigle.$viewModel('volume-report-form', function (element) { - let volumeId = biigle.$require('reports.volumeId'); - - new Vue({ - el: element, - mixins: [biigle.$require('reports.mixins.reportForm')], - data: { - allowedOptions: { - 'Annotations': [ - 'export_area', - 'newest_label', - 'separate_label_trees', - 'annotation_session_id', - 'only_labels', - 'aggregate_child_labels', - ], - 'ImageLabels': [ - 'separate_label_trees', - 'annotation_session_id', - 'only_labels', - ], - }, - options: { - annotation_session_id: null, - }, - }, - methods: { - submit() { - this.request(volumeId, biigle.$require('reports.api.volumeReports')); - }, - }, - }); -}); diff --git a/src/resources/assets/js/reports/import.js b/src/resources/assets/js/reports/import.js index e69de29bb..52553f9a5 100644 --- a/src/resources/assets/js/reports/import.js +++ b/src/resources/assets/js/reports/import.js @@ -0,0 +1,3 @@ +export let handleErrorResponse = biigle.$require('messages').handleErrorResponse; +export let LabelTrees = biigle.$require('labelTrees.components.labelTrees'); +export let LoaderMixin = biigle.$require('core.mixins.loader'); diff --git a/src/resources/assets/js/reports/main.js b/src/resources/assets/js/reports/main.js index e69de29bb..b22403a2a 100644 --- a/src/resources/assets/js/reports/main.js +++ b/src/resources/assets/js/reports/main.js @@ -0,0 +1,7 @@ +import ProjectForm from './projectForm'; +import VideoForm from './videoForm'; +import VolumeForm from './volumeForm'; + +biigle.$mount('project-report-form', ProjectForm); +biigle.$mount('video-report-form', VideoForm); +biigle.$mount('volume-report-form', VolumeForm); diff --git a/src/resources/assets/js/reports/mixins/reportForm.js b/src/resources/assets/js/reports/mixins/reportForm.js index b515f7e1e..2cfe01ed8 100644 --- a/src/resources/assets/js/reports/mixins/reportForm.js +++ b/src/resources/assets/js/reports/mixins/reportForm.js @@ -1,12 +1,16 @@ +import {handleErrorResponse} from '../import'; +import {LabelTrees} from '../import'; +import {LoaderMixin} from '../import'; + /** * A mixin for a report form * * @type {Object} */ -biigle.$component('reports.mixins.reportForm', { - mixins: [biigle.$require('core.mixins.loader')], +export default { + mixins: [LoaderMixin], components: { - labelTrees: biigle.$require('labelTrees.components.labelTrees'), + labelTrees: LabelTrees, }, data: { allowedOptions: {}, @@ -35,9 +39,7 @@ biigle.$component('reports.mixins.reportForm', { return labels; }, selectedLabels() { - return this.flatLabels.filter(function (label) { - return label.selected; - }); + return this.flatLabels.filter((label) => label.selected); }, selectedLabelsCount() { return this.selectedLabels.length; @@ -73,9 +75,9 @@ biigle.$component('reports.mixins.reportForm', { }, selectedOptions() { let options = {}; - this.allowedOptions[this.selectedType].forEach(function (allowed) { + this.allowedOptions[this.selectedType].forEach((allowed) => { options[allowed] = this.options[allowed]; - }, this); + }); options.type_id = this.selectedReportTypeId; @@ -99,7 +101,7 @@ biigle.$component('reports.mixins.reportForm', { if (response.status === 422) { this.errors = response.data; } else { - biigle.$require('messages.store').handleErrorResponse(response); + handleErrorResponse(response); } }, selectType(type) { @@ -130,9 +132,7 @@ biigle.$component('reports.mixins.reportForm', { }, watch: { selectedLabels(labels) { - this.options.only_labels = labels.map(function (label) { - return label.id; - }); + this.options.only_labels = labels.map((label) => label.id); }, hasOnlyLabels(has) { if (!has) { @@ -148,4 +148,4 @@ biigle.$component('reports.mixins.reportForm', { this.selectedVariant = this.availableVariants[0]; this.labelTrees = biigle.$require('reports.labelTrees'); }, -}); +}; diff --git a/src/resources/assets/js/reports/projectForm.js b/src/resources/assets/js/reports/projectForm.js new file mode 100644 index 000000000..428b019e0 --- /dev/null +++ b/src/resources/assets/js/reports/projectForm.js @@ -0,0 +1,37 @@ +import Form from './mixins/reportForm'; +import ProjectsApi from './api/projectReports'; + +/** + * The form for requesting a project report + */ +export default { + mixins: [Form], + data: { + projectId: null, + allowedOptions: { + 'Annotations': [ + 'export_area', + 'newest_label', + 'separate_label_trees', + 'only_labels', + 'aggregate_child_labels', + ], + 'ImageLabels': [ + 'separate_label_trees', + 'only_labels', + ], + 'VideoAnnotations': [ + 'separate_label_trees', + 'only_labels', + ], + }, + }, + methods: { + submit() { + this.request(this.projectId, ProjectsApi); + } + }, + created() { + this.projectId = biigle.$require('reports.projectId'); + }, +}; diff --git a/src/resources/assets/js/reports/videoForm.js b/src/resources/assets/js/reports/videoForm.js new file mode 100644 index 000000000..be449d900 --- /dev/null +++ b/src/resources/assets/js/reports/videoForm.js @@ -0,0 +1,28 @@ +import Form from './mixins/reportForm'; +import VideosApi from './api/videoReports'; + +/** + * The form for requesting a video report + */ +export default { + mixins: [Form], + data: { + videoId: null, + selectedType: 'VideoAnnotations', + selectedVariant: 'Csv', + allowedOptions: { + 'VideoAnnotations': [ + 'separate_label_trees', + 'only_labels', + ], + }, + }, + methods: { + submit() { + this.request(this.videoId, VideosApi); + }, + }, + created() { + this.videoId = biigle.$require('reports.videoId'); + }, +}; diff --git a/src/resources/assets/js/reports/volumeForm.js b/src/resources/assets/js/reports/volumeForm.js new file mode 100644 index 000000000..c27559713 --- /dev/null +++ b/src/resources/assets/js/reports/volumeForm.js @@ -0,0 +1,37 @@ +import Form from './mixins/reportForm'; +import VolumesApi from './api/volumeReports'; + +/** + * The form for requesting a volume report + */ +export default { + mixins: [Form], + data: { + allowedOptions: { + 'Annotations': [ + 'export_area', + 'newest_label', + 'separate_label_trees', + 'annotation_session_id', + 'only_labels', + 'aggregate_child_labels', + ], + 'ImageLabels': [ + 'separate_label_trees', + 'annotation_session_id', + 'only_labels', + ], + }, + options: { + annotation_session_id: null, + }, + }, + methods: { + submit() { + this.request(this.volumeId, VolumesApi); + }, + }, + created() { + this.volumeId = biigle.$require('reports.volumeId'); + }, +}; From 77a09a17ea387567cd3abf84bc0db3b19044b66a Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 25 Jun 2020 09:54:34 +0200 Subject: [PATCH 198/407] Remove gulpfile --- gulpfile.js | 34 ---------------------------------- 1 file changed, 34 deletions(-) delete mode 100644 gulpfile.js diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index 7be28455e..000000000 --- a/gulpfile.js +++ /dev/null @@ -1,34 +0,0 @@ -"use strict" - -var gulp = require('gulp'); -var h = require('gulp-helpers'); -var publish = h.publish('Biigle\\Modules\\Reports\\ReportsServiceProvider', 'public'); - -h.paths.sass = 'src/resources/assets/sass/'; -h.paths.js = 'src/resources/assets/js/'; -h.paths.public = 'src/public/assets/'; - -gulp.task('sass-main', function () { - h.sass('main.scss', 'main.css'); -}); - -gulp.task('js-main', function (cb) { - h.js('reports/**/*.js', 'main.js', cb); -}); - -gulp.task('js-annotations', function (cb) { - h.js('annotations/**/*.js', 'annotations.js', cb); -}); - -gulp.task('sass', ['sass-main']); - -gulp.task('js', ['js-main', 'js-annotations']); - -gulp.task('watch', function () { - gulp.watch(h.paths.sass + '**/*.scss', ['sass']); - gulp.watch(h.paths.js + 'reports/**/*.js', ['js-main']); - gulp.watch(h.paths.js + 'annotations/**/*.js', ['js-annotations']); - gulp.watch(h.paths.public + '**/*', publish); -}); - -gulp.task('default', ['sass', 'js'], publish) From 051b1178eecac5a0b7e45a803422867472cc43ae Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 29 Jun 2020 15:21:52 +0200 Subject: [PATCH 199/407] Fix notifications code --- .../views/settings/notifications.blade.php | 53 +++++++++---------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/src/resources/views/settings/notifications.blade.php b/src/resources/views/settings/notifications.blade.php index ddcda6a5d..bb696d8c5 100644 --- a/src/resources/views/settings/notifications.blade.php +++ b/src/resources/views/settings/notifications.blade.php @@ -22,37 +22,34 @@ @push('scripts') @endpush From b08451ca086cecfaa322330e7a71e6b9967c1abe Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 1 Jul 2020 16:31:06 +0200 Subject: [PATCH 200/407] Fix test action trigger --- .github/workflows/test.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ccb6d3d3d..7af5d93b8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,6 +1,10 @@ name: Tests -on: [push, pull_request] +on: + push: + branches: + - master + pull_request: jobs: From 040646bafbcdadea15c1e2ad98afba3ab1990bb0 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 2 Jul 2020 09:00:00 +0200 Subject: [PATCH 201/407] Configure ESLint --- .eslintrc.json | 26 ++ .github/workflows/lint.yml | 28 ++ .npmrc | 2 +- package-lock.json | 570 ++++++++++++++++++++++++++++++++++++- package.json | 5 +- 5 files changed, 628 insertions(+), 3 deletions(-) create mode 100644 .eslintrc.json create mode 100644 .github/workflows/lint.yml diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 000000000..6fbc56c81 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,26 @@ +{ + "env": { + "browser": true, + "es2020": true + }, + "extends": [ + "eslint:recommended", + "plugin:vue/essential" + ], + "parserOptions": { + "ecmaVersion": 11, + "sourceType": "module" + }, + "plugins": [ + "vue" + ], + "rules": { + "no-prototype-builtins": "off", + "no-console": ["error", {"allow": ["warn", "error"]}] + }, + "globals": { + "biigle": "readonly", + "Vue": "readonly", + "VueStrap": "readonly" + } +} diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 000000000..f0114fb3c --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,28 @@ +name: Lint + +on: + push: + branches: + - master + pull_request: + +jobs: + lint: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + with: + fetch-depth: 1 + + - name: Set registry authentication token + run: echo "//npm.pkg.github.com/:_authToken=$GITHUB_TOKEN" >> .npmrc + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + + - name: Install dependencies + run: npm install + + - name: Run ESLint + run: npm run lint diff --git a/.npmrc b/.npmrc index 3eae983b5..ebb09e7c8 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1 @@ -registry=https://npm.pkg.github.com/biigle +@biigle:registry=https://npm.pkg.github.com diff --git a/package-lock.json b/package-lock.json index 1a49d3d47..9dbe06454 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "biigle-projects", + "name": "biigle-reports", "version": "0.0.1", "lockfileVersion": 1, "requires": true, @@ -1200,6 +1200,12 @@ } } }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, "@types/glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.2.tgz", @@ -1478,6 +1484,12 @@ "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", "dev": true }, + "acorn-jsx": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", + "dev": true + }, "adjust-sourcemap-loader": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", @@ -1767,6 +1779,12 @@ "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", "dev": true }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, "async": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", @@ -3209,6 +3227,12 @@ "regexp.prototype.flags": "^1.2.0" } }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, "deepmerge": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", @@ -3406,6 +3430,15 @@ "buffer-indexof": "^1.0.0" } }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, "dom-serializer": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", @@ -3564,6 +3597,15 @@ } } }, + "enquirer": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.5.tgz", + "integrity": "sha512-BNT1C08P9XD0vNg3J475yIUG+mVdp9T6towYFHUv897X0KoHBjB1shyrNmhmtHWKP17iSWgo7Gqh7BBuzLZMSA==", + "dev": true, + "requires": { + "ansi-colors": "^3.2.1" + } + }, "entities": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", @@ -3685,6 +3727,225 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, + "eslint": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.3.1.tgz", + "integrity": "sha512-cQC/xj9bhWUcyi/RuMbRtC3I0eW8MH0jhRELSvpKYkWep3C6YZ2OkvcvJVUeO6gcunABmzptbXBuDoXsjHmfTA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.0", + "eslint-utils": "^2.0.0", + "eslint-visitor-keys": "^1.2.0", + "espree": "^7.1.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "eslint-plugin-vue": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz", + "integrity": "sha512-Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ==", + "dev": true, + "requires": { + "natural-compare": "^1.4.0", + "semver": "^5.6.0", + "vue-eslint-parser": "^7.0.0" + } + }, "eslint-scope": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", @@ -3695,12 +3956,63 @@ "estraverse": "^4.1.1" } }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.1.0.tgz", + "integrity": "sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw==", + "dev": true, + "requires": { + "acorn": "^7.2.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.2.0" + }, + "dependencies": { + "acorn": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", + "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", + "dev": true + } + } + }, "esprima": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", "dev": true }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", + "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "dev": true + } + } + }, "esrecurse": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", @@ -4048,6 +4360,12 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, "fastparse": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", @@ -4069,6 +4387,15 @@ "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", "dev": true }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, "file-loader": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz", @@ -4198,6 +4525,34 @@ "resolve-dir": "^1.0.1" } }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, "flush-write-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", @@ -4343,6 +4698,12 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "gensync": { "version": "1.0.0-beta.1", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", @@ -5360,6 +5721,12 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, "json3": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", @@ -5484,6 +5851,16 @@ "leven": "^3.1.0" } }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, "loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", @@ -5946,6 +6323,12 @@ "to-regex": "^3.0.1" } }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -6268,6 +6651,20 @@ "last-call-webpack-plugin": "^3.0.0" } }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, "original": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", @@ -6386,6 +6783,23 @@ "no-case": "^2.2.0" } }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, "parse-asn1": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", @@ -7243,6 +7657,12 @@ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", "dev": true }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, "prettier": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", @@ -7268,6 +7688,12 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", @@ -7544,6 +7970,12 @@ "es-abstract": "^1.17.0-next.1" } }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, "regexpu-core": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", @@ -8171,6 +8603,17 @@ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -8610,6 +9053,12 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, + "strip-json-comments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", + "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", + "dev": true + }, "style-loader": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", @@ -8687,6 +9136,46 @@ "util.promisify": "~1.0.0" } }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -8829,6 +9318,12 @@ } } }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -8949,6 +9444,21 @@ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", "dev": true }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -9257,6 +9767,49 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, + "vue-eslint-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz", + "integrity": "sha512-Kr21uPfthDc63nDl27AGQEhtt9VrZ9nkYk/NTftJ2ws9XiJwzJJCnCr3AITQ2jpRMA0XPGDECxYH8E027qMK9Q==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-scope": "^5.0.0", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.0.1", + "lodash": "^4.17.15" + }, + "dependencies": { + "acorn": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", + "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", + "dev": true + }, + "eslint-scope": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + } + } + } + }, "vue-hot-reload-api": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", @@ -9854,6 +10407,12 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -9908,6 +10467,15 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, "ws": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", diff --git a/package.json b/package.json index 40bf28aae..a9a10dfcb 100644 --- a/package.json +++ b/package.json @@ -8,10 +8,13 @@ "watch": "npm run development -- --watch", "watch-poll": "npm run watch -- --watch-poll", "prod": "npm run production", - "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js" + "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", + "lint": "npx eslint --resolve-plugins-relative-to . src/resources/assets/js/" }, "devDependencies": { "cross-env": "^5.1", + "eslint": "^7.3.1", + "eslint-plugin-vue": "^6.2.2", "laravel-mix": "^5.0.1", "laravel-mix-artisan-publish": "git://github.com/mzur/laravel-mix-artisan-publish.git", "resolve-url-loader": "^3.1.0", From 0c7f3b0ec09d2fe4554cbce2e1a13f9284779f0a Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 2 Jul 2020 09:00:42 +0200 Subject: [PATCH 202/407] Fix ESLint errors --- src/public/assets/scripts/annotations.js | 2 +- src/public/mix-manifest.json | 2 +- src/resources/assets/js/annotations/settingsTabPlugin.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index cacb66da8..a3c4bd820 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1,2 +1,2 @@ /*! For license information please see annotations.js.LICENSE.txt */ -!function(t){var e={};function i(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)i.d(n,r,function(e){return t[e]}.bind(null,r));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="/",i(i.s=1)}({1:function(t,e,i){t.exports=i("2R1P")},"2R1P":function(t,e,i){"use strict";function n(){return function(){throw new Error("Unimplemented abstract method.")}()}i.r(e);var r=0;function o(t){return t.ol_uid||(t.ol_uid=String(++r))}var s=function(t){function e(e){var i="Assertion failed. See https://openlayers.org/en/"+("v"+"5.3.0".split("-")[0])+"/doc/errors/#"+e+" for details.";t.call(this,i),this.code=e,this.name="AssertionError",this.message=i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error);function a(t,e){if(!t)throw new s(e)}function h(t,e,i){return Math.min(Math.max(t,e),i)}var u="cosh"in Math?Math.cosh:function(t){var e=Math.exp(t);return(e+1/e)/2};function l(t,e,i,n,r,o){var s=r-i,a=o-n;if(0!==s||0!==a){var h=((t-i)*s+(e-n)*a)/(s*s+a*a);h>1?(i=r,n=o):h>0&&(i+=s*h,n+=a*h)}return c(t,e,i,n)}function c(t,e,i,n){var r=i-t,o=n-e;return r*r+o*o}function p(t,e,i){return t+i*(e-t)}var f=/^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i,d=/^([a-z]*)$/i;function _(t){return"string"==typeof t?t:y(t)}!function(){var t={},e=0}();function g(t){return t[0]=h(t[0]+.5|0,0,255),t[1]=h(t[1]+.5|0,0,255),t[2]=h(t[2]+.5|0,0,255),t[3]=h(t[3],0,1),t}function y(t){var e=t[0];e!=(0|e)&&(e=e+.5|0);var i=t[1];i!=(0|i)&&(i=i+.5|0);var n=t[2];return n!=(0|n)&&(n=n+.5|0),"rgba("+e+","+i+","+n+","+(void 0===t[3]?1:t[3])+")"}function v(t){return Array.isArray(t)?y(t):t}function m(t,e){var i=document.createElement("canvas");return t&&(i.width=t),e&&(i.height=e),i.getContext("2d")}var C="undefined"!=typeof navigator?navigator.userAgent.toLowerCase():"",x=(C.indexOf("firefox"),-1!==C.indexOf("safari")&&C.indexOf("chrom"),-1!==C.indexOf("webkit")&&C.indexOf("edge"),C.indexOf("macintosh"),window.devicePixelRatio,function(){var t=!1;try{t=!!document.createElement("canvas").getContext("2d").setLineDash}catch(t){}return t}()),w=(navigator,window,window,navigator.msPointerEnabled,2),E=function(){var t,e={};return function(i){if(t||(t=document.createElement("div").style),!(i in e)){t.font=i;var n=t.fontFamily;if(t.font="",!n)return null;e[i]=n.split(/,\s?/)}return e[i]}}(),F="function"==typeof Object.assign?Object.assign:function(t,e){var i=arguments;if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(t),r=1,o=arguments.length;r0},e.prototype.removeEventListener=function(t,e){var i=this.listeners_[t];if(i){var n=i.indexOf(e);t in this.pendingRemovals_?(i[n]=j,++this.pendingRemovals_[t]):(i.splice(n,1),0===i.length&&delete this.listeners_[t])}},e}(P),W="change",V="clear",z="contextmenu",K="dblclick",U=function(t){function e(e){t.call(this),this.highWaterMark=void 0!==e?e:2048,this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.canExpireCache=function(){return this.getCount()>this.highWaterMark},e.prototype.clear=function(){this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null,this.dispatchEvent(V)},e.prototype.containsKey=function(t){return this.entries_.hasOwnProperty(t)},e.prototype.forEach=function(t,e){for(var i=this.oldest_;i;)t.call(e,i.value_,i.key_,this),i=i.newer},e.prototype.get=function(t){var e=this.entries_[t];return a(void 0!==e,15),e===this.newest_||(e===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(e.newer.older=e.older,e.older.newer=e.newer),e.newer=null,e.older=this.newest_,this.newest_.newer=e,this.newest_=e),e.value_},e.prototype.remove=function(t){var e=this.entries_[t];return a(void 0!==e,15),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_},e.prototype.getCount=function(){return this.count_},e.prototype.getKeys=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.key_;return e},e.prototype.getValues=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.value_;return e},e.prototype.peekLast=function(){return this.oldest_.value_},e.prototype.peekLastKey=function(){return this.oldest_.key_},e.prototype.peekFirstKey=function(){return this.newest_.key_},e.prototype.pop=function(){var t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_},e.prototype.replace=function(t,e){this.get(t),this.entries_[t].value_=e},e.prototype.set=function(t,e){a(!(t in this.entries_),16);var i={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=i:this.oldest_=i,this.newest_=i,this.entries_[t]=i,++this.count_},e.prototype.setSize=function(t){this.highWaterMark=t},e.prototype.prune=function(){for(;this.canExpireCache();)this.pop()},e}(N);new Array(6);var H=[0,0,0,1],J=[0,0,0,1],Z=new U,$={},Q=null,tt={};!function(){var t,e,i=$,n=["monospace","serif"],r=n.length,o="wmytzilWMYTZIL@#/&?$%10";function s(t){for(var i=et(),s=100;s<=700;s+=300){for(var a=s+" ",h=!0,u=0;u0;)this.pop()},e.prototype.extend=function(t){for(var e=0,i=t.length;e=1?(i=l,n=c):(i=h+d*p,n=u+d*f),[i,n]}function kt(t,e){for(var i=!0,n=t.length-1;n>=0;--n)if(t[n]!=e[n]){i=!1;break}return i}function Mt(t,e){var i=t[0]-e[0],n=t[1]-e[1];return i*i+n*n}function It(t,e){return Math.sqrt(Mt(t,e))}var Pt=X,Rt=Y,bt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey},Dt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&e.shiftKey},At=function(t){var e=t.pointerEvent;return a(void 0!==e,56),e.isPrimary&&0===e.button},Gt=0,Ot=1,Lt=2,Tt=4,Xt=8,Yt=16;function jt(t){for(var e=Vt(),i=0,n=t.length;ir&&(h|=Tt),ao&&(h|=Lt),h===Gt&&(h=Ot),h}function Vt(){return[1/0,1/0,-1/0,-1/0]}function zt(t,e,i,n,r){return r?(r[0]=t,r[1]=e,r[2]=i,r[3]=n,r):[t,e,i,n]}function Kt(t){return zt(1/0,1/0,-1/0,-1/0,t)}function Ut(t,e){var i=t[0],n=t[1];return zt(i,n,i,n,e)}function Ht(t,e,i,n,r){return $t(Kt(r),t,e,i,n)}function Jt(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function Zt(t,e){e[0]t[2]&&(t[2]=e[0]),e[1]t[3]&&(t[3]=e[1])}function $t(t,e,i,n,r){for(;i=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}var he="Point",ue="LineString",le="LinearRing",ce="Polygon",pe="MultiPoint",fe="MultiLineString",de="MultiPolygon",_e="GeometryCollection",ge="Circle",ye="Rectangle",ve="Ellipse";function me(t,e,i,n,r,o){for(var s=o||[],a=0,h=e;h1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=Se,a=0;as?h=s:h<-s&&(h=-s),o[a+1]=h}return o}function be(t,e,i){var n=t.length,r=i>1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=0;s=e[0]||(t[1]<=e[1]&&t[3]>=e[1]||te(t,this.intersectsCoordinate,this))}return!1},e.prototype.setCenter=function(t){var e=this.stride,i=this.flatCoordinates[e]-this.flatCoordinates[0],n=t.slice();n[e]=n[0]+i;for(var r=1;re?1:t1)a=i;else{if(f>0){for(var d=0;dr&&(r=u),o=a,s=h}return r}function ci(t,e,i,n,r){for(var o=0,s=i.length;o>1)],e))<0?s=n+1:(a=n,h=!r);return h?s:~s}(f,y);if(v<0){var m=(y-f[-v-2])/(f[-v-1]-f[-v-2]),C=e+(-v-2)*n;s=p(t[C],t[C+n],m),a=p(t[C+1],t[C+n+1],m)}else s=t[e+v*n],a=t[e+v*n+1]}return o?(o[0]=s,o[1]=a,o):[s,a]}function yi(t,e,i,n,r,o){if(i==e)return null;var s;if(r>1;ro&&(u-a)*(o-h)-(r-a)*(l-h)>0&&s++:l<=o&&(u-a)*(o-h)-(r-a)*(l-h)<0&&s--,a=u,h=l}return 0!==s}function Ci(t,e,i,n,r,o){if(0===i.length)return!1;if(!mi(t,e,i[0],n,r,o))return!1;for(var s=1,a=i.length;s=r[0]&&o[2]<=r[2]||(o[1]>=r[1]&&o[3]<=r[3]||xi(t,e,i,n,(function(t,e){return function(t,e,i){var n=!1,r=Wt(t,e),o=Wt(t,i);if(r===Ot||o===Ot)n=!0;else{var s,a,h=t[0],u=t[1],l=t[2],c=t[3],p=e[0],f=e[1],d=i[0],_=i[1],g=(_-f)/(d-p);o&Lt&&!(r&Lt)&&(n=(s=d-(_-c)/g)>=h&&s<=l),n||!(o&Tt)||r&Tt||(n=(a=_-(d-l)*g)>=u&&a<=c),n||!(o&Xt)||r&Xt||(n=(s=d-(_-u)/g)>=h&&s<=l),n||!(o&Yt)||r&Yt||(n=(a=_-(d-h)*g)>=u&&a<=c)}return n}(r,t,e)})))))}function Ei(t,e,i,n,r){if(!function(t,e,i,n,r){return!!wi(t,e,i,n,r)||(!!mi(t,e,i,n,r[0],r[1])||(!!mi(t,e,i,n,r[0],r[3])||(!!mi(t,e,i,n,r[2],r[1])||!!mi(t,e,i,n,r[2],r[3]))))}(t,e,i[0],n,r))return!1;if(1===i.length)return!0;for(var o=1,s=i.length;o0;){for(var p=u.pop(),f=u.pop(),d=0,_=t[f],g=t[f+1],y=t[p],v=t[p+1],m=f+n;md&&(c=m,d=C)}d>r&&(h[(c-e)/n]=1,f+n0&&_>f)&&(d<0&&g0&&g>d)?(a=c,h=p):(o[s++]=a,o[s++]=h,u=a,l=h,a=c,h=p)}}return o[s++]=a,o[s++]=h,s}function Pi(t,e,i,n,r,o,s,a){for(var h=0,u=i.length;hC&&Ci(t,e,i,n,u=(l+c)/2,d)&&(m=u,C=x),l=c}return isNaN(m)&&(m=r[o]),s?(s.push(m,d,C),s):[m,d,C]}function Xi(t,e,i,n){for(;e0}function ji(t,e,i,n,r){for(var o=void 0!==r&&r,s=0,a=i.length;s0}}else if(t.type==wt){var n=this.handleDownEvent(t);n&&t.preventDefault(),this.handlingDownUpSequence=n,e=this.stopDown(n)}else t.type==xt&&this.handleMoveEvent(t);return!e},e.prototype.handleMoveEvent=function(t){},e.prototype.handleUpEvent=function(t){return!1},e.prototype.stopDown=function(t){return t},e.prototype.updateTrackedPointers_=function(t){if(function(t){var e=t.type;return e===wt||e===Ct||e===Et}(t)){var e=t.pointerEvent,i=e.pointerId.toString();t.type==Et?delete this.trackedPointers_[i]:(t.type==wt||i in this.trackedPointers_)&&(this.trackedPointers_[i]=e),this.targetPointers=k(this.trackedPointers_)}},e}(function(t){function e(e){t.call(this),e.handleEvent&&(this.handleEvent=e.handleEvent),this.map_=null,this.setActive(!0)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getActive=function(){return this.get(Ki)},e.prototype.getMap=function(){return this.map_},e.prototype.handleEvent=function(t){return!0},e.prototype.setActive=function(t){this.set(Ki,t)},e.prototype.setMap=function(t){this.map_=t},e}(ft)),Hi="VECTOR",Ji="opacity",Zi="visible",$i="extent",Qi="zIndex",tn="maxResolution",en="minResolution",nn="source",rn="precompose",on="undefined",sn="ready";var an=function(t){function e(e){var i=F({},e);delete i.source,t.call(this,i),this.mapPrecomposeKey_=null,this.mapRenderKey_=null,this.sourceChangeKey_=null,e.map&&this.setMap(e.map),G(this,pt(nn),this.handleSourcePropertyChange_,this);var n=e.source?e.source:null;this.setSource(n)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getLayersArray=function(t){var e=t||[];return e.push(this),e},e.prototype.getLayerStatesArray=function(t){var e=t||[];return e.push(this.getLayerState()),e},e.prototype.getSource=function(){return this.get(nn)||null},e.prototype.getSourceState=function(){var t=this.getSource();return t?t.getState():on},e.prototype.handleSourceChange_=function(){this.changed()},e.prototype.handleSourcePropertyChange_=function(){this.sourceChangeKey_&&(T(this.sourceChangeKey_),this.sourceChangeKey_=null);var t=this.getSource();t&&(this.sourceChangeKey_=G(t,W,this.handleSourceChange_,this)),this.changed()},e.prototype.setMap=function(t){this.mapPrecomposeKey_&&(T(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(T(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=G(t,rn,(function(t){var e=t,i=this.getLayerState();i.managed=!1,void 0===this.getZIndex()&&(i.zIndex=1/0),e.frameState.layerStatesArray.push(i),e.frameState.layerStates[o(this)]=i}),this),this.mapRenderKey_=G(this,W,t.render,t),this.changed())},e.prototype.setSource=function(t){this.set(nn,t)},e}(function(t){function e(e){t.call(this);var i=F({},e);i[Ji]=void 0!==e.opacity?e.opacity:1,i[Zi]=void 0===e.visible||e.visible,i[Qi]=e.zIndex,i[tn]=void 0!==e.maxResolution?e.maxResolution:1/0,i[en]=void 0!==e.minResolution?e.minResolution:0,this.setProperties(i),this.state_=null,this.type}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getType=function(){return this.type},e.prototype.getLayerState=function(){var t=this.state_||{layer:this,managed:!0};return t.opacity=h(this.getOpacity(),0,1),t.sourceState=this.getSourceState(),t.visible=this.getVisible(),t.extent=this.getExtent(),t.zIndex=this.getZIndex()||0,t.maxResolution=this.getMaxResolution(),t.minResolution=Math.max(this.getMinResolution(),0),this.state_=t,t},e.prototype.getLayersArray=function(t){return n()},e.prototype.getLayerStatesArray=function(t){return n()},e.prototype.getExtent=function(){return this.get($i)},e.prototype.getMaxResolution=function(){return this.get(tn)},e.prototype.getMinResolution=function(){return this.get(en)},e.prototype.getOpacity=function(){return this.get(Ji)},e.prototype.getSourceState=function(){return n()},e.prototype.getVisible=function(){return this.get(Zi)},e.prototype.getZIndex=function(){return this.get(Qi)},e.prototype.setExtent=function(t){this.set($i,t)},e.prototype.setMaxResolution=function(t){this.set(tn,t)},e.prototype.setMinResolution=function(t){this.set(en,t)},e.prototype.setOpacity=function(t){this.set(Ji,t)},e.prototype.setVisible=function(t){this.set(Zi,t)},e.prototype.setZIndex=function(t){this.set(Qi,t)},e}(ft)),hn="vector",un=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.checksum_=void 0};un.prototype.clone=function(){var t=this.getColor();return new un({color:Array.isArray(t)?t.slice():t||void 0})},un.prototype.getColor=function(){return this.color_},un.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},un.prototype.getChecksum=function(){if(void 0===this.checksum_){var t=this.color_;t?Array.isArray(t)||"string"==typeof t?this.checksum_="f"+_(t):this.checksum_=o(this.color_):this.checksum_="f-"}return this.checksum_};var ln=un,cn=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.lineCap_=e.lineCap,this.lineDash_=void 0!==e.lineDash?e.lineDash:null,this.lineDashOffset_=e.lineDashOffset,this.lineJoin_=e.lineJoin,this.miterLimit_=e.miterLimit,this.width_=e.width,this.checksum_=void 0};cn.prototype.clone=function(){var t=this.getColor();return new cn({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})},cn.prototype.getColor=function(){return this.color_},cn.prototype.getLineCap=function(){return this.lineCap_},cn.prototype.getLineDash=function(){return this.lineDash_},cn.prototype.getLineDashOffset=function(){return this.lineDashOffset_},cn.prototype.getLineJoin=function(){return this.lineJoin_},cn.prototype.getMiterLimit=function(){return this.miterLimit_},cn.prototype.getWidth=function(){return this.width_},cn.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},cn.prototype.setLineCap=function(t){this.lineCap_=t,this.checksum_=void 0},cn.prototype.setLineDash=function(t){this.lineDash_=t,this.checksum_=void 0},cn.prototype.setLineDashOffset=function(t){this.lineDashOffset_=t,this.checksum_=void 0},cn.prototype.setLineJoin=function(t){this.lineJoin_=t,this.checksum_=void 0},cn.prototype.setMiterLimit=function(t){this.miterLimit_=t,this.checksum_=void 0},cn.prototype.setWidth=function(t){this.width_=t,this.checksum_=void 0},cn.prototype.getChecksum=function(){return void 0===this.checksum_&&(this.checksum_="s",this.color_?"string"==typeof this.color_?this.checksum_+=this.color_:this.checksum_+=o(this.color_):this.checksum_+="-",this.checksum_+=","+(void 0!==this.lineCap_?this.lineCap_.toString():"-")+","+(this.lineDash_?this.lineDash_.toString():"-")+","+(void 0!==this.lineDashOffset_?this.lineDashOffset_:"-")+","+(void 0!==this.lineJoin_?this.lineJoin_:"-")+","+(void 0!==this.miterLimit_?this.miterLimit_.toString():"-")+","+(void 0!==this.width_?this.width_.toString():"-")),this.checksum_};var pn=cn,fn=function(t){var e=t||{};this.geometry_=null,this.geometryFunction_=yn,void 0!==e.geometry&&this.setGeometry(e.geometry),this.fill_=void 0!==e.fill?e.fill:null,this.image_=void 0!==e.image?e.image:null,this.renderer_=void 0!==e.renderer?e.renderer:null,this.stroke_=void 0!==e.stroke?e.stroke:null,this.text_=void 0!==e.text?e.text:null,this.zIndex_=e.zIndex};fn.prototype.clone=function(){var t=this.getGeometry();return t&&"object"==typeof t&&(t=t.clone()),new fn({geometry:t,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})},fn.prototype.getRenderer=function(){return this.renderer_},fn.prototype.setRenderer=function(t){this.renderer_=t},fn.prototype.getGeometry=function(){return this.geometry_},fn.prototype.getGeometryFunction=function(){return this.geometryFunction_},fn.prototype.getFill=function(){return this.fill_},fn.prototype.setFill=function(t){this.fill_=t},fn.prototype.getImage=function(){return this.image_},fn.prototype.setImage=function(t){this.image_=t},fn.prototype.getStroke=function(){return this.stroke_},fn.prototype.setStroke=function(t){this.stroke_=t},fn.prototype.getText=function(){return this.text_},fn.prototype.setText=function(t){this.text_=t},fn.prototype.getZIndex=function(){return this.zIndex_},fn.prototype.setGeometry=function(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=yn,this.geometry_=t},fn.prototype.setZIndex=function(t){this.zIndex_=t};var dn=null;function _n(t,e){if(!dn){var i=new ln({color:"rgba(255,255,255,0.4)"}),n=new pn({color:"#3399CC",width:1.25});dn=[new fn({image:new ot({fill:i,stroke:n,radius:5}),fill:i,stroke:n})]}return dn}function gn(){var t={},e=[255,255,255,1],i=[0,153,255,1];return t[ce]=[new fn({fill:new ln({color:[255,255,255,.5]})})],t[de]=t[ce],t[ue]=[new fn({stroke:new pn({color:e,width:5})}),new fn({stroke:new pn({color:i,width:3})})],t[fe]=t[ue],t[ge]=t[ce].concat(t[ue]),t[he]=[new fn({image:new ot({radius:6,fill:new ln({color:i}),stroke:new pn({color:e,width:1.5})}),zIndex:1/0})],t[pe]=t[he],t[_e]=t[ce].concat(t[ue],t[he]),t}function yn(t){return t.getGeometry()}var vn=fn,mn="renderOrder",Cn=function(t){function e(e){var i=e||{},n=F({},i);delete n.style,delete n.renderBuffer,delete n.updateWhileAnimating,delete n.updateWhileInteracting,t.call(this,n),this.declutter_=void 0!==i.declutter&&i.declutter,this.renderBuffer_=void 0!==i.renderBuffer?i.renderBuffer:100,this.style_=null,this.styleFunction_=void 0,this.setStyle(i.style),this.updateWhileAnimating_=void 0!==i.updateWhileAnimating&&i.updateWhileAnimating,this.updateWhileInteracting_=void 0!==i.updateWhileInteracting&&i.updateWhileInteracting,this.renderMode_=i.renderMode||hn,this.type=Hi}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDeclutter=function(){return this.declutter_},e.prototype.setDeclutter=function(t){this.declutter_=t},e.prototype.getRenderBuffer=function(){return this.renderBuffer_},e.prototype.getRenderOrder=function(){return this.get(mn)},e.prototype.getStyle=function(){return this.style_},e.prototype.getStyleFunction=function(){return this.styleFunction_},e.prototype.getUpdateWhileAnimating=function(){return this.updateWhileAnimating_},e.prototype.getUpdateWhileInteracting=function(){return this.updateWhileInteracting_},e.prototype.setRenderOrder=function(t){this.set(mn,t)},e.prototype.setStyle=function(t){this.style_=void 0!==t?t:_n,this.styleFunction_=null===t?void 0:function(t){var e;if("function"==typeof t)e=t;else{var i;if(Array.isArray(t))i=t;else a("function"==typeof t.getZIndex,41),i=[t];e=function(){return i}}return e}(this.style_),this.changed()},e.prototype.getRenderMode=function(){return this.renderMode_},e}(an);Cn.prototype.getSource;var xn=Cn,wn="arraybuffer",En="json",Fn="text",Sn="xml";function kn(t,e){return function(t,e,i,n){return function(r,o,s){var a=new XMLHttpRequest;a.open("GET","function"==typeof t?t(r,o,s):t,!0),e.getType()==wn&&(a.responseType="arraybuffer"),a.onload=function(t){if(!a.status||a.status>=200&&a.status<300){var r,o=e.getType();o==En||o==Fn?r=a.responseText:o==Sn?(r=a.responseXML)||(r=(new DOMParser).parseFromString(a.responseText,"application/xml")):o==wn&&(r=a.response),r?i.call(this,e.readFeatures(r,{featureProjection:s}),e.readProjection(r),e.getLastExtent()):n.call(this)}else n.call(this)}.bind(this),a.onerror=function(){n.call(this)}.bind(this),a.send()}}(t,e,(function(t,e){"function"==typeof this.addFeatures&&this.addFeatures(t)}),j)}function Mn(t,e){return[[-1/0,-1/0,1/0,1/0]]}function In(t){return t?Array.isArray(t)?function(e){return t}:"function"==typeof t?t:function(e){return[t]}:null}var Pn=function(t){function e(e){t.call(this),this.projection_=Ve(e.projection),this.attributions_=In(e.attributions),this.attributionsCollapsible_=void 0===e.attributionsCollapsible||e.attributionsCollapsible,this.loading=!1,this.state_=void 0!==e.state?e.state:sn,this.wrapX_=void 0!==e.wrapX&&e.wrapX}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getAttributions=function(){return this.attributions_},e.prototype.getAttributionsCollapsible=function(){return this.attributionsCollapsible_},e.prototype.getProjection=function(){return this.projection_},e.prototype.getResolutions=function(){return n()},e.prototype.getState=function(){return this.state_},e.prototype.getWrapX=function(){return this.wrapX_},e.prototype.refresh=function(){this.changed()},e.prototype.setAttributions=function(t){this.attributions_=In(t),this.changed()},e.prototype.setState=function(t){this.state_=t,this.changed()},e}(ft),Rn="addfeature",bn="changefeature",Dn="clear",An="removefeature",Gn=i("A1R+"),On=i.n(Gn),Ln=function(t){this.rbush_=On()(t,void 0),this.items_={}};Ln.prototype.insert=function(t,e){var i={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3],value:e};this.rbush_.insert(i),this.items_[o(e)]=i},Ln.prototype.load=function(t,e){for(var i=new Array(e.length),n=0,r=e.length;n2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]];if(0===o[1])t=[[i,i,i,i]];else{var s=[-1*o[1],o[0]],a=o[0]/o[1],h=(r[0]+a*(n[1]-r[1])-n[0])/(s[0]-s[1]*a),u=[h*s[0],h*s[1]];t=[[[i[0]-u[0],i[1]-u[1]],[n[0]-u[0],n[1]-u[1]],[n[0]+u[0],n[1]+u[1]],[i[0]+u[0],i[1]+u[1]]]]}}else t=[t];var l=e;return l?l.setCoordinates(t):l=new jn(t),l};else if(this.type_===ve)this.minPoints_=3,this.maxPoints_=3,r=function(t,e){if(t.length>2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]],s=[i[0]+.5*o[0],i[1]+.5*o[1]];if(0===o[1])t=[[i,i,i,i]];else{var a=[-1*o[1],o[0]],h=o[0]/o[1],u=(r[0]+h*(n[1]-r[1])-n[0])/(a[0]-a[1]*h),l=[u*a[0],u*a[1]];t=[[[i[0],i[1]],[s[0]-l[0],s[1]-l[1]],[n[0],n[1]],[s[0]+l[0],s[1]+l[1]]]]}}else t=[t];var c=e;return c?c.setCoordinates(t):c=new qn(t),c};else{var o,s=this.mode_;s===Bn?o=Di:s===Nn?o=Ri:s===Wn&&(o=Wi),r=function(t,e){var i=e;return i?s===Wn?t[0].length?i.setCoordinates([t[0].concat([t[0][0]])]):i.setCoordinates([]):i.setCoordinates(t):i=new o(t),i}}this.geometryFunction_=r,this.dragVertexDelay_=void 0!==e.dragVertexDelay?e.dragVertexDelay:500,this.finishCoordinate_=null,this.sketchFeature_=null,this.sketchPoint_=null,this.sketchCoords_=null,this.sketchLine_=null,this.sketchLineCoords_=null,this.squaredClickTolerance_=e.clickTolerance?e.clickTolerance*e.clickTolerance:36,this.overlay_=new xn({source:new Yn({useSpatialIndex:!1,wrapX:!!e.wrapX&&e.wrapX}),style:e.style?e.style:(n=gn(),function(t,e){return n[t.getGeometry().getType()]}),updateWhileInteracting:!0}),this.geometryName_=e.geometryName,this.condition_=e.condition?e.condition:bt,this.freehandCondition_,e.freehand?this.freehandCondition_=Pt:this.freehandCondition_=e.freehandCondition?e.freehandCondition:Dt,G(this,pt(Ki),this.updateState_,this)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setMap=function(e){t.prototype.setMap.call(this,e),this.updateState_()},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleEvent=function(e){e.originalEvent.type===z&&e.preventDefault(),this.freehand_=this.mode_!==Bn&&this.freehandCondition_(e);var i=e.type===xt,n=!0;!this.freehand_&&this.lastDragTime_&&e.type===Ct&&(Date.now()-this.lastDragTime_>=this.dragVertexDelay_?(this.downPx_=e.pixel,this.shouldHandle_=!this.freehand_,i=!0):this.lastDragTime_=void 0,this.shouldHandle_&&void 0!==this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0));return this.freehand_&&e.type===Ct&&null!==this.sketchFeature_?(this.addToDrawing_(e),n=!1):this.freehand_&&e.type===wt?n=!1:i?(n=e.type===xt)&&this.freehand_?n=this.handlePointerMove_(e):("mouse"==e.pointerEvent.pointerType||e.type===Ct&&void 0===this.downTimeout_)&&this.handlePointerMove_(e):e.type===mt&&(n=!1),t.prototype.handleEvent.call(this,e)&&n},e.prototype.handleDownEvent=function(t){return this.shouldHandle_=!this.freehand_,this.freehand_?(this.downPx_=t.pixel,this.finishCoordinate_||this.startDrawing_(t),!0):!!this.condition_(t)&&(this.lastDragTime_=Date.now(),this.downTimeout_=setTimeout(function(){this.handlePointerMove_(new Ft(xt,t.map,t.pointerEvent,!1,t.frameState))}.bind(this),this.dragVertexDelay_),this.downPx_=t.pixel,!0)},e.prototype.handleUpEvent=function(t){var e=!0;this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0),this.handlePointerMove_(t);var i=this.mode_===Vn;return this.shouldHandle_?(this.finishCoordinate_?this.freehand_||i?this.finishDrawing():this.atFinish_(t)?this.finishCondition_(t)&&this.finishDrawing():this.addToDrawing_(t):(this.startDrawing_(t),this.mode_===Bn&&this.finishDrawing()),e=!1):this.freehand_&&(this.finishCoordinate_=null,this.abortDrawing_()),!e&&this.stopClick_&&t.stopPropagation(),e},e.prototype.handlePointerMove_=function(t){if(this.downPx_&&(!this.freehand_&&this.shouldHandle_||this.freehand_&&!this.shouldHandle_)){var e=this.downPx_,i=t.pixel,n=e[0]-i[0],r=e[1]-i[1],o=n*n+r*r;if(this.shouldHandle_=this.freehand_?o>this.squaredClickTolerance_:o<=this.squaredClickTolerance_,!this.shouldHandle_)return!0}return this.finishCoordinate_?this.modifyDrawing_(t):this.createOrUpdateSketchPoint_(t),!0},e.prototype.atFinish_=function(t){var e=!1;if(this.sketchFeature_){var i=!1,n=[this.finishCoordinate_];if(this.mode_===Nn)i=this.sketchCoords_.length>this.minPoints_;else if(this.mode_===Wn){var r=this.sketchCoords_;i=r[0].length>this.minPoints_,n=[r[0][0],r[0][r[0].length-2]]}if(i)for(var o=t.map,s=0,a=n.length;s=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),this.geometryFunction_(i,r)):this.mode_===Wn&&((i=this.sketchCoords_[0]).length>=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),e&&(this.finishCoordinate_=i[0]),this.geometryFunction_(this.sketchCoords_,r)),this.updateSketchFeatures_(),e&&this.finishDrawing()},e.prototype.removeLastPoint=function(){if(this.sketchFeature_){var t,e=this.sketchFeature_.getGeometry();this.mode_===Nn?((t=this.sketchCoords_).splice(-2,1),this.geometryFunction_(t,e),t.length>=2&&(this.finishCoordinate_=t[t.length-2].slice())):this.mode_===Wn&&((t=this.sketchCoords_[0]).splice(-2,1),this.sketchLine_.getGeometry().setCoordinates(t),this.geometryFunction_(this.sketchCoords_,e)),0===t.length&&(this.finishCoordinate_=null),this.updateSketchFeatures_()}},e.prototype.finishDrawing=function(){var t=this.abortDrawing_();if(t){var e=this.sketchCoords_,i=t.getGeometry();this.mode_===Nn?(e.pop(),this.geometryFunction_(e,i)):this.mode_===Wn&&(e[0].pop(),this.geometryFunction_(e,i),e=i.getCoordinates()),this.type_===pe?t.setGeometry(new Ai([e])):this.type_===fe?t.setGeometry(new bi([e])):this.type_===de&&t.setGeometry(new Vi([e])),this.dispatchEvent(new Hn(Un,t)),this.features_&&this.features_.push(t),this.source_&&this.source_.addFeature(t)}},e.prototype.abortDrawing_=function(){this.finishCoordinate_=null;var t=this.sketchFeature_;return t&&(this.sketchFeature_=null,this.sketchPoint_=null,this.sketchLine_=null,this.overlay_.getSource().clear(!0)),t},e.prototype.extend=function(t){var e=t.getGeometry();this.sketchFeature_=t,this.sketchCoords_=e.getCoordinates();var i=this.sketchCoords_[this.sketchCoords_.length-1];this.finishCoordinate_=i.slice(),this.sketchCoords_.push(i.slice()),this.updateSketchFeatures_(),this.dispatchEvent(new Hn(Kn,this.sketchFeature_))},e.prototype.updateSketchFeatures_=function(){var t=[];this.sketchFeature_&&t.push(this.sketchFeature_),this.sketchLine_&&t.push(this.sketchLine_),this.sketchPoint_&&t.push(this.sketchPoint_);var e=this.overlay_.getSource();e.clear(!0),e.addFeatures(t)},e.prototype.updateState_=function(){var t=this.getMap(),e=this.getActive();t&&e||this.abortDrawing_(),this.overlay_.setMap(e?t:null)},e}(Ui),Zn=Vue.resource("/api/v1/volumes{/id}/export-area"),$n="modifystart",Qn="modifyend",tr=function(t){function e(e,i,n){t.call(this,e),this.features=i,this.mapBrowserEvent=n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(B);function er(t,e){return t.index-e.index}function ir(t,e){var i,n,r=e.geometry;if(r.getType()===ge){var o=r;if(1===e.index){var s=Mt(o.getCenter(),t),a=Math.sqrt(s)-o.getRadius();return a*a}}return i=t,n=e.segment,Mt(i,St(i,n))}function nr(t,e){var i=e.geometry;return i.getType()===ge&&1===e.index||i.getType()===ve||i.getType()===ye?i.getClosestPoint(t):St(t,e.segment)}var rr=function(t){function e(e){var i,n;if(t.call(this,e),this.condition_=e.condition?e.condition:At,this.defaultDeleteCondition_=function(t){return function(t){var e=t.originalEvent;return e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey}(t)&&function(t){return t.type==vt}(t)},this.deleteCondition_=e.deleteCondition?e.deleteCondition:this.defaultDeleteCondition_,this.insertVertexCondition_=e.insertVertexCondition?e.insertVertexCondition:Pt,this.vertexFeature_=null,this.vertexSegments_=null,this.lastPixel_=[0,0],this.ignoreNextSingleClick_=!1,this.modified_=!1,this.rBush_=new Tn,this.pixelTolerance_=void 0!==e.pixelTolerance?e.pixelTolerance:10,this.snappedToVertex_=!1,this.changingFeature_=!1,this.dragSegments_=[],this.overlay_=new xn({source:new Yn({useSpatialIndex:!1,wrapX:!!e.wrapX}),style:e.style?e.style:(i=gn(),function(t,e){return i[he]}),updateWhileAnimating:!0,updateWhileInteracting:!0}),this.SEGMENT_WRITERS_={Point:this.writePointGeometry_,LineString:this.writeLineStringGeometry_,LinearRing:this.writeLineStringGeometry_,Polygon:this.writePolygonGeometry_,MultiPoint:this.writeMultiPointGeometry_,MultiLineString:this.writeMultiLineStringGeometry_,MultiPolygon:this.writeMultiPolygonGeometry_,Rectangle:this.writePolygonGeometry_,Ellipse:this.writePolygonGeometry_,Circle:this.writeCircleGeometry_,GeometryCollection:this.writeGeometryCollectionGeometry_},this.source_=null,e.source?(this.source_=e.source,n=new gt(this.source_.getFeatures()),G(this.source_,Rn,this.handleSourceAdd_,this),G(this.source_,An,this.handleSourceRemove_,this)):n=e.features,!n)throw new Error("The modify interaction requires features or a source");this.features_=n,this.features_.forEach(this.addFeature_.bind(this)),G(this.features_,st,this.handleFeatureAdd_,this),G(this.features_,at,this.handleFeatureRemove_,this),this.lastPointerEvent_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.addFeature_=function(t){var e=t.getGeometry();e&&e.getType()in this.SEGMENT_WRITERS_&&this.SEGMENT_WRITERS_[e.getType()].call(this,t,e);var i=this.getMap();i&&i.isRendered()&&this.getActive()&&this.handlePointerAtPixel_(this.lastPixel_,i),G(t,W,this.handleFeatureChange_,this)},e.prototype.willModifyFeatures_=function(t){this.modified_||(this.modified_=!0,this.dispatchEvent(new tr($n,this.features_,t)))},e.prototype.removeFeature_=function(t){this.removeFeatureSegmentData_(t),this.vertexFeature_&&0===this.features_.getLength()&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),L(t,W,this.handleFeatureChange_,this)},e.prototype.removeFeatureSegmentData_=function(t){var e=this.rBush_,i=[];e.forEach((function(e){t===e.feature&&i.push(e)}));for(var n=i.length-1;n>=0;--n)e.remove(i[n])},e.prototype.setActive=function(e){this.vertexFeature_&&!e&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),t.prototype.setActive.call(this,e)},e.prototype.setMap=function(e){this.overlay_.setMap(e),t.prototype.setMap.call(this,e)},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleSourceAdd_=function(t){t.feature&&this.features_.push(t.feature)},e.prototype.handleSourceRemove_=function(t){t.feature&&this.features_.remove(t.feature)},e.prototype.handleFeatureAdd_=function(t){this.addFeature_(t.element)},e.prototype.handleFeatureChange_=function(t){if(!this.changingFeature_){var e=t.target;this.removeFeature_(e),this.addFeature_(e)}},e.prototype.handleFeatureRemove_=function(t){var e=t.element;this.removeFeature_(e)},e.prototype.writePointGeometry_=function(t,e){var i=e.getCoordinates(),n={feature:t,geometry:e,segment:[i,i]};this.rBush_.insert(e.getExtent(),n)},e.prototype.writeMultiPointGeometry_=function(t,e){for(var i=e.getCoordinates(),n=0,r=i.length;n=0;--_)this.insertVertex_.apply(this,n[_])}return!!this.vertexFeature_},e.prototype.handleUpEvent=function(t){for(var e=this.dragSegments_.length-1;e>=0;--e){var i=this.dragSegments_[e][0],n=i.geometry;if(n.getType()===ye||n.getType()===ve)this.features_.remove(i.feature),this.features_.push(i.feature);else if(n.getType()===ge){var r=n.getCenter(),o=i.featureSegments[0],s=i.featureSegments[1];o.segment[0]=o.segment[1]=r,s.segment[0]=s.segment[1]=r,this.rBush_.update(Ut(r),o),this.rBush_.update(n.getExtent(),s)}else this.rBush_.update(jt(i.segment),i)}return this.modified_&&(this.dispatchEvent(new tr(Qn,this.features_,t)),this.modified_=!1),!1},e.prototype.handlePointerMove_=function(t){this.lastPixel_=t.pixel,this.handlePointerAtPixel_(t.pixel,t.map)},e.prototype.handlePointerAtPixel_=function(t,e){var i,n,r,s=e.getCoordinateFromPixel(t),a=(i=Ut(s),n=e.getView().getResolution()*this.pixelTolerance_,r?(r[0]=i[0]-n,r[1]=i[1]-n,r[2]=i[2]+n,r[3]=i[3]+n,r):[i[0]-n,i[1]-n,i[2]+n,i[3]+n]),h=this.rBush_.getInExtent(a);if(h.length>0){h.sort((function(t,e){return ir(s,t)-ir(s,e)}));var u=h[0],l=u.segment,c=nr(s,u),p=e.getPixelFromCoordinate(c),f=It(t,p);if(f<=this.pixelTolerance_){var d={};if(u.geometry.getType()===ge&&1===u.index)this.snappedToVertex_=!0,this.createOrUpdateVertexFeature_(c);else{var _=e.getPixelFromCoordinate(l[0]),g=e.getPixelFromCoordinate(l[1]),y=Mt(p,_),v=Mt(p,g);f=Math.sqrt(Math.min(y,v)),this.snappedToVertex_=f<=this.pixelTolerance_,this.snappedToVertex_&&(c=y>v?l[1]:l[0]),this.createOrUpdateVertexFeature_(c);for(var m=1,C=h.length;m=0;--r)c=o((l=(i=p[r])[0]).feature),l.depth&&(c+="-"+l.depth.join("-")),c in f||(f[c]={}),0===i[1]?(f[c].right=l,f[c].index=l.index):1==i[1]&&(f[c].left=l,f[c].index=l.index+1);for(c in f){switch(u=f[c].right,a=f[c].left,(h=(s=f[c].index)-1)<0&&(h=0),t=e=(n=(l=void 0!==a?a:u).geometry).getCoordinates(),d=!1,n.getType()){case fe:e[l.depth[0]].length>2&&(e[l.depth[0]].splice(s,1),d=!0);break;case ue:e.length>2&&(e.splice(s,1),d=!0);break;case de:t=t[l.depth[1]];case ce:(t=t[l.depth[0]]).length>4&&(s==t.length-1&&(s=0),t.splice(s,1),d=!0,0===s&&(t.pop(),t.push(t[0]),h=t.length-1))}if(d){this.setGeometryCoordinates_(n,e);var _=[];if(void 0!==a&&(this.rBush_.remove(a),_.push(a.segment[0])),void 0!==u&&(this.rBush_.remove(u),_.push(u.segment[1])),void 0!==a&&void 0!==u){var g={depth:l.depth,feature:l.feature,geometry:l.geometry,index:h,segment:_};this.rBush_.insert(jt(g.segment),g)}this.updateSegmentIndices_(n,s,l.depth,-1),this.vertexFeature_&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),p.length=0}}return d},e.prototype.setGeometryCoordinates_=function(t,e){this.changingFeature_=!0,t.setCoordinates(e),this.changingFeature_=!1},e.prototype.updateSegmentIndices_=function(t,e,i,n){this.rBush_.forEachInExtent(t.getExtent(),(function(r){r.geometry===t&&(void 0===i||void 0===r.depth||function(t,e){var i=t.length;if(i!==e.length)return!1;for(var n=0;ne&&(r.index+=n)}))},e}(Ui),or=biigle.$require("events"),sr=biigle.$require("messages").handleErrorResponse,ar=biigle.$require("annotations.components.settingsTabPlugins");ar&&(ar.exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null,volumeId:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},layer:function(){return new xn({source:new Yn({features:new gt}),style:[new vn({stroke:new pn({color:"white",width:4}),image:new ot({radius:6,fill:new ln({color:"#666666"}),stroke:new pn({color:"white",width:2,lineDash:[2]})})}),new vn({stroke:new pn({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new Jn({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(t,e){t.length>1&&(t=[t[0],[t[0][0],t[1][1]],t[1],[t[1][0],t[0][1]]]);var i=e;return i?i.setCoordinates([t]):i=new jn([t]),i}})},modifyInteraction:function(){return new rr({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:Rt})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){var t=this;if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),Zn.delete({id:this.volumeId}).then((function(){return t.exportArea=null})).catch((function(t){e.addFeature(i),sr(t)}))}},updateCurrentImage:function(t,e){this.currentImage=e},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var t=this.currentImage.tiled?0:this.height,e=new jn([[[this.exportArea[0],t-this.exportArea[1]],[this.exportArea[0],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[1]]]]);this.layer.getSource().addFeature(new yt({geometry:e}))}},handleModifyend:function(t){this.updateExportArea(t.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(t){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),this.updateExportArea(t.feature).catch((function(){e.clear(),i&&e.addFeature(i)}))},updateExportArea:function(t){var e=this,i=t.getGeometry().getCoordinates()[0],n=this.currentImage.tiled?0:this.height;i=[i[0][0],n-i[0][1],i[2][0],n-i[2][1]].map(Math.round);var r=Zn.save({id:this.volumeId},{coordinates:i}).then((function(){return e.exportArea=i}));return r.catch(sr),r},extendMap:function(t){t.addLayer(this.layer),t.addInteraction(this.drawInteraction),t.addInteraction(this.modifyInteraction)}},watch:{opacity:function(t,e){t<1?this.settings.set("exportAreaOpacity",t):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(t)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.volumeId=biigle.$require("annotations.volumeId"),this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend),or.$on("images.change",this.updateCurrentImage),or.$on("annotations.map.init",this.extendMap)}})},"A1R+":function(t,e,i){"use strict";t.exports=r,t.exports.default=r;var n=i("YcpW");function r(t,e){if(!(this instanceof r))return new r(t,e);this._maxEntries=Math.max(4,t||9),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),e&&this._initFormat(e),this.clear()}function o(t,e,i){if(!i)return e.indexOf(t);for(var n=0;n=t.minX&&e.maxY>=t.minY}function _(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function g(t,e,i,r,o){for(var s,a=[e,i];a.length;)(i=a.pop())-(e=a.pop())<=r||(s=e+Math.ceil((i-e)/r/2)*r,n(t,s,e,i,o),a.push(e,s,s,i))}r.prototype={all:function(){return this._all(this.data,[])},search:function(t){var e=this.data,i=[],n=this.toBBox;if(!d(t,e))return i;for(var r,o,s,a,h=[];e;){for(r=0,o=e.children.length;r=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(r,o,e)},_split:function(t,e){var i=t[e],n=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,n);var o=this._chooseSplitIndex(i,r,n),a=_(i.children.splice(o,i.children.length-o));a.height=i.height,a.leaf=i.leaf,s(i,this.toBBox),s(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(i,a)},_splitRoot:function(t,e){this.data=_([t,e]),this.data.height=t.height+1,this.data.leaf=!1,s(this.data,this.toBBox)},_chooseSplitIndex:function(t,e,i){var n,r,o,s,h,u,l,p,f,d,_,g,y,v;for(u=l=1/0,n=e;n<=i-e;n++)r=a(t,0,n,this.toBBox),o=a(t,n,i,this.toBBox),f=r,d=o,_=void 0,g=void 0,y=void 0,v=void 0,_=Math.max(f.minX,d.minX),g=Math.max(f.minY,d.minY),y=Math.min(f.maxX,d.maxX),v=Math.min(f.maxY,d.maxY),s=Math.max(0,y-_)*Math.max(0,v-g),h=c(r)+c(o),s=e;r--)o=t.children[r],h(l,t.leaf?s(o):o),c+=p(l);return c},_adjustParentBBoxes:function(t,e,i){for(var n=i;n>=0;n--)h(e[n],t)},_condense:function(t){for(var e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children).splice(e.indexOf(t[i]),1):this.clear():s(t[i],this.toBBox)},_initFormat:function(t){var e=["return a"," - b",";"];this.compareMinX=new Function("a","b",e.join(t[0])),this.compareMinY=new Function("a","b",e.join(t[1])),this.toBBox=new Function("a","return {minX: a"+t[0]+", minY: a"+t[1]+", maxX: a"+t[2]+", maxY: a"+t[3]+"};")}}},YcpW:function(t,e,i){t.exports=function(){"use strict";function t(t,e,i){var n=t[e];t[e]=t[i],t[i]=n}function e(t,e){return te?1:0}return function(i,n,r,o,s){!function e(i,n,r,o,s){for(;o>r;){if(o-r>600){var a=o-r+1,h=n-r+1,u=Math.log(a),l=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*l*(a-l)/a)*(h-a/2<0?-1:1),p=Math.max(r,Math.floor(n-h*l/a+c)),f=Math.min(o,Math.floor(n+(a-h)*l/a+c));e(i,n,p,f,s)}var d=i[n],_=r,g=o;for(t(i,r,n),s(i[o],d)>0&&t(i,r,o);_0;)g--}0===s(i[r],d)?t(i,r,g):(g++,t(i,g,o)),g<=n&&(r=g+1),n<=g&&(o=g-1)}}(i,n,r||0,o||i.length-1,s||e)}}()}}); \ No newline at end of file +!function(t){var e={};function i(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)i.d(n,r,function(e){return t[e]}.bind(null,r));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="/",i(i.s=1)}({1:function(t,e,i){t.exports=i("2R1P")},"2R1P":function(t,e,i){"use strict";function n(){return function(){throw new Error("Unimplemented abstract method.")}()}i.r(e);var r=0;function o(t){return t.ol_uid||(t.ol_uid=String(++r))}var s=function(t){function e(e){var i="Assertion failed. See https://openlayers.org/en/"+("v"+"5.3.0".split("-")[0])+"/doc/errors/#"+e+" for details.";t.call(this,i),this.code=e,this.name="AssertionError",this.message=i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error);function a(t,e){if(!t)throw new s(e)}function h(t,e,i){return Math.min(Math.max(t,e),i)}var u="cosh"in Math?Math.cosh:function(t){var e=Math.exp(t);return(e+1/e)/2};function l(t,e,i,n,r,o){var s=r-i,a=o-n;if(0!==s||0!==a){var h=((t-i)*s+(e-n)*a)/(s*s+a*a);h>1?(i=r,n=o):h>0&&(i+=s*h,n+=a*h)}return c(t,e,i,n)}function c(t,e,i,n){var r=i-t,o=n-e;return r*r+o*o}function p(t,e,i){return t+i*(e-t)}var f=/^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i,d=/^([a-z]*)$/i;function _(t){return"string"==typeof t?t:y(t)}!function(){var t={},e=0}();function g(t){return t[0]=h(t[0]+.5|0,0,255),t[1]=h(t[1]+.5|0,0,255),t[2]=h(t[2]+.5|0,0,255),t[3]=h(t[3],0,1),t}function y(t){var e=t[0];e!=(0|e)&&(e=e+.5|0);var i=t[1];i!=(0|i)&&(i=i+.5|0);var n=t[2];return n!=(0|n)&&(n=n+.5|0),"rgba("+e+","+i+","+n+","+(void 0===t[3]?1:t[3])+")"}function v(t){return Array.isArray(t)?y(t):t}function m(t,e){var i=document.createElement("canvas");return t&&(i.width=t),e&&(i.height=e),i.getContext("2d")}var C="undefined"!=typeof navigator?navigator.userAgent.toLowerCase():"",x=(C.indexOf("firefox"),-1!==C.indexOf("safari")&&C.indexOf("chrom"),-1!==C.indexOf("webkit")&&C.indexOf("edge"),C.indexOf("macintosh"),window.devicePixelRatio,function(){var t=!1;try{t=!!document.createElement("canvas").getContext("2d").setLineDash}catch(t){}return t}()),w=(navigator,window,window,navigator.msPointerEnabled,2),E=function(){var t,e={};return function(i){if(t||(t=document.createElement("div").style),!(i in e)){t.font=i;var n=t.fontFamily;if(t.font="",!n)return null;e[i]=n.split(/,\s?/)}return e[i]}}(),F="function"==typeof Object.assign?Object.assign:function(t,e){var i=arguments;if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(t),r=1,o=arguments.length;r0},e.prototype.removeEventListener=function(t,e){var i=this.listeners_[t];if(i){var n=i.indexOf(e);t in this.pendingRemovals_?(i[n]=j,++this.pendingRemovals_[t]):(i.splice(n,1),0===i.length&&delete this.listeners_[t])}},e}(P),W="change",V="clear",z="contextmenu",K="dblclick",U=function(t){function e(e){t.call(this),this.highWaterMark=void 0!==e?e:2048,this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.canExpireCache=function(){return this.getCount()>this.highWaterMark},e.prototype.clear=function(){this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null,this.dispatchEvent(V)},e.prototype.containsKey=function(t){return this.entries_.hasOwnProperty(t)},e.prototype.forEach=function(t,e){for(var i=this.oldest_;i;)t.call(e,i.value_,i.key_,this),i=i.newer},e.prototype.get=function(t){var e=this.entries_[t];return a(void 0!==e,15),e===this.newest_||(e===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(e.newer.older=e.older,e.older.newer=e.newer),e.newer=null,e.older=this.newest_,this.newest_.newer=e,this.newest_=e),e.value_},e.prototype.remove=function(t){var e=this.entries_[t];return a(void 0!==e,15),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_},e.prototype.getCount=function(){return this.count_},e.prototype.getKeys=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.key_;return e},e.prototype.getValues=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.value_;return e},e.prototype.peekLast=function(){return this.oldest_.value_},e.prototype.peekLastKey=function(){return this.oldest_.key_},e.prototype.peekFirstKey=function(){return this.newest_.key_},e.prototype.pop=function(){var t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_},e.prototype.replace=function(t,e){this.get(t),this.entries_[t].value_=e},e.prototype.set=function(t,e){a(!(t in this.entries_),16);var i={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=i:this.oldest_=i,this.newest_=i,this.entries_[t]=i,++this.count_},e.prototype.setSize=function(t){this.highWaterMark=t},e.prototype.prune=function(){for(;this.canExpireCache();)this.pop()},e}(N);new Array(6);var H=[0,0,0,1],J=[0,0,0,1],Z=new U,$={},Q=null,tt={};!function(){var t,e,i=$,n=["monospace","serif"],r=n.length,o="wmytzilWMYTZIL@#/&?$%10";function s(t){for(var i=et(),s=100;s<=700;s+=300){for(var a=s+" ",h=!0,u=0;u0;)this.pop()},e.prototype.extend=function(t){for(var e=0,i=t.length;e=1?(i=l,n=c):(i=h+d*p,n=u+d*f),[i,n]}function kt(t,e){for(var i=!0,n=t.length-1;n>=0;--n)if(t[n]!=e[n]){i=!1;break}return i}function Mt(t,e){var i=t[0]-e[0],n=t[1]-e[1];return i*i+n*n}function It(t,e){return Math.sqrt(Mt(t,e))}var Pt=X,Rt=Y,bt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey},Dt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&e.shiftKey},At=function(t){var e=t.pointerEvent;return a(void 0!==e,56),e.isPrimary&&0===e.button},Gt=0,Ot=1,Lt=2,Tt=4,Xt=8,Yt=16;function jt(t){for(var e=Vt(),i=0,n=t.length;ir&&(h|=Tt),ao&&(h|=Lt),h===Gt&&(h=Ot),h}function Vt(){return[1/0,1/0,-1/0,-1/0]}function zt(t,e,i,n,r){return r?(r[0]=t,r[1]=e,r[2]=i,r[3]=n,r):[t,e,i,n]}function Kt(t){return zt(1/0,1/0,-1/0,-1/0,t)}function Ut(t,e){var i=t[0],n=t[1];return zt(i,n,i,n,e)}function Ht(t,e,i,n,r){return $t(Kt(r),t,e,i,n)}function Jt(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function Zt(t,e){e[0]t[2]&&(t[2]=e[0]),e[1]t[3]&&(t[3]=e[1])}function $t(t,e,i,n,r){for(;i=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}var he="Point",ue="LineString",le="LinearRing",ce="Polygon",pe="MultiPoint",fe="MultiLineString",de="MultiPolygon",_e="GeometryCollection",ge="Circle",ye="Rectangle",ve="Ellipse";function me(t,e,i,n,r,o){for(var s=o||[],a=0,h=e;h1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=Se,a=0;as?h=s:h<-s&&(h=-s),o[a+1]=h}return o}function be(t,e,i){var n=t.length,r=i>1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=0;s=e[0]||(t[1]<=e[1]&&t[3]>=e[1]||te(t,this.intersectsCoordinate,this))}return!1},e.prototype.setCenter=function(t){var e=this.stride,i=this.flatCoordinates[e]-this.flatCoordinates[0],n=t.slice();n[e]=n[0]+i;for(var r=1;re?1:t1)a=i;else{if(f>0){for(var d=0;dr&&(r=u),o=a,s=h}return r}function ci(t,e,i,n,r){for(var o=0,s=i.length;o>1)],e))<0?s=n+1:(a=n,h=!r);return h?s:~s}(f,y);if(v<0){var m=(y-f[-v-2])/(f[-v-1]-f[-v-2]),C=e+(-v-2)*n;s=p(t[C],t[C+n],m),a=p(t[C+1],t[C+n+1],m)}else s=t[e+v*n],a=t[e+v*n+1]}return o?(o[0]=s,o[1]=a,o):[s,a]}function yi(t,e,i,n,r,o){if(i==e)return null;var s;if(r>1;ro&&(u-a)*(o-h)-(r-a)*(l-h)>0&&s++:l<=o&&(u-a)*(o-h)-(r-a)*(l-h)<0&&s--,a=u,h=l}return 0!==s}function Ci(t,e,i,n,r,o){if(0===i.length)return!1;if(!mi(t,e,i[0],n,r,o))return!1;for(var s=1,a=i.length;s=r[0]&&o[2]<=r[2]||(o[1]>=r[1]&&o[3]<=r[3]||xi(t,e,i,n,(function(t,e){return function(t,e,i){var n=!1,r=Wt(t,e),o=Wt(t,i);if(r===Ot||o===Ot)n=!0;else{var s,a,h=t[0],u=t[1],l=t[2],c=t[3],p=e[0],f=e[1],d=i[0],_=i[1],g=(_-f)/(d-p);o&Lt&&!(r&Lt)&&(n=(s=d-(_-c)/g)>=h&&s<=l),n||!(o&Tt)||r&Tt||(n=(a=_-(d-l)*g)>=u&&a<=c),n||!(o&Xt)||r&Xt||(n=(s=d-(_-u)/g)>=h&&s<=l),n||!(o&Yt)||r&Yt||(n=(a=_-(d-h)*g)>=u&&a<=c)}return n}(r,t,e)})))))}function Ei(t,e,i,n,r){if(!function(t,e,i,n,r){return!!wi(t,e,i,n,r)||(!!mi(t,e,i,n,r[0],r[1])||(!!mi(t,e,i,n,r[0],r[3])||(!!mi(t,e,i,n,r[2],r[1])||!!mi(t,e,i,n,r[2],r[3]))))}(t,e,i[0],n,r))return!1;if(1===i.length)return!0;for(var o=1,s=i.length;o0;){for(var p=u.pop(),f=u.pop(),d=0,_=t[f],g=t[f+1],y=t[p],v=t[p+1],m=f+n;md&&(c=m,d=C)}d>r&&(h[(c-e)/n]=1,f+n0&&_>f)&&(d<0&&g0&&g>d)?(a=c,h=p):(o[s++]=a,o[s++]=h,u=a,l=h,a=c,h=p)}}return o[s++]=a,o[s++]=h,s}function Pi(t,e,i,n,r,o,s,a){for(var h=0,u=i.length;hC&&Ci(t,e,i,n,u=(l+c)/2,d)&&(m=u,C=x),l=c}return isNaN(m)&&(m=r[o]),s?(s.push(m,d,C),s):[m,d,C]}function Xi(t,e,i,n){for(;e0}function ji(t,e,i,n,r){for(var o=void 0!==r&&r,s=0,a=i.length;s0}}else if(t.type==wt){var n=this.handleDownEvent(t);n&&t.preventDefault(),this.handlingDownUpSequence=n,e=this.stopDown(n)}else t.type==xt&&this.handleMoveEvent(t);return!e},e.prototype.handleMoveEvent=function(t){},e.prototype.handleUpEvent=function(t){return!1},e.prototype.stopDown=function(t){return t},e.prototype.updateTrackedPointers_=function(t){if(function(t){var e=t.type;return e===wt||e===Ct||e===Et}(t)){var e=t.pointerEvent,i=e.pointerId.toString();t.type==Et?delete this.trackedPointers_[i]:(t.type==wt||i in this.trackedPointers_)&&(this.trackedPointers_[i]=e),this.targetPointers=k(this.trackedPointers_)}},e}(function(t){function e(e){t.call(this),e.handleEvent&&(this.handleEvent=e.handleEvent),this.map_=null,this.setActive(!0)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getActive=function(){return this.get(Ki)},e.prototype.getMap=function(){return this.map_},e.prototype.handleEvent=function(t){return!0},e.prototype.setActive=function(t){this.set(Ki,t)},e.prototype.setMap=function(t){this.map_=t},e}(ft)),Hi="VECTOR",Ji="opacity",Zi="visible",$i="extent",Qi="zIndex",tn="maxResolution",en="minResolution",nn="source",rn="precompose",on="undefined",sn="ready";var an=function(t){function e(e){var i=F({},e);delete i.source,t.call(this,i),this.mapPrecomposeKey_=null,this.mapRenderKey_=null,this.sourceChangeKey_=null,e.map&&this.setMap(e.map),G(this,pt(nn),this.handleSourcePropertyChange_,this);var n=e.source?e.source:null;this.setSource(n)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getLayersArray=function(t){var e=t||[];return e.push(this),e},e.prototype.getLayerStatesArray=function(t){var e=t||[];return e.push(this.getLayerState()),e},e.prototype.getSource=function(){return this.get(nn)||null},e.prototype.getSourceState=function(){var t=this.getSource();return t?t.getState():on},e.prototype.handleSourceChange_=function(){this.changed()},e.prototype.handleSourcePropertyChange_=function(){this.sourceChangeKey_&&(T(this.sourceChangeKey_),this.sourceChangeKey_=null);var t=this.getSource();t&&(this.sourceChangeKey_=G(t,W,this.handleSourceChange_,this)),this.changed()},e.prototype.setMap=function(t){this.mapPrecomposeKey_&&(T(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(T(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=G(t,rn,(function(t){var e=t,i=this.getLayerState();i.managed=!1,void 0===this.getZIndex()&&(i.zIndex=1/0),e.frameState.layerStatesArray.push(i),e.frameState.layerStates[o(this)]=i}),this),this.mapRenderKey_=G(this,W,t.render,t),this.changed())},e.prototype.setSource=function(t){this.set(nn,t)},e}(function(t){function e(e){t.call(this);var i=F({},e);i[Ji]=void 0!==e.opacity?e.opacity:1,i[Zi]=void 0===e.visible||e.visible,i[Qi]=e.zIndex,i[tn]=void 0!==e.maxResolution?e.maxResolution:1/0,i[en]=void 0!==e.minResolution?e.minResolution:0,this.setProperties(i),this.state_=null,this.type}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getType=function(){return this.type},e.prototype.getLayerState=function(){var t=this.state_||{layer:this,managed:!0};return t.opacity=h(this.getOpacity(),0,1),t.sourceState=this.getSourceState(),t.visible=this.getVisible(),t.extent=this.getExtent(),t.zIndex=this.getZIndex()||0,t.maxResolution=this.getMaxResolution(),t.minResolution=Math.max(this.getMinResolution(),0),this.state_=t,t},e.prototype.getLayersArray=function(t){return n()},e.prototype.getLayerStatesArray=function(t){return n()},e.prototype.getExtent=function(){return this.get($i)},e.prototype.getMaxResolution=function(){return this.get(tn)},e.prototype.getMinResolution=function(){return this.get(en)},e.prototype.getOpacity=function(){return this.get(Ji)},e.prototype.getSourceState=function(){return n()},e.prototype.getVisible=function(){return this.get(Zi)},e.prototype.getZIndex=function(){return this.get(Qi)},e.prototype.setExtent=function(t){this.set($i,t)},e.prototype.setMaxResolution=function(t){this.set(tn,t)},e.prototype.setMinResolution=function(t){this.set(en,t)},e.prototype.setOpacity=function(t){this.set(Ji,t)},e.prototype.setVisible=function(t){this.set(Zi,t)},e.prototype.setZIndex=function(t){this.set(Qi,t)},e}(ft)),hn="vector",un=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.checksum_=void 0};un.prototype.clone=function(){var t=this.getColor();return new un({color:Array.isArray(t)?t.slice():t||void 0})},un.prototype.getColor=function(){return this.color_},un.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},un.prototype.getChecksum=function(){if(void 0===this.checksum_){var t=this.color_;t?Array.isArray(t)||"string"==typeof t?this.checksum_="f"+_(t):this.checksum_=o(this.color_):this.checksum_="f-"}return this.checksum_};var ln=un,cn=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.lineCap_=e.lineCap,this.lineDash_=void 0!==e.lineDash?e.lineDash:null,this.lineDashOffset_=e.lineDashOffset,this.lineJoin_=e.lineJoin,this.miterLimit_=e.miterLimit,this.width_=e.width,this.checksum_=void 0};cn.prototype.clone=function(){var t=this.getColor();return new cn({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})},cn.prototype.getColor=function(){return this.color_},cn.prototype.getLineCap=function(){return this.lineCap_},cn.prototype.getLineDash=function(){return this.lineDash_},cn.prototype.getLineDashOffset=function(){return this.lineDashOffset_},cn.prototype.getLineJoin=function(){return this.lineJoin_},cn.prototype.getMiterLimit=function(){return this.miterLimit_},cn.prototype.getWidth=function(){return this.width_},cn.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},cn.prototype.setLineCap=function(t){this.lineCap_=t,this.checksum_=void 0},cn.prototype.setLineDash=function(t){this.lineDash_=t,this.checksum_=void 0},cn.prototype.setLineDashOffset=function(t){this.lineDashOffset_=t,this.checksum_=void 0},cn.prototype.setLineJoin=function(t){this.lineJoin_=t,this.checksum_=void 0},cn.prototype.setMiterLimit=function(t){this.miterLimit_=t,this.checksum_=void 0},cn.prototype.setWidth=function(t){this.width_=t,this.checksum_=void 0},cn.prototype.getChecksum=function(){return void 0===this.checksum_&&(this.checksum_="s",this.color_?"string"==typeof this.color_?this.checksum_+=this.color_:this.checksum_+=o(this.color_):this.checksum_+="-",this.checksum_+=","+(void 0!==this.lineCap_?this.lineCap_.toString():"-")+","+(this.lineDash_?this.lineDash_.toString():"-")+","+(void 0!==this.lineDashOffset_?this.lineDashOffset_:"-")+","+(void 0!==this.lineJoin_?this.lineJoin_:"-")+","+(void 0!==this.miterLimit_?this.miterLimit_.toString():"-")+","+(void 0!==this.width_?this.width_.toString():"-")),this.checksum_};var pn=cn,fn=function(t){var e=t||{};this.geometry_=null,this.geometryFunction_=yn,void 0!==e.geometry&&this.setGeometry(e.geometry),this.fill_=void 0!==e.fill?e.fill:null,this.image_=void 0!==e.image?e.image:null,this.renderer_=void 0!==e.renderer?e.renderer:null,this.stroke_=void 0!==e.stroke?e.stroke:null,this.text_=void 0!==e.text?e.text:null,this.zIndex_=e.zIndex};fn.prototype.clone=function(){var t=this.getGeometry();return t&&"object"==typeof t&&(t=t.clone()),new fn({geometry:t,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})},fn.prototype.getRenderer=function(){return this.renderer_},fn.prototype.setRenderer=function(t){this.renderer_=t},fn.prototype.getGeometry=function(){return this.geometry_},fn.prototype.getGeometryFunction=function(){return this.geometryFunction_},fn.prototype.getFill=function(){return this.fill_},fn.prototype.setFill=function(t){this.fill_=t},fn.prototype.getImage=function(){return this.image_},fn.prototype.setImage=function(t){this.image_=t},fn.prototype.getStroke=function(){return this.stroke_},fn.prototype.setStroke=function(t){this.stroke_=t},fn.prototype.getText=function(){return this.text_},fn.prototype.setText=function(t){this.text_=t},fn.prototype.getZIndex=function(){return this.zIndex_},fn.prototype.setGeometry=function(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=yn,this.geometry_=t},fn.prototype.setZIndex=function(t){this.zIndex_=t};var dn=null;function _n(t,e){if(!dn){var i=new ln({color:"rgba(255,255,255,0.4)"}),n=new pn({color:"#3399CC",width:1.25});dn=[new fn({image:new ot({fill:i,stroke:n,radius:5}),fill:i,stroke:n})]}return dn}function gn(){var t={},e=[255,255,255,1],i=[0,153,255,1];return t[ce]=[new fn({fill:new ln({color:[255,255,255,.5]})})],t[de]=t[ce],t[ue]=[new fn({stroke:new pn({color:e,width:5})}),new fn({stroke:new pn({color:i,width:3})})],t[fe]=t[ue],t[ge]=t[ce].concat(t[ue]),t[he]=[new fn({image:new ot({radius:6,fill:new ln({color:i}),stroke:new pn({color:e,width:1.5})}),zIndex:1/0})],t[pe]=t[he],t[_e]=t[ce].concat(t[ue],t[he]),t}function yn(t){return t.getGeometry()}var vn=fn,mn="renderOrder",Cn=function(t){function e(e){var i=e||{},n=F({},i);delete n.style,delete n.renderBuffer,delete n.updateWhileAnimating,delete n.updateWhileInteracting,t.call(this,n),this.declutter_=void 0!==i.declutter&&i.declutter,this.renderBuffer_=void 0!==i.renderBuffer?i.renderBuffer:100,this.style_=null,this.styleFunction_=void 0,this.setStyle(i.style),this.updateWhileAnimating_=void 0!==i.updateWhileAnimating&&i.updateWhileAnimating,this.updateWhileInteracting_=void 0!==i.updateWhileInteracting&&i.updateWhileInteracting,this.renderMode_=i.renderMode||hn,this.type=Hi}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDeclutter=function(){return this.declutter_},e.prototype.setDeclutter=function(t){this.declutter_=t},e.prototype.getRenderBuffer=function(){return this.renderBuffer_},e.prototype.getRenderOrder=function(){return this.get(mn)},e.prototype.getStyle=function(){return this.style_},e.prototype.getStyleFunction=function(){return this.styleFunction_},e.prototype.getUpdateWhileAnimating=function(){return this.updateWhileAnimating_},e.prototype.getUpdateWhileInteracting=function(){return this.updateWhileInteracting_},e.prototype.setRenderOrder=function(t){this.set(mn,t)},e.prototype.setStyle=function(t){this.style_=void 0!==t?t:_n,this.styleFunction_=null===t?void 0:function(t){var e;if("function"==typeof t)e=t;else{var i;if(Array.isArray(t))i=t;else a("function"==typeof t.getZIndex,41),i=[t];e=function(){return i}}return e}(this.style_),this.changed()},e.prototype.getRenderMode=function(){return this.renderMode_},e}(an);Cn.prototype.getSource;var xn=Cn,wn="arraybuffer",En="json",Fn="text",Sn="xml";function kn(t,e){return function(t,e,i,n){return function(r,o,s){var a=new XMLHttpRequest;a.open("GET","function"==typeof t?t(r,o,s):t,!0),e.getType()==wn&&(a.responseType="arraybuffer"),a.onload=function(t){if(!a.status||a.status>=200&&a.status<300){var r,o=e.getType();o==En||o==Fn?r=a.responseText:o==Sn?(r=a.responseXML)||(r=(new DOMParser).parseFromString(a.responseText,"application/xml")):o==wn&&(r=a.response),r?i.call(this,e.readFeatures(r,{featureProjection:s}),e.readProjection(r),e.getLastExtent()):n.call(this)}else n.call(this)}.bind(this),a.onerror=function(){n.call(this)}.bind(this),a.send()}}(t,e,(function(t,e){"function"==typeof this.addFeatures&&this.addFeatures(t)}),j)}function Mn(t,e){return[[-1/0,-1/0,1/0,1/0]]}function In(t){return t?Array.isArray(t)?function(e){return t}:"function"==typeof t?t:function(e){return[t]}:null}var Pn=function(t){function e(e){t.call(this),this.projection_=Ve(e.projection),this.attributions_=In(e.attributions),this.attributionsCollapsible_=void 0===e.attributionsCollapsible||e.attributionsCollapsible,this.loading=!1,this.state_=void 0!==e.state?e.state:sn,this.wrapX_=void 0!==e.wrapX&&e.wrapX}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getAttributions=function(){return this.attributions_},e.prototype.getAttributionsCollapsible=function(){return this.attributionsCollapsible_},e.prototype.getProjection=function(){return this.projection_},e.prototype.getResolutions=function(){return n()},e.prototype.getState=function(){return this.state_},e.prototype.getWrapX=function(){return this.wrapX_},e.prototype.refresh=function(){this.changed()},e.prototype.setAttributions=function(t){this.attributions_=In(t),this.changed()},e.prototype.setState=function(t){this.state_=t,this.changed()},e}(ft),Rn="addfeature",bn="changefeature",Dn="clear",An="removefeature",Gn=i("A1R+"),On=i.n(Gn),Ln=function(t){this.rbush_=On()(t,void 0),this.items_={}};Ln.prototype.insert=function(t,e){var i={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3],value:e};this.rbush_.insert(i),this.items_[o(e)]=i},Ln.prototype.load=function(t,e){for(var i=new Array(e.length),n=0,r=e.length;n2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]];if(0===o[1])t=[[i,i,i,i]];else{var s=[-1*o[1],o[0]],a=o[0]/o[1],h=(r[0]+a*(n[1]-r[1])-n[0])/(s[0]-s[1]*a),u=[h*s[0],h*s[1]];t=[[[i[0]-u[0],i[1]-u[1]],[n[0]-u[0],n[1]-u[1]],[n[0]+u[0],n[1]+u[1]],[i[0]+u[0],i[1]+u[1]]]]}}else t=[t];var l=e;return l?l.setCoordinates(t):l=new jn(t),l};else if(this.type_===ve)this.minPoints_=3,this.maxPoints_=3,r=function(t,e){if(t.length>2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]],s=[i[0]+.5*o[0],i[1]+.5*o[1]];if(0===o[1])t=[[i,i,i,i]];else{var a=[-1*o[1],o[0]],h=o[0]/o[1],u=(r[0]+h*(n[1]-r[1])-n[0])/(a[0]-a[1]*h),l=[u*a[0],u*a[1]];t=[[[i[0],i[1]],[s[0]-l[0],s[1]-l[1]],[n[0],n[1]],[s[0]+l[0],s[1]+l[1]]]]}}else t=[t];var c=e;return c?c.setCoordinates(t):c=new qn(t),c};else{var o,s=this.mode_;s===Bn?o=Di:s===Nn?o=Ri:s===Wn&&(o=Wi),r=function(t,e){var i=e;return i?s===Wn?t[0].length?i.setCoordinates([t[0].concat([t[0][0]])]):i.setCoordinates([]):i.setCoordinates(t):i=new o(t),i}}this.geometryFunction_=r,this.dragVertexDelay_=void 0!==e.dragVertexDelay?e.dragVertexDelay:500,this.finishCoordinate_=null,this.sketchFeature_=null,this.sketchPoint_=null,this.sketchCoords_=null,this.sketchLine_=null,this.sketchLineCoords_=null,this.squaredClickTolerance_=e.clickTolerance?e.clickTolerance*e.clickTolerance:36,this.overlay_=new xn({source:new Yn({useSpatialIndex:!1,wrapX:!!e.wrapX&&e.wrapX}),style:e.style?e.style:(n=gn(),function(t,e){return n[t.getGeometry().getType()]}),updateWhileInteracting:!0}),this.geometryName_=e.geometryName,this.condition_=e.condition?e.condition:bt,this.freehandCondition_,e.freehand?this.freehandCondition_=Pt:this.freehandCondition_=e.freehandCondition?e.freehandCondition:Dt,G(this,pt(Ki),this.updateState_,this)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setMap=function(e){t.prototype.setMap.call(this,e),this.updateState_()},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleEvent=function(e){e.originalEvent.type===z&&e.preventDefault(),this.freehand_=this.mode_!==Bn&&this.freehandCondition_(e);var i=e.type===xt,n=!0;!this.freehand_&&this.lastDragTime_&&e.type===Ct&&(Date.now()-this.lastDragTime_>=this.dragVertexDelay_?(this.downPx_=e.pixel,this.shouldHandle_=!this.freehand_,i=!0):this.lastDragTime_=void 0,this.shouldHandle_&&void 0!==this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0));return this.freehand_&&e.type===Ct&&null!==this.sketchFeature_?(this.addToDrawing_(e),n=!1):this.freehand_&&e.type===wt?n=!1:i?(n=e.type===xt)&&this.freehand_?n=this.handlePointerMove_(e):("mouse"==e.pointerEvent.pointerType||e.type===Ct&&void 0===this.downTimeout_)&&this.handlePointerMove_(e):e.type===mt&&(n=!1),t.prototype.handleEvent.call(this,e)&&n},e.prototype.handleDownEvent=function(t){return this.shouldHandle_=!this.freehand_,this.freehand_?(this.downPx_=t.pixel,this.finishCoordinate_||this.startDrawing_(t),!0):!!this.condition_(t)&&(this.lastDragTime_=Date.now(),this.downTimeout_=setTimeout(function(){this.handlePointerMove_(new Ft(xt,t.map,t.pointerEvent,!1,t.frameState))}.bind(this),this.dragVertexDelay_),this.downPx_=t.pixel,!0)},e.prototype.handleUpEvent=function(t){var e=!0;this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0),this.handlePointerMove_(t);var i=this.mode_===Vn;return this.shouldHandle_?(this.finishCoordinate_?this.freehand_||i?this.finishDrawing():this.atFinish_(t)?this.finishCondition_(t)&&this.finishDrawing():this.addToDrawing_(t):(this.startDrawing_(t),this.mode_===Bn&&this.finishDrawing()),e=!1):this.freehand_&&(this.finishCoordinate_=null,this.abortDrawing_()),!e&&this.stopClick_&&t.stopPropagation(),e},e.prototype.handlePointerMove_=function(t){if(this.downPx_&&(!this.freehand_&&this.shouldHandle_||this.freehand_&&!this.shouldHandle_)){var e=this.downPx_,i=t.pixel,n=e[0]-i[0],r=e[1]-i[1],o=n*n+r*r;if(this.shouldHandle_=this.freehand_?o>this.squaredClickTolerance_:o<=this.squaredClickTolerance_,!this.shouldHandle_)return!0}return this.finishCoordinate_?this.modifyDrawing_(t):this.createOrUpdateSketchPoint_(t),!0},e.prototype.atFinish_=function(t){var e=!1;if(this.sketchFeature_){var i=!1,n=[this.finishCoordinate_];if(this.mode_===Nn)i=this.sketchCoords_.length>this.minPoints_;else if(this.mode_===Wn){var r=this.sketchCoords_;i=r[0].length>this.minPoints_,n=[r[0][0],r[0][r[0].length-2]]}if(i)for(var o=t.map,s=0,a=n.length;s=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),this.geometryFunction_(i,r)):this.mode_===Wn&&((i=this.sketchCoords_[0]).length>=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),e&&(this.finishCoordinate_=i[0]),this.geometryFunction_(this.sketchCoords_,r)),this.updateSketchFeatures_(),e&&this.finishDrawing()},e.prototype.removeLastPoint=function(){if(this.sketchFeature_){var t,e=this.sketchFeature_.getGeometry();this.mode_===Nn?((t=this.sketchCoords_).splice(-2,1),this.geometryFunction_(t,e),t.length>=2&&(this.finishCoordinate_=t[t.length-2].slice())):this.mode_===Wn&&((t=this.sketchCoords_[0]).splice(-2,1),this.sketchLine_.getGeometry().setCoordinates(t),this.geometryFunction_(this.sketchCoords_,e)),0===t.length&&(this.finishCoordinate_=null),this.updateSketchFeatures_()}},e.prototype.finishDrawing=function(){var t=this.abortDrawing_();if(t){var e=this.sketchCoords_,i=t.getGeometry();this.mode_===Nn?(e.pop(),this.geometryFunction_(e,i)):this.mode_===Wn&&(e[0].pop(),this.geometryFunction_(e,i),e=i.getCoordinates()),this.type_===pe?t.setGeometry(new Ai([e])):this.type_===fe?t.setGeometry(new bi([e])):this.type_===de&&t.setGeometry(new Vi([e])),this.dispatchEvent(new Hn(Un,t)),this.features_&&this.features_.push(t),this.source_&&this.source_.addFeature(t)}},e.prototype.abortDrawing_=function(){this.finishCoordinate_=null;var t=this.sketchFeature_;return t&&(this.sketchFeature_=null,this.sketchPoint_=null,this.sketchLine_=null,this.overlay_.getSource().clear(!0)),t},e.prototype.extend=function(t){var e=t.getGeometry();this.sketchFeature_=t,this.sketchCoords_=e.getCoordinates();var i=this.sketchCoords_[this.sketchCoords_.length-1];this.finishCoordinate_=i.slice(),this.sketchCoords_.push(i.slice()),this.updateSketchFeatures_(),this.dispatchEvent(new Hn(Kn,this.sketchFeature_))},e.prototype.updateSketchFeatures_=function(){var t=[];this.sketchFeature_&&t.push(this.sketchFeature_),this.sketchLine_&&t.push(this.sketchLine_),this.sketchPoint_&&t.push(this.sketchPoint_);var e=this.overlay_.getSource();e.clear(!0),e.addFeatures(t)},e.prototype.updateState_=function(){var t=this.getMap(),e=this.getActive();t&&e||this.abortDrawing_(),this.overlay_.setMap(e?t:null)},e}(Ui),Zn=Vue.resource("/api/v1/volumes{/id}/export-area"),$n="modifystart",Qn="modifyend",tr=function(t){function e(e,i,n){t.call(this,e),this.features=i,this.mapBrowserEvent=n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(B);function er(t,e){return t.index-e.index}function ir(t,e){var i,n,r=e.geometry;if(r.getType()===ge){var o=r;if(1===e.index){var s=Mt(o.getCenter(),t),a=Math.sqrt(s)-o.getRadius();return a*a}}return i=t,n=e.segment,Mt(i,St(i,n))}function nr(t,e){var i=e.geometry;return i.getType()===ge&&1===e.index||i.getType()===ve||i.getType()===ye?i.getClosestPoint(t):St(t,e.segment)}var rr=function(t){function e(e){var i,n;if(t.call(this,e),this.condition_=e.condition?e.condition:At,this.defaultDeleteCondition_=function(t){return function(t){var e=t.originalEvent;return e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey}(t)&&function(t){return t.type==vt}(t)},this.deleteCondition_=e.deleteCondition?e.deleteCondition:this.defaultDeleteCondition_,this.insertVertexCondition_=e.insertVertexCondition?e.insertVertexCondition:Pt,this.vertexFeature_=null,this.vertexSegments_=null,this.lastPixel_=[0,0],this.ignoreNextSingleClick_=!1,this.modified_=!1,this.rBush_=new Tn,this.pixelTolerance_=void 0!==e.pixelTolerance?e.pixelTolerance:10,this.snappedToVertex_=!1,this.changingFeature_=!1,this.dragSegments_=[],this.overlay_=new xn({source:new Yn({useSpatialIndex:!1,wrapX:!!e.wrapX}),style:e.style?e.style:(i=gn(),function(t,e){return i[he]}),updateWhileAnimating:!0,updateWhileInteracting:!0}),this.SEGMENT_WRITERS_={Point:this.writePointGeometry_,LineString:this.writeLineStringGeometry_,LinearRing:this.writeLineStringGeometry_,Polygon:this.writePolygonGeometry_,MultiPoint:this.writeMultiPointGeometry_,MultiLineString:this.writeMultiLineStringGeometry_,MultiPolygon:this.writeMultiPolygonGeometry_,Rectangle:this.writePolygonGeometry_,Ellipse:this.writePolygonGeometry_,Circle:this.writeCircleGeometry_,GeometryCollection:this.writeGeometryCollectionGeometry_},this.source_=null,e.source?(this.source_=e.source,n=new gt(this.source_.getFeatures()),G(this.source_,Rn,this.handleSourceAdd_,this),G(this.source_,An,this.handleSourceRemove_,this)):n=e.features,!n)throw new Error("The modify interaction requires features or a source");this.features_=n,this.features_.forEach(this.addFeature_.bind(this)),G(this.features_,st,this.handleFeatureAdd_,this),G(this.features_,at,this.handleFeatureRemove_,this),this.lastPointerEvent_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.addFeature_=function(t){var e=t.getGeometry();e&&e.getType()in this.SEGMENT_WRITERS_&&this.SEGMENT_WRITERS_[e.getType()].call(this,t,e);var i=this.getMap();i&&i.isRendered()&&this.getActive()&&this.handlePointerAtPixel_(this.lastPixel_,i),G(t,W,this.handleFeatureChange_,this)},e.prototype.willModifyFeatures_=function(t){this.modified_||(this.modified_=!0,this.dispatchEvent(new tr($n,this.features_,t)))},e.prototype.removeFeature_=function(t){this.removeFeatureSegmentData_(t),this.vertexFeature_&&0===this.features_.getLength()&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),L(t,W,this.handleFeatureChange_,this)},e.prototype.removeFeatureSegmentData_=function(t){var e=this.rBush_,i=[];e.forEach((function(e){t===e.feature&&i.push(e)}));for(var n=i.length-1;n>=0;--n)e.remove(i[n])},e.prototype.setActive=function(e){this.vertexFeature_&&!e&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),t.prototype.setActive.call(this,e)},e.prototype.setMap=function(e){this.overlay_.setMap(e),t.prototype.setMap.call(this,e)},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleSourceAdd_=function(t){t.feature&&this.features_.push(t.feature)},e.prototype.handleSourceRemove_=function(t){t.feature&&this.features_.remove(t.feature)},e.prototype.handleFeatureAdd_=function(t){this.addFeature_(t.element)},e.prototype.handleFeatureChange_=function(t){if(!this.changingFeature_){var e=t.target;this.removeFeature_(e),this.addFeature_(e)}},e.prototype.handleFeatureRemove_=function(t){var e=t.element;this.removeFeature_(e)},e.prototype.writePointGeometry_=function(t,e){var i=e.getCoordinates(),n={feature:t,geometry:e,segment:[i,i]};this.rBush_.insert(e.getExtent(),n)},e.prototype.writeMultiPointGeometry_=function(t,e){for(var i=e.getCoordinates(),n=0,r=i.length;n=0;--_)this.insertVertex_.apply(this,n[_])}return!!this.vertexFeature_},e.prototype.handleUpEvent=function(t){for(var e=this.dragSegments_.length-1;e>=0;--e){var i=this.dragSegments_[e][0],n=i.geometry;if(n.getType()===ye||n.getType()===ve)this.features_.remove(i.feature),this.features_.push(i.feature);else if(n.getType()===ge){var r=n.getCenter(),o=i.featureSegments[0],s=i.featureSegments[1];o.segment[0]=o.segment[1]=r,s.segment[0]=s.segment[1]=r,this.rBush_.update(Ut(r),o),this.rBush_.update(n.getExtent(),s)}else this.rBush_.update(jt(i.segment),i)}return this.modified_&&(this.dispatchEvent(new tr(Qn,this.features_,t)),this.modified_=!1),!1},e.prototype.handlePointerMove_=function(t){this.lastPixel_=t.pixel,this.handlePointerAtPixel_(t.pixel,t.map)},e.prototype.handlePointerAtPixel_=function(t,e){var i,n,r,s=e.getCoordinateFromPixel(t),a=(i=Ut(s),n=e.getView().getResolution()*this.pixelTolerance_,r?(r[0]=i[0]-n,r[1]=i[1]-n,r[2]=i[2]+n,r[3]=i[3]+n,r):[i[0]-n,i[1]-n,i[2]+n,i[3]+n]),h=this.rBush_.getInExtent(a);if(h.length>0){h.sort((function(t,e){return ir(s,t)-ir(s,e)}));var u=h[0],l=u.segment,c=nr(s,u),p=e.getPixelFromCoordinate(c),f=It(t,p);if(f<=this.pixelTolerance_){var d={};if(u.geometry.getType()===ge&&1===u.index)this.snappedToVertex_=!0,this.createOrUpdateVertexFeature_(c);else{var _=e.getPixelFromCoordinate(l[0]),g=e.getPixelFromCoordinate(l[1]),y=Mt(p,_),v=Mt(p,g);f=Math.sqrt(Math.min(y,v)),this.snappedToVertex_=f<=this.pixelTolerance_,this.snappedToVertex_&&(c=y>v?l[1]:l[0]),this.createOrUpdateVertexFeature_(c);for(var m=1,C=h.length;m=0;--r)c=o((l=(i=p[r])[0]).feature),l.depth&&(c+="-"+l.depth.join("-")),c in f||(f[c]={}),0===i[1]?(f[c].right=l,f[c].index=l.index):1==i[1]&&(f[c].left=l,f[c].index=l.index+1);for(c in f){switch(u=f[c].right,a=f[c].left,(h=(s=f[c].index)-1)<0&&(h=0),t=e=(n=(l=void 0!==a?a:u).geometry).getCoordinates(),d=!1,n.getType()){case fe:e[l.depth[0]].length>2&&(e[l.depth[0]].splice(s,1),d=!0);break;case ue:e.length>2&&(e.splice(s,1),d=!0);break;case de:t=t[l.depth[1]];case ce:(t=t[l.depth[0]]).length>4&&(s==t.length-1&&(s=0),t.splice(s,1),d=!0,0===s&&(t.pop(),t.push(t[0]),h=t.length-1))}if(d){this.setGeometryCoordinates_(n,e);var _=[];if(void 0!==a&&(this.rBush_.remove(a),_.push(a.segment[0])),void 0!==u&&(this.rBush_.remove(u),_.push(u.segment[1])),void 0!==a&&void 0!==u){var g={depth:l.depth,feature:l.feature,geometry:l.geometry,index:h,segment:_};this.rBush_.insert(jt(g.segment),g)}this.updateSegmentIndices_(n,s,l.depth,-1),this.vertexFeature_&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),p.length=0}}return d},e.prototype.setGeometryCoordinates_=function(t,e){this.changingFeature_=!0,t.setCoordinates(e),this.changingFeature_=!1},e.prototype.updateSegmentIndices_=function(t,e,i,n){this.rBush_.forEachInExtent(t.getExtent(),(function(r){r.geometry===t&&(void 0===i||void 0===r.depth||function(t,e){var i=t.length;if(i!==e.length)return!1;for(var n=0;ne&&(r.index+=n)}))},e}(Ui),or=biigle.$require("events"),sr=biigle.$require("messages").handleErrorResponse,ar=biigle.$require("annotations.components.settingsTabPlugins");ar&&(ar.exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null,volumeId:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},layer:function(){return new xn({source:new Yn({features:new gt}),style:[new vn({stroke:new pn({color:"white",width:4}),image:new ot({radius:6,fill:new ln({color:"#666666"}),stroke:new pn({color:"white",width:2,lineDash:[2]})})}),new vn({stroke:new pn({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new Jn({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(t,e){t.length>1&&(t=[t[0],[t[0][0],t[1][1]],t[1],[t[1][0],t[0][1]]]);var i=e;return i?i.setCoordinates([t]):i=new jn([t]),i}})},modifyInteraction:function(){return new rr({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:Rt})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){var t=this;if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),Zn.delete({id:this.volumeId}).then((function(){return t.exportArea=null})).catch((function(t){e.addFeature(i),sr(t)}))}},updateCurrentImage:function(t,e){this.currentImage=e},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var t=this.currentImage.tiled?0:this.height,e=new jn([[[this.exportArea[0],t-this.exportArea[1]],[this.exportArea[0],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[1]]]]);this.layer.getSource().addFeature(new yt({geometry:e}))}},handleModifyend:function(t){this.updateExportArea(t.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(t){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),this.updateExportArea(t.feature).catch((function(){e.clear(),i&&e.addFeature(i)}))},updateExportArea:function(t){var e=this,i=t.getGeometry().getCoordinates()[0],n=this.currentImage.tiled?0:this.height;i=[i[0][0],n-i[0][1],i[2][0],n-i[2][1]].map(Math.round);var r=Zn.save({id:this.volumeId},{coordinates:i}).then((function(){return e.exportArea=i}));return r.catch(sr),r},extendMap:function(t){t.addLayer(this.layer),t.addInteraction(this.drawInteraction),t.addInteraction(this.modifyInteraction)}},watch:{opacity:function(t){t<1?this.settings.set("exportAreaOpacity",t):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(t)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.volumeId=biigle.$require("annotations.volumeId"),this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend),or.$on("images.change",this.updateCurrentImage),or.$on("annotations.map.init",this.extendMap)}})},"A1R+":function(t,e,i){"use strict";t.exports=r,t.exports.default=r;var n=i("YcpW");function r(t,e){if(!(this instanceof r))return new r(t,e);this._maxEntries=Math.max(4,t||9),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),e&&this._initFormat(e),this.clear()}function o(t,e,i){if(!i)return e.indexOf(t);for(var n=0;n=t.minX&&e.maxY>=t.minY}function _(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function g(t,e,i,r,o){for(var s,a=[e,i];a.length;)(i=a.pop())-(e=a.pop())<=r||(s=e+Math.ceil((i-e)/r/2)*r,n(t,s,e,i,o),a.push(e,s,s,i))}r.prototype={all:function(){return this._all(this.data,[])},search:function(t){var e=this.data,i=[],n=this.toBBox;if(!d(t,e))return i;for(var r,o,s,a,h=[];e;){for(r=0,o=e.children.length;r=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(r,o,e)},_split:function(t,e){var i=t[e],n=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,n);var o=this._chooseSplitIndex(i,r,n),a=_(i.children.splice(o,i.children.length-o));a.height=i.height,a.leaf=i.leaf,s(i,this.toBBox),s(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(i,a)},_splitRoot:function(t,e){this.data=_([t,e]),this.data.height=t.height+1,this.data.leaf=!1,s(this.data,this.toBBox)},_chooseSplitIndex:function(t,e,i){var n,r,o,s,h,u,l,p,f,d,_,g,y,v;for(u=l=1/0,n=e;n<=i-e;n++)r=a(t,0,n,this.toBBox),o=a(t,n,i,this.toBBox),f=r,d=o,_=void 0,g=void 0,y=void 0,v=void 0,_=Math.max(f.minX,d.minX),g=Math.max(f.minY,d.minY),y=Math.min(f.maxX,d.maxX),v=Math.min(f.maxY,d.maxY),s=Math.max(0,y-_)*Math.max(0,v-g),h=c(r)+c(o),s=e;r--)o=t.children[r],h(l,t.leaf?s(o):o),c+=p(l);return c},_adjustParentBBoxes:function(t,e,i){for(var n=i;n>=0;n--)h(e[n],t)},_condense:function(t){for(var e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children).splice(e.indexOf(t[i]),1):this.clear():s(t[i],this.toBBox)},_initFormat:function(t){var e=["return a"," - b",";"];this.compareMinX=new Function("a","b",e.join(t[0])),this.compareMinY=new Function("a","b",e.join(t[1])),this.toBBox=new Function("a","return {minX: a"+t[0]+", minY: a"+t[1]+", maxX: a"+t[2]+", maxY: a"+t[3]+"};")}}},YcpW:function(t,e,i){t.exports=function(){"use strict";function t(t,e,i){var n=t[e];t[e]=t[i],t[i]=n}function e(t,e){return te?1:0}return function(i,n,r,o,s){!function e(i,n,r,o,s){for(;o>r;){if(o-r>600){var a=o-r+1,h=n-r+1,u=Math.log(a),l=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*l*(a-l)/a)*(h-a/2<0?-1:1),p=Math.max(r,Math.floor(n-h*l/a+c)),f=Math.min(o,Math.floor(n+(a-h)*l/a+c));e(i,n,p,f,s)}var d=i[n],_=r,g=o;for(t(i,r,n),s(i[o],d)>0&&t(i,r,o);_0;)g--}0===s(i[r],d)?t(i,r,g):(g++,t(i,g,o)),g<=n&&(r=g+1),n<=g&&(o=g-1)}}(i,n,r||0,o||i.length-1,s||e)}}()}}); \ No newline at end of file diff --git a/src/public/mix-manifest.json b/src/public/mix-manifest.json index 4a72e059a..39f728006 100644 --- a/src/public/mix-manifest.json +++ b/src/public/mix-manifest.json @@ -1,5 +1,5 @@ { - "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=ddf029b7386f1c6772d0", + "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=5d076cdaafa31ad5b50d", "/assets/scripts/main.js": "/assets/scripts/main.js?id=0b411999e5e7c5498cbf", "/assets/styles/main.css": "/assets/styles/main.css?id=9d45536e01d0a0b3c70b" } diff --git a/src/resources/assets/js/annotations/settingsTabPlugin.js b/src/resources/assets/js/annotations/settingsTabPlugin.js index 4cd243b10..da7b260d5 100644 --- a/src/resources/assets/js/annotations/settingsTabPlugin.js +++ b/src/resources/assets/js/annotations/settingsTabPlugin.js @@ -204,7 +204,7 @@ if (SettingsTabPlugins) { }, }, watch: { - opacity(opacity, oldOpacity) { + opacity(opacity) { if (opacity < 1) { this.settings.set('exportAreaOpacity', opacity); } else { From 94445d4cd89aba1312fe788810d941405f836df1 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 2 Jul 2020 09:55:32 +0200 Subject: [PATCH 203/407] Fix lint script for Vue components --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a9a10dfcb..648d9b1a7 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "watch-poll": "npm run watch -- --watch-poll", "prod": "npm run production", "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", - "lint": "npx eslint --resolve-plugins-relative-to . src/resources/assets/js/" + "lint": "npx eslint --ext .js,.vue --resolve-plugins-relative-to . src/resources/assets/js/" }, "devDependencies": { "cross-env": "^5.1", From 9d3f79c2deb8458d79af91102c30e6f8d4970855 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 3 Jul 2020 12:03:54 +0200 Subject: [PATCH 204/407] Use Vue single file components --- src/public/assets/scripts/annotations.js | 2 +- src/public/assets/scripts/main.js | 2 +- src/public/mix-manifest.json | 4 +- .../assets/js/annotations/annotations.js | 2 +- .../components/settingsTabPlugin.vue | 240 +++++++++++++++++ .../js/annotations/settingsTabPlugin.js | 241 ------------------ .../js/annotations/settingsTabPlugins.js | 11 + .../mixins/{reportForm.js => reportForm.vue} | 36 +-- .../assets/js/reports/projectForm.js | 37 --- .../assets/js/reports/projectForm.vue | 41 +++ .../reports/{videoForm.js => videoForm.vue} | 24 +- src/resources/assets/js/reports/volumeForm.js | 37 --- .../assets/js/reports/volumeForm.vue | 41 +++ 13 files changed, 372 insertions(+), 346 deletions(-) create mode 100644 src/resources/assets/js/annotations/components/settingsTabPlugin.vue delete mode 100644 src/resources/assets/js/annotations/settingsTabPlugin.js create mode 100644 src/resources/assets/js/annotations/settingsTabPlugins.js rename src/resources/assets/js/reports/mixins/{reportForm.js => reportForm.vue} (88%) delete mode 100644 src/resources/assets/js/reports/projectForm.js create mode 100644 src/resources/assets/js/reports/projectForm.vue rename src/resources/assets/js/reports/{videoForm.js => videoForm.vue} (51%) delete mode 100644 src/resources/assets/js/reports/volumeForm.js create mode 100644 src/resources/assets/js/reports/volumeForm.vue diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index a3c4bd820..dafa09688 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1,2 +1,2 @@ /*! For license information please see annotations.js.LICENSE.txt */ -!function(t){var e={};function i(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)i.d(n,r,function(e){return t[e]}.bind(null,r));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="/",i(i.s=1)}({1:function(t,e,i){t.exports=i("2R1P")},"2R1P":function(t,e,i){"use strict";function n(){return function(){throw new Error("Unimplemented abstract method.")}()}i.r(e);var r=0;function o(t){return t.ol_uid||(t.ol_uid=String(++r))}var s=function(t){function e(e){var i="Assertion failed. See https://openlayers.org/en/"+("v"+"5.3.0".split("-")[0])+"/doc/errors/#"+e+" for details.";t.call(this,i),this.code=e,this.name="AssertionError",this.message=i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error);function a(t,e){if(!t)throw new s(e)}function h(t,e,i){return Math.min(Math.max(t,e),i)}var u="cosh"in Math?Math.cosh:function(t){var e=Math.exp(t);return(e+1/e)/2};function l(t,e,i,n,r,o){var s=r-i,a=o-n;if(0!==s||0!==a){var h=((t-i)*s+(e-n)*a)/(s*s+a*a);h>1?(i=r,n=o):h>0&&(i+=s*h,n+=a*h)}return c(t,e,i,n)}function c(t,e,i,n){var r=i-t,o=n-e;return r*r+o*o}function p(t,e,i){return t+i*(e-t)}var f=/^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i,d=/^([a-z]*)$/i;function _(t){return"string"==typeof t?t:y(t)}!function(){var t={},e=0}();function g(t){return t[0]=h(t[0]+.5|0,0,255),t[1]=h(t[1]+.5|0,0,255),t[2]=h(t[2]+.5|0,0,255),t[3]=h(t[3],0,1),t}function y(t){var e=t[0];e!=(0|e)&&(e=e+.5|0);var i=t[1];i!=(0|i)&&(i=i+.5|0);var n=t[2];return n!=(0|n)&&(n=n+.5|0),"rgba("+e+","+i+","+n+","+(void 0===t[3]?1:t[3])+")"}function v(t){return Array.isArray(t)?y(t):t}function m(t,e){var i=document.createElement("canvas");return t&&(i.width=t),e&&(i.height=e),i.getContext("2d")}var C="undefined"!=typeof navigator?navigator.userAgent.toLowerCase():"",x=(C.indexOf("firefox"),-1!==C.indexOf("safari")&&C.indexOf("chrom"),-1!==C.indexOf("webkit")&&C.indexOf("edge"),C.indexOf("macintosh"),window.devicePixelRatio,function(){var t=!1;try{t=!!document.createElement("canvas").getContext("2d").setLineDash}catch(t){}return t}()),w=(navigator,window,window,navigator.msPointerEnabled,2),E=function(){var t,e={};return function(i){if(t||(t=document.createElement("div").style),!(i in e)){t.font=i;var n=t.fontFamily;if(t.font="",!n)return null;e[i]=n.split(/,\s?/)}return e[i]}}(),F="function"==typeof Object.assign?Object.assign:function(t,e){var i=arguments;if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(t),r=1,o=arguments.length;r0},e.prototype.removeEventListener=function(t,e){var i=this.listeners_[t];if(i){var n=i.indexOf(e);t in this.pendingRemovals_?(i[n]=j,++this.pendingRemovals_[t]):(i.splice(n,1),0===i.length&&delete this.listeners_[t])}},e}(P),W="change",V="clear",z="contextmenu",K="dblclick",U=function(t){function e(e){t.call(this),this.highWaterMark=void 0!==e?e:2048,this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.canExpireCache=function(){return this.getCount()>this.highWaterMark},e.prototype.clear=function(){this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null,this.dispatchEvent(V)},e.prototype.containsKey=function(t){return this.entries_.hasOwnProperty(t)},e.prototype.forEach=function(t,e){for(var i=this.oldest_;i;)t.call(e,i.value_,i.key_,this),i=i.newer},e.prototype.get=function(t){var e=this.entries_[t];return a(void 0!==e,15),e===this.newest_||(e===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(e.newer.older=e.older,e.older.newer=e.newer),e.newer=null,e.older=this.newest_,this.newest_.newer=e,this.newest_=e),e.value_},e.prototype.remove=function(t){var e=this.entries_[t];return a(void 0!==e,15),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_},e.prototype.getCount=function(){return this.count_},e.prototype.getKeys=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.key_;return e},e.prototype.getValues=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.value_;return e},e.prototype.peekLast=function(){return this.oldest_.value_},e.prototype.peekLastKey=function(){return this.oldest_.key_},e.prototype.peekFirstKey=function(){return this.newest_.key_},e.prototype.pop=function(){var t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_},e.prototype.replace=function(t,e){this.get(t),this.entries_[t].value_=e},e.prototype.set=function(t,e){a(!(t in this.entries_),16);var i={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=i:this.oldest_=i,this.newest_=i,this.entries_[t]=i,++this.count_},e.prototype.setSize=function(t){this.highWaterMark=t},e.prototype.prune=function(){for(;this.canExpireCache();)this.pop()},e}(N);new Array(6);var H=[0,0,0,1],J=[0,0,0,1],Z=new U,$={},Q=null,tt={};!function(){var t,e,i=$,n=["monospace","serif"],r=n.length,o="wmytzilWMYTZIL@#/&?$%10";function s(t){for(var i=et(),s=100;s<=700;s+=300){for(var a=s+" ",h=!0,u=0;u0;)this.pop()},e.prototype.extend=function(t){for(var e=0,i=t.length;e=1?(i=l,n=c):(i=h+d*p,n=u+d*f),[i,n]}function kt(t,e){for(var i=!0,n=t.length-1;n>=0;--n)if(t[n]!=e[n]){i=!1;break}return i}function Mt(t,e){var i=t[0]-e[0],n=t[1]-e[1];return i*i+n*n}function It(t,e){return Math.sqrt(Mt(t,e))}var Pt=X,Rt=Y,bt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey},Dt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&e.shiftKey},At=function(t){var e=t.pointerEvent;return a(void 0!==e,56),e.isPrimary&&0===e.button},Gt=0,Ot=1,Lt=2,Tt=4,Xt=8,Yt=16;function jt(t){for(var e=Vt(),i=0,n=t.length;ir&&(h|=Tt),ao&&(h|=Lt),h===Gt&&(h=Ot),h}function Vt(){return[1/0,1/0,-1/0,-1/0]}function zt(t,e,i,n,r){return r?(r[0]=t,r[1]=e,r[2]=i,r[3]=n,r):[t,e,i,n]}function Kt(t){return zt(1/0,1/0,-1/0,-1/0,t)}function Ut(t,e){var i=t[0],n=t[1];return zt(i,n,i,n,e)}function Ht(t,e,i,n,r){return $t(Kt(r),t,e,i,n)}function Jt(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function Zt(t,e){e[0]t[2]&&(t[2]=e[0]),e[1]t[3]&&(t[3]=e[1])}function $t(t,e,i,n,r){for(;i=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}var he="Point",ue="LineString",le="LinearRing",ce="Polygon",pe="MultiPoint",fe="MultiLineString",de="MultiPolygon",_e="GeometryCollection",ge="Circle",ye="Rectangle",ve="Ellipse";function me(t,e,i,n,r,o){for(var s=o||[],a=0,h=e;h1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=Se,a=0;as?h=s:h<-s&&(h=-s),o[a+1]=h}return o}function be(t,e,i){var n=t.length,r=i>1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=0;s=e[0]||(t[1]<=e[1]&&t[3]>=e[1]||te(t,this.intersectsCoordinate,this))}return!1},e.prototype.setCenter=function(t){var e=this.stride,i=this.flatCoordinates[e]-this.flatCoordinates[0],n=t.slice();n[e]=n[0]+i;for(var r=1;re?1:t1)a=i;else{if(f>0){for(var d=0;dr&&(r=u),o=a,s=h}return r}function ci(t,e,i,n,r){for(var o=0,s=i.length;o>1)],e))<0?s=n+1:(a=n,h=!r);return h?s:~s}(f,y);if(v<0){var m=(y-f[-v-2])/(f[-v-1]-f[-v-2]),C=e+(-v-2)*n;s=p(t[C],t[C+n],m),a=p(t[C+1],t[C+n+1],m)}else s=t[e+v*n],a=t[e+v*n+1]}return o?(o[0]=s,o[1]=a,o):[s,a]}function yi(t,e,i,n,r,o){if(i==e)return null;var s;if(r>1;ro&&(u-a)*(o-h)-(r-a)*(l-h)>0&&s++:l<=o&&(u-a)*(o-h)-(r-a)*(l-h)<0&&s--,a=u,h=l}return 0!==s}function Ci(t,e,i,n,r,o){if(0===i.length)return!1;if(!mi(t,e,i[0],n,r,o))return!1;for(var s=1,a=i.length;s=r[0]&&o[2]<=r[2]||(o[1]>=r[1]&&o[3]<=r[3]||xi(t,e,i,n,(function(t,e){return function(t,e,i){var n=!1,r=Wt(t,e),o=Wt(t,i);if(r===Ot||o===Ot)n=!0;else{var s,a,h=t[0],u=t[1],l=t[2],c=t[3],p=e[0],f=e[1],d=i[0],_=i[1],g=(_-f)/(d-p);o&Lt&&!(r&Lt)&&(n=(s=d-(_-c)/g)>=h&&s<=l),n||!(o&Tt)||r&Tt||(n=(a=_-(d-l)*g)>=u&&a<=c),n||!(o&Xt)||r&Xt||(n=(s=d-(_-u)/g)>=h&&s<=l),n||!(o&Yt)||r&Yt||(n=(a=_-(d-h)*g)>=u&&a<=c)}return n}(r,t,e)})))))}function Ei(t,e,i,n,r){if(!function(t,e,i,n,r){return!!wi(t,e,i,n,r)||(!!mi(t,e,i,n,r[0],r[1])||(!!mi(t,e,i,n,r[0],r[3])||(!!mi(t,e,i,n,r[2],r[1])||!!mi(t,e,i,n,r[2],r[3]))))}(t,e,i[0],n,r))return!1;if(1===i.length)return!0;for(var o=1,s=i.length;o0;){for(var p=u.pop(),f=u.pop(),d=0,_=t[f],g=t[f+1],y=t[p],v=t[p+1],m=f+n;md&&(c=m,d=C)}d>r&&(h[(c-e)/n]=1,f+n0&&_>f)&&(d<0&&g0&&g>d)?(a=c,h=p):(o[s++]=a,o[s++]=h,u=a,l=h,a=c,h=p)}}return o[s++]=a,o[s++]=h,s}function Pi(t,e,i,n,r,o,s,a){for(var h=0,u=i.length;hC&&Ci(t,e,i,n,u=(l+c)/2,d)&&(m=u,C=x),l=c}return isNaN(m)&&(m=r[o]),s?(s.push(m,d,C),s):[m,d,C]}function Xi(t,e,i,n){for(;e0}function ji(t,e,i,n,r){for(var o=void 0!==r&&r,s=0,a=i.length;s0}}else if(t.type==wt){var n=this.handleDownEvent(t);n&&t.preventDefault(),this.handlingDownUpSequence=n,e=this.stopDown(n)}else t.type==xt&&this.handleMoveEvent(t);return!e},e.prototype.handleMoveEvent=function(t){},e.prototype.handleUpEvent=function(t){return!1},e.prototype.stopDown=function(t){return t},e.prototype.updateTrackedPointers_=function(t){if(function(t){var e=t.type;return e===wt||e===Ct||e===Et}(t)){var e=t.pointerEvent,i=e.pointerId.toString();t.type==Et?delete this.trackedPointers_[i]:(t.type==wt||i in this.trackedPointers_)&&(this.trackedPointers_[i]=e),this.targetPointers=k(this.trackedPointers_)}},e}(function(t){function e(e){t.call(this),e.handleEvent&&(this.handleEvent=e.handleEvent),this.map_=null,this.setActive(!0)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getActive=function(){return this.get(Ki)},e.prototype.getMap=function(){return this.map_},e.prototype.handleEvent=function(t){return!0},e.prototype.setActive=function(t){this.set(Ki,t)},e.prototype.setMap=function(t){this.map_=t},e}(ft)),Hi="VECTOR",Ji="opacity",Zi="visible",$i="extent",Qi="zIndex",tn="maxResolution",en="minResolution",nn="source",rn="precompose",on="undefined",sn="ready";var an=function(t){function e(e){var i=F({},e);delete i.source,t.call(this,i),this.mapPrecomposeKey_=null,this.mapRenderKey_=null,this.sourceChangeKey_=null,e.map&&this.setMap(e.map),G(this,pt(nn),this.handleSourcePropertyChange_,this);var n=e.source?e.source:null;this.setSource(n)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getLayersArray=function(t){var e=t||[];return e.push(this),e},e.prototype.getLayerStatesArray=function(t){var e=t||[];return e.push(this.getLayerState()),e},e.prototype.getSource=function(){return this.get(nn)||null},e.prototype.getSourceState=function(){var t=this.getSource();return t?t.getState():on},e.prototype.handleSourceChange_=function(){this.changed()},e.prototype.handleSourcePropertyChange_=function(){this.sourceChangeKey_&&(T(this.sourceChangeKey_),this.sourceChangeKey_=null);var t=this.getSource();t&&(this.sourceChangeKey_=G(t,W,this.handleSourceChange_,this)),this.changed()},e.prototype.setMap=function(t){this.mapPrecomposeKey_&&(T(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(T(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=G(t,rn,(function(t){var e=t,i=this.getLayerState();i.managed=!1,void 0===this.getZIndex()&&(i.zIndex=1/0),e.frameState.layerStatesArray.push(i),e.frameState.layerStates[o(this)]=i}),this),this.mapRenderKey_=G(this,W,t.render,t),this.changed())},e.prototype.setSource=function(t){this.set(nn,t)},e}(function(t){function e(e){t.call(this);var i=F({},e);i[Ji]=void 0!==e.opacity?e.opacity:1,i[Zi]=void 0===e.visible||e.visible,i[Qi]=e.zIndex,i[tn]=void 0!==e.maxResolution?e.maxResolution:1/0,i[en]=void 0!==e.minResolution?e.minResolution:0,this.setProperties(i),this.state_=null,this.type}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getType=function(){return this.type},e.prototype.getLayerState=function(){var t=this.state_||{layer:this,managed:!0};return t.opacity=h(this.getOpacity(),0,1),t.sourceState=this.getSourceState(),t.visible=this.getVisible(),t.extent=this.getExtent(),t.zIndex=this.getZIndex()||0,t.maxResolution=this.getMaxResolution(),t.minResolution=Math.max(this.getMinResolution(),0),this.state_=t,t},e.prototype.getLayersArray=function(t){return n()},e.prototype.getLayerStatesArray=function(t){return n()},e.prototype.getExtent=function(){return this.get($i)},e.prototype.getMaxResolution=function(){return this.get(tn)},e.prototype.getMinResolution=function(){return this.get(en)},e.prototype.getOpacity=function(){return this.get(Ji)},e.prototype.getSourceState=function(){return n()},e.prototype.getVisible=function(){return this.get(Zi)},e.prototype.getZIndex=function(){return this.get(Qi)},e.prototype.setExtent=function(t){this.set($i,t)},e.prototype.setMaxResolution=function(t){this.set(tn,t)},e.prototype.setMinResolution=function(t){this.set(en,t)},e.prototype.setOpacity=function(t){this.set(Ji,t)},e.prototype.setVisible=function(t){this.set(Zi,t)},e.prototype.setZIndex=function(t){this.set(Qi,t)},e}(ft)),hn="vector",un=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.checksum_=void 0};un.prototype.clone=function(){var t=this.getColor();return new un({color:Array.isArray(t)?t.slice():t||void 0})},un.prototype.getColor=function(){return this.color_},un.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},un.prototype.getChecksum=function(){if(void 0===this.checksum_){var t=this.color_;t?Array.isArray(t)||"string"==typeof t?this.checksum_="f"+_(t):this.checksum_=o(this.color_):this.checksum_="f-"}return this.checksum_};var ln=un,cn=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.lineCap_=e.lineCap,this.lineDash_=void 0!==e.lineDash?e.lineDash:null,this.lineDashOffset_=e.lineDashOffset,this.lineJoin_=e.lineJoin,this.miterLimit_=e.miterLimit,this.width_=e.width,this.checksum_=void 0};cn.prototype.clone=function(){var t=this.getColor();return new cn({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})},cn.prototype.getColor=function(){return this.color_},cn.prototype.getLineCap=function(){return this.lineCap_},cn.prototype.getLineDash=function(){return this.lineDash_},cn.prototype.getLineDashOffset=function(){return this.lineDashOffset_},cn.prototype.getLineJoin=function(){return this.lineJoin_},cn.prototype.getMiterLimit=function(){return this.miterLimit_},cn.prototype.getWidth=function(){return this.width_},cn.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},cn.prototype.setLineCap=function(t){this.lineCap_=t,this.checksum_=void 0},cn.prototype.setLineDash=function(t){this.lineDash_=t,this.checksum_=void 0},cn.prototype.setLineDashOffset=function(t){this.lineDashOffset_=t,this.checksum_=void 0},cn.prototype.setLineJoin=function(t){this.lineJoin_=t,this.checksum_=void 0},cn.prototype.setMiterLimit=function(t){this.miterLimit_=t,this.checksum_=void 0},cn.prototype.setWidth=function(t){this.width_=t,this.checksum_=void 0},cn.prototype.getChecksum=function(){return void 0===this.checksum_&&(this.checksum_="s",this.color_?"string"==typeof this.color_?this.checksum_+=this.color_:this.checksum_+=o(this.color_):this.checksum_+="-",this.checksum_+=","+(void 0!==this.lineCap_?this.lineCap_.toString():"-")+","+(this.lineDash_?this.lineDash_.toString():"-")+","+(void 0!==this.lineDashOffset_?this.lineDashOffset_:"-")+","+(void 0!==this.lineJoin_?this.lineJoin_:"-")+","+(void 0!==this.miterLimit_?this.miterLimit_.toString():"-")+","+(void 0!==this.width_?this.width_.toString():"-")),this.checksum_};var pn=cn,fn=function(t){var e=t||{};this.geometry_=null,this.geometryFunction_=yn,void 0!==e.geometry&&this.setGeometry(e.geometry),this.fill_=void 0!==e.fill?e.fill:null,this.image_=void 0!==e.image?e.image:null,this.renderer_=void 0!==e.renderer?e.renderer:null,this.stroke_=void 0!==e.stroke?e.stroke:null,this.text_=void 0!==e.text?e.text:null,this.zIndex_=e.zIndex};fn.prototype.clone=function(){var t=this.getGeometry();return t&&"object"==typeof t&&(t=t.clone()),new fn({geometry:t,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})},fn.prototype.getRenderer=function(){return this.renderer_},fn.prototype.setRenderer=function(t){this.renderer_=t},fn.prototype.getGeometry=function(){return this.geometry_},fn.prototype.getGeometryFunction=function(){return this.geometryFunction_},fn.prototype.getFill=function(){return this.fill_},fn.prototype.setFill=function(t){this.fill_=t},fn.prototype.getImage=function(){return this.image_},fn.prototype.setImage=function(t){this.image_=t},fn.prototype.getStroke=function(){return this.stroke_},fn.prototype.setStroke=function(t){this.stroke_=t},fn.prototype.getText=function(){return this.text_},fn.prototype.setText=function(t){this.text_=t},fn.prototype.getZIndex=function(){return this.zIndex_},fn.prototype.setGeometry=function(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=yn,this.geometry_=t},fn.prototype.setZIndex=function(t){this.zIndex_=t};var dn=null;function _n(t,e){if(!dn){var i=new ln({color:"rgba(255,255,255,0.4)"}),n=new pn({color:"#3399CC",width:1.25});dn=[new fn({image:new ot({fill:i,stroke:n,radius:5}),fill:i,stroke:n})]}return dn}function gn(){var t={},e=[255,255,255,1],i=[0,153,255,1];return t[ce]=[new fn({fill:new ln({color:[255,255,255,.5]})})],t[de]=t[ce],t[ue]=[new fn({stroke:new pn({color:e,width:5})}),new fn({stroke:new pn({color:i,width:3})})],t[fe]=t[ue],t[ge]=t[ce].concat(t[ue]),t[he]=[new fn({image:new ot({radius:6,fill:new ln({color:i}),stroke:new pn({color:e,width:1.5})}),zIndex:1/0})],t[pe]=t[he],t[_e]=t[ce].concat(t[ue],t[he]),t}function yn(t){return t.getGeometry()}var vn=fn,mn="renderOrder",Cn=function(t){function e(e){var i=e||{},n=F({},i);delete n.style,delete n.renderBuffer,delete n.updateWhileAnimating,delete n.updateWhileInteracting,t.call(this,n),this.declutter_=void 0!==i.declutter&&i.declutter,this.renderBuffer_=void 0!==i.renderBuffer?i.renderBuffer:100,this.style_=null,this.styleFunction_=void 0,this.setStyle(i.style),this.updateWhileAnimating_=void 0!==i.updateWhileAnimating&&i.updateWhileAnimating,this.updateWhileInteracting_=void 0!==i.updateWhileInteracting&&i.updateWhileInteracting,this.renderMode_=i.renderMode||hn,this.type=Hi}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDeclutter=function(){return this.declutter_},e.prototype.setDeclutter=function(t){this.declutter_=t},e.prototype.getRenderBuffer=function(){return this.renderBuffer_},e.prototype.getRenderOrder=function(){return this.get(mn)},e.prototype.getStyle=function(){return this.style_},e.prototype.getStyleFunction=function(){return this.styleFunction_},e.prototype.getUpdateWhileAnimating=function(){return this.updateWhileAnimating_},e.prototype.getUpdateWhileInteracting=function(){return this.updateWhileInteracting_},e.prototype.setRenderOrder=function(t){this.set(mn,t)},e.prototype.setStyle=function(t){this.style_=void 0!==t?t:_n,this.styleFunction_=null===t?void 0:function(t){var e;if("function"==typeof t)e=t;else{var i;if(Array.isArray(t))i=t;else a("function"==typeof t.getZIndex,41),i=[t];e=function(){return i}}return e}(this.style_),this.changed()},e.prototype.getRenderMode=function(){return this.renderMode_},e}(an);Cn.prototype.getSource;var xn=Cn,wn="arraybuffer",En="json",Fn="text",Sn="xml";function kn(t,e){return function(t,e,i,n){return function(r,o,s){var a=new XMLHttpRequest;a.open("GET","function"==typeof t?t(r,o,s):t,!0),e.getType()==wn&&(a.responseType="arraybuffer"),a.onload=function(t){if(!a.status||a.status>=200&&a.status<300){var r,o=e.getType();o==En||o==Fn?r=a.responseText:o==Sn?(r=a.responseXML)||(r=(new DOMParser).parseFromString(a.responseText,"application/xml")):o==wn&&(r=a.response),r?i.call(this,e.readFeatures(r,{featureProjection:s}),e.readProjection(r),e.getLastExtent()):n.call(this)}else n.call(this)}.bind(this),a.onerror=function(){n.call(this)}.bind(this),a.send()}}(t,e,(function(t,e){"function"==typeof this.addFeatures&&this.addFeatures(t)}),j)}function Mn(t,e){return[[-1/0,-1/0,1/0,1/0]]}function In(t){return t?Array.isArray(t)?function(e){return t}:"function"==typeof t?t:function(e){return[t]}:null}var Pn=function(t){function e(e){t.call(this),this.projection_=Ve(e.projection),this.attributions_=In(e.attributions),this.attributionsCollapsible_=void 0===e.attributionsCollapsible||e.attributionsCollapsible,this.loading=!1,this.state_=void 0!==e.state?e.state:sn,this.wrapX_=void 0!==e.wrapX&&e.wrapX}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getAttributions=function(){return this.attributions_},e.prototype.getAttributionsCollapsible=function(){return this.attributionsCollapsible_},e.prototype.getProjection=function(){return this.projection_},e.prototype.getResolutions=function(){return n()},e.prototype.getState=function(){return this.state_},e.prototype.getWrapX=function(){return this.wrapX_},e.prototype.refresh=function(){this.changed()},e.prototype.setAttributions=function(t){this.attributions_=In(t),this.changed()},e.prototype.setState=function(t){this.state_=t,this.changed()},e}(ft),Rn="addfeature",bn="changefeature",Dn="clear",An="removefeature",Gn=i("A1R+"),On=i.n(Gn),Ln=function(t){this.rbush_=On()(t,void 0),this.items_={}};Ln.prototype.insert=function(t,e){var i={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3],value:e};this.rbush_.insert(i),this.items_[o(e)]=i},Ln.prototype.load=function(t,e){for(var i=new Array(e.length),n=0,r=e.length;n2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]];if(0===o[1])t=[[i,i,i,i]];else{var s=[-1*o[1],o[0]],a=o[0]/o[1],h=(r[0]+a*(n[1]-r[1])-n[0])/(s[0]-s[1]*a),u=[h*s[0],h*s[1]];t=[[[i[0]-u[0],i[1]-u[1]],[n[0]-u[0],n[1]-u[1]],[n[0]+u[0],n[1]+u[1]],[i[0]+u[0],i[1]+u[1]]]]}}else t=[t];var l=e;return l?l.setCoordinates(t):l=new jn(t),l};else if(this.type_===ve)this.minPoints_=3,this.maxPoints_=3,r=function(t,e){if(t.length>2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]],s=[i[0]+.5*o[0],i[1]+.5*o[1]];if(0===o[1])t=[[i,i,i,i]];else{var a=[-1*o[1],o[0]],h=o[0]/o[1],u=(r[0]+h*(n[1]-r[1])-n[0])/(a[0]-a[1]*h),l=[u*a[0],u*a[1]];t=[[[i[0],i[1]],[s[0]-l[0],s[1]-l[1]],[n[0],n[1]],[s[0]+l[0],s[1]+l[1]]]]}}else t=[t];var c=e;return c?c.setCoordinates(t):c=new qn(t),c};else{var o,s=this.mode_;s===Bn?o=Di:s===Nn?o=Ri:s===Wn&&(o=Wi),r=function(t,e){var i=e;return i?s===Wn?t[0].length?i.setCoordinates([t[0].concat([t[0][0]])]):i.setCoordinates([]):i.setCoordinates(t):i=new o(t),i}}this.geometryFunction_=r,this.dragVertexDelay_=void 0!==e.dragVertexDelay?e.dragVertexDelay:500,this.finishCoordinate_=null,this.sketchFeature_=null,this.sketchPoint_=null,this.sketchCoords_=null,this.sketchLine_=null,this.sketchLineCoords_=null,this.squaredClickTolerance_=e.clickTolerance?e.clickTolerance*e.clickTolerance:36,this.overlay_=new xn({source:new Yn({useSpatialIndex:!1,wrapX:!!e.wrapX&&e.wrapX}),style:e.style?e.style:(n=gn(),function(t,e){return n[t.getGeometry().getType()]}),updateWhileInteracting:!0}),this.geometryName_=e.geometryName,this.condition_=e.condition?e.condition:bt,this.freehandCondition_,e.freehand?this.freehandCondition_=Pt:this.freehandCondition_=e.freehandCondition?e.freehandCondition:Dt,G(this,pt(Ki),this.updateState_,this)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setMap=function(e){t.prototype.setMap.call(this,e),this.updateState_()},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleEvent=function(e){e.originalEvent.type===z&&e.preventDefault(),this.freehand_=this.mode_!==Bn&&this.freehandCondition_(e);var i=e.type===xt,n=!0;!this.freehand_&&this.lastDragTime_&&e.type===Ct&&(Date.now()-this.lastDragTime_>=this.dragVertexDelay_?(this.downPx_=e.pixel,this.shouldHandle_=!this.freehand_,i=!0):this.lastDragTime_=void 0,this.shouldHandle_&&void 0!==this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0));return this.freehand_&&e.type===Ct&&null!==this.sketchFeature_?(this.addToDrawing_(e),n=!1):this.freehand_&&e.type===wt?n=!1:i?(n=e.type===xt)&&this.freehand_?n=this.handlePointerMove_(e):("mouse"==e.pointerEvent.pointerType||e.type===Ct&&void 0===this.downTimeout_)&&this.handlePointerMove_(e):e.type===mt&&(n=!1),t.prototype.handleEvent.call(this,e)&&n},e.prototype.handleDownEvent=function(t){return this.shouldHandle_=!this.freehand_,this.freehand_?(this.downPx_=t.pixel,this.finishCoordinate_||this.startDrawing_(t),!0):!!this.condition_(t)&&(this.lastDragTime_=Date.now(),this.downTimeout_=setTimeout(function(){this.handlePointerMove_(new Ft(xt,t.map,t.pointerEvent,!1,t.frameState))}.bind(this),this.dragVertexDelay_),this.downPx_=t.pixel,!0)},e.prototype.handleUpEvent=function(t){var e=!0;this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0),this.handlePointerMove_(t);var i=this.mode_===Vn;return this.shouldHandle_?(this.finishCoordinate_?this.freehand_||i?this.finishDrawing():this.atFinish_(t)?this.finishCondition_(t)&&this.finishDrawing():this.addToDrawing_(t):(this.startDrawing_(t),this.mode_===Bn&&this.finishDrawing()),e=!1):this.freehand_&&(this.finishCoordinate_=null,this.abortDrawing_()),!e&&this.stopClick_&&t.stopPropagation(),e},e.prototype.handlePointerMove_=function(t){if(this.downPx_&&(!this.freehand_&&this.shouldHandle_||this.freehand_&&!this.shouldHandle_)){var e=this.downPx_,i=t.pixel,n=e[0]-i[0],r=e[1]-i[1],o=n*n+r*r;if(this.shouldHandle_=this.freehand_?o>this.squaredClickTolerance_:o<=this.squaredClickTolerance_,!this.shouldHandle_)return!0}return this.finishCoordinate_?this.modifyDrawing_(t):this.createOrUpdateSketchPoint_(t),!0},e.prototype.atFinish_=function(t){var e=!1;if(this.sketchFeature_){var i=!1,n=[this.finishCoordinate_];if(this.mode_===Nn)i=this.sketchCoords_.length>this.minPoints_;else if(this.mode_===Wn){var r=this.sketchCoords_;i=r[0].length>this.minPoints_,n=[r[0][0],r[0][r[0].length-2]]}if(i)for(var o=t.map,s=0,a=n.length;s=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),this.geometryFunction_(i,r)):this.mode_===Wn&&((i=this.sketchCoords_[0]).length>=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),e&&(this.finishCoordinate_=i[0]),this.geometryFunction_(this.sketchCoords_,r)),this.updateSketchFeatures_(),e&&this.finishDrawing()},e.prototype.removeLastPoint=function(){if(this.sketchFeature_){var t,e=this.sketchFeature_.getGeometry();this.mode_===Nn?((t=this.sketchCoords_).splice(-2,1),this.geometryFunction_(t,e),t.length>=2&&(this.finishCoordinate_=t[t.length-2].slice())):this.mode_===Wn&&((t=this.sketchCoords_[0]).splice(-2,1),this.sketchLine_.getGeometry().setCoordinates(t),this.geometryFunction_(this.sketchCoords_,e)),0===t.length&&(this.finishCoordinate_=null),this.updateSketchFeatures_()}},e.prototype.finishDrawing=function(){var t=this.abortDrawing_();if(t){var e=this.sketchCoords_,i=t.getGeometry();this.mode_===Nn?(e.pop(),this.geometryFunction_(e,i)):this.mode_===Wn&&(e[0].pop(),this.geometryFunction_(e,i),e=i.getCoordinates()),this.type_===pe?t.setGeometry(new Ai([e])):this.type_===fe?t.setGeometry(new bi([e])):this.type_===de&&t.setGeometry(new Vi([e])),this.dispatchEvent(new Hn(Un,t)),this.features_&&this.features_.push(t),this.source_&&this.source_.addFeature(t)}},e.prototype.abortDrawing_=function(){this.finishCoordinate_=null;var t=this.sketchFeature_;return t&&(this.sketchFeature_=null,this.sketchPoint_=null,this.sketchLine_=null,this.overlay_.getSource().clear(!0)),t},e.prototype.extend=function(t){var e=t.getGeometry();this.sketchFeature_=t,this.sketchCoords_=e.getCoordinates();var i=this.sketchCoords_[this.sketchCoords_.length-1];this.finishCoordinate_=i.slice(),this.sketchCoords_.push(i.slice()),this.updateSketchFeatures_(),this.dispatchEvent(new Hn(Kn,this.sketchFeature_))},e.prototype.updateSketchFeatures_=function(){var t=[];this.sketchFeature_&&t.push(this.sketchFeature_),this.sketchLine_&&t.push(this.sketchLine_),this.sketchPoint_&&t.push(this.sketchPoint_);var e=this.overlay_.getSource();e.clear(!0),e.addFeatures(t)},e.prototype.updateState_=function(){var t=this.getMap(),e=this.getActive();t&&e||this.abortDrawing_(),this.overlay_.setMap(e?t:null)},e}(Ui),Zn=Vue.resource("/api/v1/volumes{/id}/export-area"),$n="modifystart",Qn="modifyend",tr=function(t){function e(e,i,n){t.call(this,e),this.features=i,this.mapBrowserEvent=n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(B);function er(t,e){return t.index-e.index}function ir(t,e){var i,n,r=e.geometry;if(r.getType()===ge){var o=r;if(1===e.index){var s=Mt(o.getCenter(),t),a=Math.sqrt(s)-o.getRadius();return a*a}}return i=t,n=e.segment,Mt(i,St(i,n))}function nr(t,e){var i=e.geometry;return i.getType()===ge&&1===e.index||i.getType()===ve||i.getType()===ye?i.getClosestPoint(t):St(t,e.segment)}var rr=function(t){function e(e){var i,n;if(t.call(this,e),this.condition_=e.condition?e.condition:At,this.defaultDeleteCondition_=function(t){return function(t){var e=t.originalEvent;return e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey}(t)&&function(t){return t.type==vt}(t)},this.deleteCondition_=e.deleteCondition?e.deleteCondition:this.defaultDeleteCondition_,this.insertVertexCondition_=e.insertVertexCondition?e.insertVertexCondition:Pt,this.vertexFeature_=null,this.vertexSegments_=null,this.lastPixel_=[0,0],this.ignoreNextSingleClick_=!1,this.modified_=!1,this.rBush_=new Tn,this.pixelTolerance_=void 0!==e.pixelTolerance?e.pixelTolerance:10,this.snappedToVertex_=!1,this.changingFeature_=!1,this.dragSegments_=[],this.overlay_=new xn({source:new Yn({useSpatialIndex:!1,wrapX:!!e.wrapX}),style:e.style?e.style:(i=gn(),function(t,e){return i[he]}),updateWhileAnimating:!0,updateWhileInteracting:!0}),this.SEGMENT_WRITERS_={Point:this.writePointGeometry_,LineString:this.writeLineStringGeometry_,LinearRing:this.writeLineStringGeometry_,Polygon:this.writePolygonGeometry_,MultiPoint:this.writeMultiPointGeometry_,MultiLineString:this.writeMultiLineStringGeometry_,MultiPolygon:this.writeMultiPolygonGeometry_,Rectangle:this.writePolygonGeometry_,Ellipse:this.writePolygonGeometry_,Circle:this.writeCircleGeometry_,GeometryCollection:this.writeGeometryCollectionGeometry_},this.source_=null,e.source?(this.source_=e.source,n=new gt(this.source_.getFeatures()),G(this.source_,Rn,this.handleSourceAdd_,this),G(this.source_,An,this.handleSourceRemove_,this)):n=e.features,!n)throw new Error("The modify interaction requires features or a source");this.features_=n,this.features_.forEach(this.addFeature_.bind(this)),G(this.features_,st,this.handleFeatureAdd_,this),G(this.features_,at,this.handleFeatureRemove_,this),this.lastPointerEvent_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.addFeature_=function(t){var e=t.getGeometry();e&&e.getType()in this.SEGMENT_WRITERS_&&this.SEGMENT_WRITERS_[e.getType()].call(this,t,e);var i=this.getMap();i&&i.isRendered()&&this.getActive()&&this.handlePointerAtPixel_(this.lastPixel_,i),G(t,W,this.handleFeatureChange_,this)},e.prototype.willModifyFeatures_=function(t){this.modified_||(this.modified_=!0,this.dispatchEvent(new tr($n,this.features_,t)))},e.prototype.removeFeature_=function(t){this.removeFeatureSegmentData_(t),this.vertexFeature_&&0===this.features_.getLength()&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),L(t,W,this.handleFeatureChange_,this)},e.prototype.removeFeatureSegmentData_=function(t){var e=this.rBush_,i=[];e.forEach((function(e){t===e.feature&&i.push(e)}));for(var n=i.length-1;n>=0;--n)e.remove(i[n])},e.prototype.setActive=function(e){this.vertexFeature_&&!e&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),t.prototype.setActive.call(this,e)},e.prototype.setMap=function(e){this.overlay_.setMap(e),t.prototype.setMap.call(this,e)},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleSourceAdd_=function(t){t.feature&&this.features_.push(t.feature)},e.prototype.handleSourceRemove_=function(t){t.feature&&this.features_.remove(t.feature)},e.prototype.handleFeatureAdd_=function(t){this.addFeature_(t.element)},e.prototype.handleFeatureChange_=function(t){if(!this.changingFeature_){var e=t.target;this.removeFeature_(e),this.addFeature_(e)}},e.prototype.handleFeatureRemove_=function(t){var e=t.element;this.removeFeature_(e)},e.prototype.writePointGeometry_=function(t,e){var i=e.getCoordinates(),n={feature:t,geometry:e,segment:[i,i]};this.rBush_.insert(e.getExtent(),n)},e.prototype.writeMultiPointGeometry_=function(t,e){for(var i=e.getCoordinates(),n=0,r=i.length;n=0;--_)this.insertVertex_.apply(this,n[_])}return!!this.vertexFeature_},e.prototype.handleUpEvent=function(t){for(var e=this.dragSegments_.length-1;e>=0;--e){var i=this.dragSegments_[e][0],n=i.geometry;if(n.getType()===ye||n.getType()===ve)this.features_.remove(i.feature),this.features_.push(i.feature);else if(n.getType()===ge){var r=n.getCenter(),o=i.featureSegments[0],s=i.featureSegments[1];o.segment[0]=o.segment[1]=r,s.segment[0]=s.segment[1]=r,this.rBush_.update(Ut(r),o),this.rBush_.update(n.getExtent(),s)}else this.rBush_.update(jt(i.segment),i)}return this.modified_&&(this.dispatchEvent(new tr(Qn,this.features_,t)),this.modified_=!1),!1},e.prototype.handlePointerMove_=function(t){this.lastPixel_=t.pixel,this.handlePointerAtPixel_(t.pixel,t.map)},e.prototype.handlePointerAtPixel_=function(t,e){var i,n,r,s=e.getCoordinateFromPixel(t),a=(i=Ut(s),n=e.getView().getResolution()*this.pixelTolerance_,r?(r[0]=i[0]-n,r[1]=i[1]-n,r[2]=i[2]+n,r[3]=i[3]+n,r):[i[0]-n,i[1]-n,i[2]+n,i[3]+n]),h=this.rBush_.getInExtent(a);if(h.length>0){h.sort((function(t,e){return ir(s,t)-ir(s,e)}));var u=h[0],l=u.segment,c=nr(s,u),p=e.getPixelFromCoordinate(c),f=It(t,p);if(f<=this.pixelTolerance_){var d={};if(u.geometry.getType()===ge&&1===u.index)this.snappedToVertex_=!0,this.createOrUpdateVertexFeature_(c);else{var _=e.getPixelFromCoordinate(l[0]),g=e.getPixelFromCoordinate(l[1]),y=Mt(p,_),v=Mt(p,g);f=Math.sqrt(Math.min(y,v)),this.snappedToVertex_=f<=this.pixelTolerance_,this.snappedToVertex_&&(c=y>v?l[1]:l[0]),this.createOrUpdateVertexFeature_(c);for(var m=1,C=h.length;m=0;--r)c=o((l=(i=p[r])[0]).feature),l.depth&&(c+="-"+l.depth.join("-")),c in f||(f[c]={}),0===i[1]?(f[c].right=l,f[c].index=l.index):1==i[1]&&(f[c].left=l,f[c].index=l.index+1);for(c in f){switch(u=f[c].right,a=f[c].left,(h=(s=f[c].index)-1)<0&&(h=0),t=e=(n=(l=void 0!==a?a:u).geometry).getCoordinates(),d=!1,n.getType()){case fe:e[l.depth[0]].length>2&&(e[l.depth[0]].splice(s,1),d=!0);break;case ue:e.length>2&&(e.splice(s,1),d=!0);break;case de:t=t[l.depth[1]];case ce:(t=t[l.depth[0]]).length>4&&(s==t.length-1&&(s=0),t.splice(s,1),d=!0,0===s&&(t.pop(),t.push(t[0]),h=t.length-1))}if(d){this.setGeometryCoordinates_(n,e);var _=[];if(void 0!==a&&(this.rBush_.remove(a),_.push(a.segment[0])),void 0!==u&&(this.rBush_.remove(u),_.push(u.segment[1])),void 0!==a&&void 0!==u){var g={depth:l.depth,feature:l.feature,geometry:l.geometry,index:h,segment:_};this.rBush_.insert(jt(g.segment),g)}this.updateSegmentIndices_(n,s,l.depth,-1),this.vertexFeature_&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),p.length=0}}return d},e.prototype.setGeometryCoordinates_=function(t,e){this.changingFeature_=!0,t.setCoordinates(e),this.changingFeature_=!1},e.prototype.updateSegmentIndices_=function(t,e,i,n){this.rBush_.forEachInExtent(t.getExtent(),(function(r){r.geometry===t&&(void 0===i||void 0===r.depth||function(t,e){var i=t.length;if(i!==e.length)return!1;for(var n=0;ne&&(r.index+=n)}))},e}(Ui),or=biigle.$require("events"),sr=biigle.$require("messages").handleErrorResponse,ar=biigle.$require("annotations.components.settingsTabPlugins");ar&&(ar.exportArea={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null,volumeId:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},layer:function(){return new xn({source:new Yn({features:new gt}),style:[new vn({stroke:new pn({color:"white",width:4}),image:new ot({radius:6,fill:new ln({color:"#666666"}),stroke:new pn({color:"white",width:2,lineDash:[2]})})}),new vn({stroke:new pn({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new Jn({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(t,e){t.length>1&&(t=[t[0],[t[0][0],t[1][1]],t[1],[t[1][0],t[0][1]]]);var i=e;return i?i.setCoordinates([t]):i=new jn([t]),i}})},modifyInteraction:function(){return new rr({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:Rt})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){var t=this;if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),Zn.delete({id:this.volumeId}).then((function(){return t.exportArea=null})).catch((function(t){e.addFeature(i),sr(t)}))}},updateCurrentImage:function(t,e){this.currentImage=e},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var t=this.currentImage.tiled?0:this.height,e=new jn([[[this.exportArea[0],t-this.exportArea[1]],[this.exportArea[0],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[1]]]]);this.layer.getSource().addFeature(new yt({geometry:e}))}},handleModifyend:function(t){this.updateExportArea(t.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(t){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),this.updateExportArea(t.feature).catch((function(){e.clear(),i&&e.addFeature(i)}))},updateExportArea:function(t){var e=this,i=t.getGeometry().getCoordinates()[0],n=this.currentImage.tiled?0:this.height;i=[i[0][0],n-i[0][1],i[2][0],n-i[2][1]].map(Math.round);var r=Zn.save({id:this.volumeId},{coordinates:i}).then((function(){return e.exportArea=i}));return r.catch(sr),r},extendMap:function(t){t.addLayer(this.layer),t.addInteraction(this.drawInteraction),t.addInteraction(this.modifyInteraction)}},watch:{opacity:function(t){t<1?this.settings.set("exportAreaOpacity",t):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(t)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.volumeId=biigle.$require("annotations.volumeId"),this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend),or.$on("images.change",this.updateCurrentImage),or.$on("annotations.map.init",this.extendMap)}})},"A1R+":function(t,e,i){"use strict";t.exports=r,t.exports.default=r;var n=i("YcpW");function r(t,e){if(!(this instanceof r))return new r(t,e);this._maxEntries=Math.max(4,t||9),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),e&&this._initFormat(e),this.clear()}function o(t,e,i){if(!i)return e.indexOf(t);for(var n=0;n=t.minX&&e.maxY>=t.minY}function _(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function g(t,e,i,r,o){for(var s,a=[e,i];a.length;)(i=a.pop())-(e=a.pop())<=r||(s=e+Math.ceil((i-e)/r/2)*r,n(t,s,e,i,o),a.push(e,s,s,i))}r.prototype={all:function(){return this._all(this.data,[])},search:function(t){var e=this.data,i=[],n=this.toBBox;if(!d(t,e))return i;for(var r,o,s,a,h=[];e;){for(r=0,o=e.children.length;r=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(r,o,e)},_split:function(t,e){var i=t[e],n=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,n);var o=this._chooseSplitIndex(i,r,n),a=_(i.children.splice(o,i.children.length-o));a.height=i.height,a.leaf=i.leaf,s(i,this.toBBox),s(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(i,a)},_splitRoot:function(t,e){this.data=_([t,e]),this.data.height=t.height+1,this.data.leaf=!1,s(this.data,this.toBBox)},_chooseSplitIndex:function(t,e,i){var n,r,o,s,h,u,l,p,f,d,_,g,y,v;for(u=l=1/0,n=e;n<=i-e;n++)r=a(t,0,n,this.toBBox),o=a(t,n,i,this.toBBox),f=r,d=o,_=void 0,g=void 0,y=void 0,v=void 0,_=Math.max(f.minX,d.minX),g=Math.max(f.minY,d.minY),y=Math.min(f.maxX,d.maxX),v=Math.min(f.maxY,d.maxY),s=Math.max(0,y-_)*Math.max(0,v-g),h=c(r)+c(o),s=e;r--)o=t.children[r],h(l,t.leaf?s(o):o),c+=p(l);return c},_adjustParentBBoxes:function(t,e,i){for(var n=i;n>=0;n--)h(e[n],t)},_condense:function(t){for(var e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children).splice(e.indexOf(t[i]),1):this.clear():s(t[i],this.toBBox)},_initFormat:function(t){var e=["return a"," - b",";"];this.compareMinX=new Function("a","b",e.join(t[0])),this.compareMinY=new Function("a","b",e.join(t[1])),this.toBBox=new Function("a","return {minX: a"+t[0]+", minY: a"+t[1]+", maxX: a"+t[2]+", maxY: a"+t[3]+"};")}}},YcpW:function(t,e,i){t.exports=function(){"use strict";function t(t,e,i){var n=t[e];t[e]=t[i],t[i]=n}function e(t,e){return te?1:0}return function(i,n,r,o,s){!function e(i,n,r,o,s){for(;o>r;){if(o-r>600){var a=o-r+1,h=n-r+1,u=Math.log(a),l=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*l*(a-l)/a)*(h-a/2<0?-1:1),p=Math.max(r,Math.floor(n-h*l/a+c)),f=Math.min(o,Math.floor(n+(a-h)*l/a+c));e(i,n,p,f,s)}var d=i[n],_=r,g=o;for(t(i,r,n),s(i[o],d)>0&&t(i,r,o);_0;)g--}0===s(i[r],d)?t(i,r,g):(g++,t(i,g,o)),g<=n&&(r=g+1),n<=g&&(o=g-1)}}(i,n,r||0,o||i.length-1,s||e)}}()}}); \ No newline at end of file +!function(t){var e={};function i(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)i.d(n,r,function(e){return t[e]}.bind(null,r));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="/",i(i.s=1)}({1:function(t,e,i){t.exports=i("2R1P")},"2R1P":function(t,e,i){"use strict";function n(){return function(){throw new Error("Unimplemented abstract method.")}()}i.r(e);var r=0;function o(t){return t.ol_uid||(t.ol_uid=String(++r))}var s=function(t){function e(e){var i="Assertion failed. See https://openlayers.org/en/"+("v"+"5.3.0".split("-")[0])+"/doc/errors/#"+e+" for details.";t.call(this,i),this.code=e,this.name="AssertionError",this.message=i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error);function a(t,e){if(!t)throw new s(e)}function h(t,e,i){return Math.min(Math.max(t,e),i)}var u="cosh"in Math?Math.cosh:function(t){var e=Math.exp(t);return(e+1/e)/2};function l(t,e,i,n,r,o){var s=r-i,a=o-n;if(0!==s||0!==a){var h=((t-i)*s+(e-n)*a)/(s*s+a*a);h>1?(i=r,n=o):h>0&&(i+=s*h,n+=a*h)}return c(t,e,i,n)}function c(t,e,i,n){var r=i-t,o=n-e;return r*r+o*o}function p(t,e,i){return t+i*(e-t)}var f=/^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i,d=/^([a-z]*)$/i;function _(t){return"string"==typeof t?t:y(t)}!function(){var t={},e=0}();function g(t){return t[0]=h(t[0]+.5|0,0,255),t[1]=h(t[1]+.5|0,0,255),t[2]=h(t[2]+.5|0,0,255),t[3]=h(t[3],0,1),t}function y(t){var e=t[0];e!=(0|e)&&(e=e+.5|0);var i=t[1];i!=(0|i)&&(i=i+.5|0);var n=t[2];return n!=(0|n)&&(n=n+.5|0),"rgba("+e+","+i+","+n+","+(void 0===t[3]?1:t[3])+")"}function v(t){return Array.isArray(t)?y(t):t}function m(t,e){var i=document.createElement("canvas");return t&&(i.width=t),e&&(i.height=e),i.getContext("2d")}var C="undefined"!=typeof navigator?navigator.userAgent.toLowerCase():"",x=(C.indexOf("firefox"),-1!==C.indexOf("safari")&&C.indexOf("chrom"),-1!==C.indexOf("webkit")&&C.indexOf("edge"),C.indexOf("macintosh"),window.devicePixelRatio,function(){var t=!1;try{t=!!document.createElement("canvas").getContext("2d").setLineDash}catch(t){}return t}()),w=(navigator,window,window,navigator.msPointerEnabled,2),E=function(){var t,e={};return function(i){if(t||(t=document.createElement("div").style),!(i in e)){t.font=i;var n=t.fontFamily;if(t.font="",!n)return null;e[i]=n.split(/,\s?/)}return e[i]}}(),F="function"==typeof Object.assign?Object.assign:function(t,e){var i=arguments;if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(t),r=1,o=arguments.length;r0},e.prototype.removeEventListener=function(t,e){var i=this.listeners_[t];if(i){var n=i.indexOf(e);t in this.pendingRemovals_?(i[n]=j,++this.pendingRemovals_[t]):(i.splice(n,1),0===i.length&&delete this.listeners_[t])}},e}(P),W="change",V="clear",K="contextmenu",z="dblclick",U=function(t){function e(e){t.call(this),this.highWaterMark=void 0!==e?e:2048,this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.canExpireCache=function(){return this.getCount()>this.highWaterMark},e.prototype.clear=function(){this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null,this.dispatchEvent(V)},e.prototype.containsKey=function(t){return this.entries_.hasOwnProperty(t)},e.prototype.forEach=function(t,e){for(var i=this.oldest_;i;)t.call(e,i.value_,i.key_,this),i=i.newer},e.prototype.get=function(t){var e=this.entries_[t];return a(void 0!==e,15),e===this.newest_||(e===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(e.newer.older=e.older,e.older.newer=e.newer),e.newer=null,e.older=this.newest_,this.newest_.newer=e,this.newest_=e),e.value_},e.prototype.remove=function(t){var e=this.entries_[t];return a(void 0!==e,15),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_},e.prototype.getCount=function(){return this.count_},e.prototype.getKeys=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.key_;return e},e.prototype.getValues=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.value_;return e},e.prototype.peekLast=function(){return this.oldest_.value_},e.prototype.peekLastKey=function(){return this.oldest_.key_},e.prototype.peekFirstKey=function(){return this.newest_.key_},e.prototype.pop=function(){var t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_},e.prototype.replace=function(t,e){this.get(t),this.entries_[t].value_=e},e.prototype.set=function(t,e){a(!(t in this.entries_),16);var i={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=i:this.oldest_=i,this.newest_=i,this.entries_[t]=i,++this.count_},e.prototype.setSize=function(t){this.highWaterMark=t},e.prototype.prune=function(){for(;this.canExpireCache();)this.pop()},e}(B);new Array(6);var H=[0,0,0,1],J=[0,0,0,1],$=new U,Z={},Q=null,tt={};!function(){var t,e,i=Z,n=["monospace","serif"],r=n.length,o="wmytzilWMYTZIL@#/&?$%10";function s(t){for(var i=et(),s=100;s<=700;s+=300){for(var a=s+" ",h=!0,u=0;u0;)this.pop()},e.prototype.extend=function(t){for(var e=0,i=t.length;e=1?(i=l,n=c):(i=h+d*p,n=u+d*f),[i,n]}function kt(t,e){for(var i=!0,n=t.length-1;n>=0;--n)if(t[n]!=e[n]){i=!1;break}return i}function Mt(t,e){var i=t[0]-e[0],n=t[1]-e[1];return i*i+n*n}function It(t,e){return Math.sqrt(Mt(t,e))}var Pt=X,Rt=Y,bt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey},Dt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&e.shiftKey},At=function(t){var e=t.pointerEvent;return a(void 0!==e,56),e.isPrimary&&0===e.button},Ot=0,Gt=1,Tt=2,Lt=4,Xt=8,Yt=16;function jt(t){for(var e=Vt(),i=0,n=t.length;ir&&(h|=Lt),ao&&(h|=Tt),h===Ot&&(h=Gt),h}function Vt(){return[1/0,1/0,-1/0,-1/0]}function Kt(t,e,i,n,r){return r?(r[0]=t,r[1]=e,r[2]=i,r[3]=n,r):[t,e,i,n]}function zt(t){return Kt(1/0,1/0,-1/0,-1/0,t)}function Ut(t,e){var i=t[0],n=t[1];return Kt(i,n,i,n,e)}function Ht(t,e,i,n,r){return Zt(zt(r),t,e,i,n)}function Jt(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function $t(t,e){e[0]t[2]&&(t[2]=e[0]),e[1]t[3]&&(t[3]=e[1])}function Zt(t,e,i,n,r){for(;i=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}var he="Point",ue="LineString",le="LinearRing",ce="Polygon",pe="MultiPoint",fe="MultiLineString",de="MultiPolygon",_e="GeometryCollection",ge="Circle",ye="Rectangle",ve="Ellipse";function me(t,e,i,n,r,o){for(var s=o||[],a=0,h=e;h1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=Se,a=0;as?h=s:h<-s&&(h=-s),o[a+1]=h}return o}function be(t,e,i){var n=t.length,r=i>1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=0;s=e[0]||(t[1]<=e[1]&&t[3]>=e[1]||te(t,this.intersectsCoordinate,this))}return!1},e.prototype.setCenter=function(t){var e=this.stride,i=this.flatCoordinates[e]-this.flatCoordinates[0],n=t.slice();n[e]=n[0]+i;for(var r=1;re?1:t1)a=i;else{if(f>0){for(var d=0;dr&&(r=u),o=a,s=h}return r}function ci(t,e,i,n,r){for(var o=0,s=i.length;o>1)],e))<0?s=n+1:(a=n,h=!r);return h?s:~s}(f,y);if(v<0){var m=(y-f[-v-2])/(f[-v-1]-f[-v-2]),C=e+(-v-2)*n;s=p(t[C],t[C+n],m),a=p(t[C+1],t[C+n+1],m)}else s=t[e+v*n],a=t[e+v*n+1]}return o?(o[0]=s,o[1]=a,o):[s,a]}function yi(t,e,i,n,r,o){if(i==e)return null;var s;if(r>1;ro&&(u-a)*(o-h)-(r-a)*(l-h)>0&&s++:l<=o&&(u-a)*(o-h)-(r-a)*(l-h)<0&&s--,a=u,h=l}return 0!==s}function Ci(t,e,i,n,r,o){if(0===i.length)return!1;if(!mi(t,e,i[0],n,r,o))return!1;for(var s=1,a=i.length;s=r[0]&&o[2]<=r[2]||(o[1]>=r[1]&&o[3]<=r[3]||xi(t,e,i,n,(function(t,e){return function(t,e,i){var n=!1,r=Wt(t,e),o=Wt(t,i);if(r===Gt||o===Gt)n=!0;else{var s,a,h=t[0],u=t[1],l=t[2],c=t[3],p=e[0],f=e[1],d=i[0],_=i[1],g=(_-f)/(d-p);o&Tt&&!(r&Tt)&&(n=(s=d-(_-c)/g)>=h&&s<=l),n||!(o&Lt)||r&Lt||(n=(a=_-(d-l)*g)>=u&&a<=c),n||!(o&Xt)||r&Xt||(n=(s=d-(_-u)/g)>=h&&s<=l),n||!(o&Yt)||r&Yt||(n=(a=_-(d-h)*g)>=u&&a<=c)}return n}(r,t,e)})))))}function Ei(t,e,i,n,r){if(!function(t,e,i,n,r){return!!wi(t,e,i,n,r)||(!!mi(t,e,i,n,r[0],r[1])||(!!mi(t,e,i,n,r[0],r[3])||(!!mi(t,e,i,n,r[2],r[1])||!!mi(t,e,i,n,r[2],r[3]))))}(t,e,i[0],n,r))return!1;if(1===i.length)return!0;for(var o=1,s=i.length;o0;){for(var p=u.pop(),f=u.pop(),d=0,_=t[f],g=t[f+1],y=t[p],v=t[p+1],m=f+n;md&&(c=m,d=C)}d>r&&(h[(c-e)/n]=1,f+n0&&_>f)&&(d<0&&g0&&g>d)?(a=c,h=p):(o[s++]=a,o[s++]=h,u=a,l=h,a=c,h=p)}}return o[s++]=a,o[s++]=h,s}function Pi(t,e,i,n,r,o,s,a){for(var h=0,u=i.length;hC&&Ci(t,e,i,n,u=(l+c)/2,d)&&(m=u,C=x),l=c}return isNaN(m)&&(m=r[o]),s?(s.push(m,d,C),s):[m,d,C]}function Xi(t,e,i,n){for(;e0}function ji(t,e,i,n,r){for(var o=void 0!==r&&r,s=0,a=i.length;s0}}else if(t.type==wt){var n=this.handleDownEvent(t);n&&t.preventDefault(),this.handlingDownUpSequence=n,e=this.stopDown(n)}else t.type==xt&&this.handleMoveEvent(t);return!e},e.prototype.handleMoveEvent=function(t){},e.prototype.handleUpEvent=function(t){return!1},e.prototype.stopDown=function(t){return t},e.prototype.updateTrackedPointers_=function(t){if(function(t){var e=t.type;return e===wt||e===Ct||e===Et}(t)){var e=t.pointerEvent,i=e.pointerId.toString();t.type==Et?delete this.trackedPointers_[i]:(t.type==wt||i in this.trackedPointers_)&&(this.trackedPointers_[i]=e),this.targetPointers=k(this.trackedPointers_)}},e}(function(t){function e(e){t.call(this),e.handleEvent&&(this.handleEvent=e.handleEvent),this.map_=null,this.setActive(!0)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getActive=function(){return this.get(zi)},e.prototype.getMap=function(){return this.map_},e.prototype.handleEvent=function(t){return!0},e.prototype.setActive=function(t){this.set(zi,t)},e.prototype.setMap=function(t){this.map_=t},e}(ft)),Hi="VECTOR",Ji="opacity",$i="visible",Zi="extent",Qi="zIndex",tn="maxResolution",en="minResolution",nn="source",rn="precompose",on="undefined",sn="ready";var an=function(t){function e(e){var i=F({},e);delete i.source,t.call(this,i),this.mapPrecomposeKey_=null,this.mapRenderKey_=null,this.sourceChangeKey_=null,e.map&&this.setMap(e.map),O(this,pt(nn),this.handleSourcePropertyChange_,this);var n=e.source?e.source:null;this.setSource(n)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getLayersArray=function(t){var e=t||[];return e.push(this),e},e.prototype.getLayerStatesArray=function(t){var e=t||[];return e.push(this.getLayerState()),e},e.prototype.getSource=function(){return this.get(nn)||null},e.prototype.getSourceState=function(){var t=this.getSource();return t?t.getState():on},e.prototype.handleSourceChange_=function(){this.changed()},e.prototype.handleSourcePropertyChange_=function(){this.sourceChangeKey_&&(L(this.sourceChangeKey_),this.sourceChangeKey_=null);var t=this.getSource();t&&(this.sourceChangeKey_=O(t,W,this.handleSourceChange_,this)),this.changed()},e.prototype.setMap=function(t){this.mapPrecomposeKey_&&(L(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(L(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=O(t,rn,(function(t){var e=t,i=this.getLayerState();i.managed=!1,void 0===this.getZIndex()&&(i.zIndex=1/0),e.frameState.layerStatesArray.push(i),e.frameState.layerStates[o(this)]=i}),this),this.mapRenderKey_=O(this,W,t.render,t),this.changed())},e.prototype.setSource=function(t){this.set(nn,t)},e}(function(t){function e(e){t.call(this);var i=F({},e);i[Ji]=void 0!==e.opacity?e.opacity:1,i[$i]=void 0===e.visible||e.visible,i[Qi]=e.zIndex,i[tn]=void 0!==e.maxResolution?e.maxResolution:1/0,i[en]=void 0!==e.minResolution?e.minResolution:0,this.setProperties(i),this.state_=null,this.type}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getType=function(){return this.type},e.prototype.getLayerState=function(){var t=this.state_||{layer:this,managed:!0};return t.opacity=h(this.getOpacity(),0,1),t.sourceState=this.getSourceState(),t.visible=this.getVisible(),t.extent=this.getExtent(),t.zIndex=this.getZIndex()||0,t.maxResolution=this.getMaxResolution(),t.minResolution=Math.max(this.getMinResolution(),0),this.state_=t,t},e.prototype.getLayersArray=function(t){return n()},e.prototype.getLayerStatesArray=function(t){return n()},e.prototype.getExtent=function(){return this.get(Zi)},e.prototype.getMaxResolution=function(){return this.get(tn)},e.prototype.getMinResolution=function(){return this.get(en)},e.prototype.getOpacity=function(){return this.get(Ji)},e.prototype.getSourceState=function(){return n()},e.prototype.getVisible=function(){return this.get($i)},e.prototype.getZIndex=function(){return this.get(Qi)},e.prototype.setExtent=function(t){this.set(Zi,t)},e.prototype.setMaxResolution=function(t){this.set(tn,t)},e.prototype.setMinResolution=function(t){this.set(en,t)},e.prototype.setOpacity=function(t){this.set(Ji,t)},e.prototype.setVisible=function(t){this.set($i,t)},e.prototype.setZIndex=function(t){this.set(Qi,t)},e}(ft)),hn="vector",un=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.checksum_=void 0};un.prototype.clone=function(){var t=this.getColor();return new un({color:Array.isArray(t)?t.slice():t||void 0})},un.prototype.getColor=function(){return this.color_},un.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},un.prototype.getChecksum=function(){if(void 0===this.checksum_){var t=this.color_;t?Array.isArray(t)||"string"==typeof t?this.checksum_="f"+_(t):this.checksum_=o(this.color_):this.checksum_="f-"}return this.checksum_};var ln=un,cn=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.lineCap_=e.lineCap,this.lineDash_=void 0!==e.lineDash?e.lineDash:null,this.lineDashOffset_=e.lineDashOffset,this.lineJoin_=e.lineJoin,this.miterLimit_=e.miterLimit,this.width_=e.width,this.checksum_=void 0};cn.prototype.clone=function(){var t=this.getColor();return new cn({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})},cn.prototype.getColor=function(){return this.color_},cn.prototype.getLineCap=function(){return this.lineCap_},cn.prototype.getLineDash=function(){return this.lineDash_},cn.prototype.getLineDashOffset=function(){return this.lineDashOffset_},cn.prototype.getLineJoin=function(){return this.lineJoin_},cn.prototype.getMiterLimit=function(){return this.miterLimit_},cn.prototype.getWidth=function(){return this.width_},cn.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},cn.prototype.setLineCap=function(t){this.lineCap_=t,this.checksum_=void 0},cn.prototype.setLineDash=function(t){this.lineDash_=t,this.checksum_=void 0},cn.prototype.setLineDashOffset=function(t){this.lineDashOffset_=t,this.checksum_=void 0},cn.prototype.setLineJoin=function(t){this.lineJoin_=t,this.checksum_=void 0},cn.prototype.setMiterLimit=function(t){this.miterLimit_=t,this.checksum_=void 0},cn.prototype.setWidth=function(t){this.width_=t,this.checksum_=void 0},cn.prototype.getChecksum=function(){return void 0===this.checksum_&&(this.checksum_="s",this.color_?"string"==typeof this.color_?this.checksum_+=this.color_:this.checksum_+=o(this.color_):this.checksum_+="-",this.checksum_+=","+(void 0!==this.lineCap_?this.lineCap_.toString():"-")+","+(this.lineDash_?this.lineDash_.toString():"-")+","+(void 0!==this.lineDashOffset_?this.lineDashOffset_:"-")+","+(void 0!==this.lineJoin_?this.lineJoin_:"-")+","+(void 0!==this.miterLimit_?this.miterLimit_.toString():"-")+","+(void 0!==this.width_?this.width_.toString():"-")),this.checksum_};var pn=cn,fn=function(t){var e=t||{};this.geometry_=null,this.geometryFunction_=yn,void 0!==e.geometry&&this.setGeometry(e.geometry),this.fill_=void 0!==e.fill?e.fill:null,this.image_=void 0!==e.image?e.image:null,this.renderer_=void 0!==e.renderer?e.renderer:null,this.stroke_=void 0!==e.stroke?e.stroke:null,this.text_=void 0!==e.text?e.text:null,this.zIndex_=e.zIndex};fn.prototype.clone=function(){var t=this.getGeometry();return t&&"object"==typeof t&&(t=t.clone()),new fn({geometry:t,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})},fn.prototype.getRenderer=function(){return this.renderer_},fn.prototype.setRenderer=function(t){this.renderer_=t},fn.prototype.getGeometry=function(){return this.geometry_},fn.prototype.getGeometryFunction=function(){return this.geometryFunction_},fn.prototype.getFill=function(){return this.fill_},fn.prototype.setFill=function(t){this.fill_=t},fn.prototype.getImage=function(){return this.image_},fn.prototype.setImage=function(t){this.image_=t},fn.prototype.getStroke=function(){return this.stroke_},fn.prototype.setStroke=function(t){this.stroke_=t},fn.prototype.getText=function(){return this.text_},fn.prototype.setText=function(t){this.text_=t},fn.prototype.getZIndex=function(){return this.zIndex_},fn.prototype.setGeometry=function(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=yn,this.geometry_=t},fn.prototype.setZIndex=function(t){this.zIndex_=t};var dn=null;function _n(t,e){if(!dn){var i=new ln({color:"rgba(255,255,255,0.4)"}),n=new pn({color:"#3399CC",width:1.25});dn=[new fn({image:new ot({fill:i,stroke:n,radius:5}),fill:i,stroke:n})]}return dn}function gn(){var t={},e=[255,255,255,1],i=[0,153,255,1];return t[ce]=[new fn({fill:new ln({color:[255,255,255,.5]})})],t[de]=t[ce],t[ue]=[new fn({stroke:new pn({color:e,width:5})}),new fn({stroke:new pn({color:i,width:3})})],t[fe]=t[ue],t[ge]=t[ce].concat(t[ue]),t[he]=[new fn({image:new ot({radius:6,fill:new ln({color:i}),stroke:new pn({color:e,width:1.5})}),zIndex:1/0})],t[pe]=t[he],t[_e]=t[ce].concat(t[ue],t[he]),t}function yn(t){return t.getGeometry()}var vn=fn,mn="renderOrder",Cn=function(t){function e(e){var i=e||{},n=F({},i);delete n.style,delete n.renderBuffer,delete n.updateWhileAnimating,delete n.updateWhileInteracting,t.call(this,n),this.declutter_=void 0!==i.declutter&&i.declutter,this.renderBuffer_=void 0!==i.renderBuffer?i.renderBuffer:100,this.style_=null,this.styleFunction_=void 0,this.setStyle(i.style),this.updateWhileAnimating_=void 0!==i.updateWhileAnimating&&i.updateWhileAnimating,this.updateWhileInteracting_=void 0!==i.updateWhileInteracting&&i.updateWhileInteracting,this.renderMode_=i.renderMode||hn,this.type=Hi}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDeclutter=function(){return this.declutter_},e.prototype.setDeclutter=function(t){this.declutter_=t},e.prototype.getRenderBuffer=function(){return this.renderBuffer_},e.prototype.getRenderOrder=function(){return this.get(mn)},e.prototype.getStyle=function(){return this.style_},e.prototype.getStyleFunction=function(){return this.styleFunction_},e.prototype.getUpdateWhileAnimating=function(){return this.updateWhileAnimating_},e.prototype.getUpdateWhileInteracting=function(){return this.updateWhileInteracting_},e.prototype.setRenderOrder=function(t){this.set(mn,t)},e.prototype.setStyle=function(t){this.style_=void 0!==t?t:_n,this.styleFunction_=null===t?void 0:function(t){var e;if("function"==typeof t)e=t;else{var i;if(Array.isArray(t))i=t;else a("function"==typeof t.getZIndex,41),i=[t];e=function(){return i}}return e}(this.style_),this.changed()},e.prototype.getRenderMode=function(){return this.renderMode_},e}(an);Cn.prototype.getSource;var xn=Cn,wn="arraybuffer",En="json",Fn="text",Sn="xml";function kn(t,e){return function(t,e,i,n){return function(r,o,s){var a=new XMLHttpRequest;a.open("GET","function"==typeof t?t(r,o,s):t,!0),e.getType()==wn&&(a.responseType="arraybuffer"),a.onload=function(t){if(!a.status||a.status>=200&&a.status<300){var r,o=e.getType();o==En||o==Fn?r=a.responseText:o==Sn?(r=a.responseXML)||(r=(new DOMParser).parseFromString(a.responseText,"application/xml")):o==wn&&(r=a.response),r?i.call(this,e.readFeatures(r,{featureProjection:s}),e.readProjection(r),e.getLastExtent()):n.call(this)}else n.call(this)}.bind(this),a.onerror=function(){n.call(this)}.bind(this),a.send()}}(t,e,(function(t,e){"function"==typeof this.addFeatures&&this.addFeatures(t)}),j)}function Mn(t,e){return[[-1/0,-1/0,1/0,1/0]]}function In(t){return t?Array.isArray(t)?function(e){return t}:"function"==typeof t?t:function(e){return[t]}:null}var Pn=function(t){function e(e){t.call(this),this.projection_=Ve(e.projection),this.attributions_=In(e.attributions),this.attributionsCollapsible_=void 0===e.attributionsCollapsible||e.attributionsCollapsible,this.loading=!1,this.state_=void 0!==e.state?e.state:sn,this.wrapX_=void 0!==e.wrapX&&e.wrapX}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getAttributions=function(){return this.attributions_},e.prototype.getAttributionsCollapsible=function(){return this.attributionsCollapsible_},e.prototype.getProjection=function(){return this.projection_},e.prototype.getResolutions=function(){return n()},e.prototype.getState=function(){return this.state_},e.prototype.getWrapX=function(){return this.wrapX_},e.prototype.refresh=function(){this.changed()},e.prototype.setAttributions=function(t){this.attributions_=In(t),this.changed()},e.prototype.setState=function(t){this.state_=t,this.changed()},e}(ft),Rn="addfeature",bn="changefeature",Dn="clear",An="removefeature",On=i("A1R+"),Gn=i.n(On),Tn=function(t){this.rbush_=Gn()(t,void 0),this.items_={}};Tn.prototype.insert=function(t,e){var i={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3],value:e};this.rbush_.insert(i),this.items_[o(e)]=i},Tn.prototype.load=function(t,e){for(var i=new Array(e.length),n=0,r=e.length;n2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]];if(0===o[1])t=[[i,i,i,i]];else{var s=[-1*o[1],o[0]],a=o[0]/o[1],h=(r[0]+a*(n[1]-r[1])-n[0])/(s[0]-s[1]*a),u=[h*s[0],h*s[1]];t=[[[i[0]-u[0],i[1]-u[1]],[n[0]-u[0],n[1]-u[1]],[n[0]+u[0],n[1]+u[1]],[i[0]+u[0],i[1]+u[1]]]]}}else t=[t];var l=e;return l?l.setCoordinates(t):l=new jn(t),l};else if(this.type_===ve)this.minPoints_=3,this.maxPoints_=3,r=function(t,e){if(t.length>2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]],s=[i[0]+.5*o[0],i[1]+.5*o[1]];if(0===o[1])t=[[i,i,i,i]];else{var a=[-1*o[1],o[0]],h=o[0]/o[1],u=(r[0]+h*(n[1]-r[1])-n[0])/(a[0]-a[1]*h),l=[u*a[0],u*a[1]];t=[[[i[0],i[1]],[s[0]-l[0],s[1]-l[1]],[n[0],n[1]],[s[0]+l[0],s[1]+l[1]]]]}}else t=[t];var c=e;return c?c.setCoordinates(t):c=new Nn(t),c};else{var o,s=this.mode_;s===qn?o=Di:s===Bn?o=Ri:s===Wn&&(o=Wi),r=function(t,e){var i=e;return i?s===Wn?t[0].length?i.setCoordinates([t[0].concat([t[0][0]])]):i.setCoordinates([]):i.setCoordinates(t):i=new o(t),i}}this.geometryFunction_=r,this.dragVertexDelay_=void 0!==e.dragVertexDelay?e.dragVertexDelay:500,this.finishCoordinate_=null,this.sketchFeature_=null,this.sketchPoint_=null,this.sketchCoords_=null,this.sketchLine_=null,this.sketchLineCoords_=null,this.squaredClickTolerance_=e.clickTolerance?e.clickTolerance*e.clickTolerance:36,this.overlay_=new xn({source:new Yn({useSpatialIndex:!1,wrapX:!!e.wrapX&&e.wrapX}),style:e.style?e.style:(n=gn(),function(t,e){return n[t.getGeometry().getType()]}),updateWhileInteracting:!0}),this.geometryName_=e.geometryName,this.condition_=e.condition?e.condition:bt,this.freehandCondition_,e.freehand?this.freehandCondition_=Pt:this.freehandCondition_=e.freehandCondition?e.freehandCondition:Dt,O(this,pt(zi),this.updateState_,this)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setMap=function(e){t.prototype.setMap.call(this,e),this.updateState_()},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleEvent=function(e){e.originalEvent.type===K&&e.preventDefault(),this.freehand_=this.mode_!==qn&&this.freehandCondition_(e);var i=e.type===xt,n=!0;!this.freehand_&&this.lastDragTime_&&e.type===Ct&&(Date.now()-this.lastDragTime_>=this.dragVertexDelay_?(this.downPx_=e.pixel,this.shouldHandle_=!this.freehand_,i=!0):this.lastDragTime_=void 0,this.shouldHandle_&&void 0!==this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0));return this.freehand_&&e.type===Ct&&null!==this.sketchFeature_?(this.addToDrawing_(e),n=!1):this.freehand_&&e.type===wt?n=!1:i?(n=e.type===xt)&&this.freehand_?n=this.handlePointerMove_(e):("mouse"==e.pointerEvent.pointerType||e.type===Ct&&void 0===this.downTimeout_)&&this.handlePointerMove_(e):e.type===mt&&(n=!1),t.prototype.handleEvent.call(this,e)&&n},e.prototype.handleDownEvent=function(t){return this.shouldHandle_=!this.freehand_,this.freehand_?(this.downPx_=t.pixel,this.finishCoordinate_||this.startDrawing_(t),!0):!!this.condition_(t)&&(this.lastDragTime_=Date.now(),this.downTimeout_=setTimeout(function(){this.handlePointerMove_(new Ft(xt,t.map,t.pointerEvent,!1,t.frameState))}.bind(this),this.dragVertexDelay_),this.downPx_=t.pixel,!0)},e.prototype.handleUpEvent=function(t){var e=!0;this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0),this.handlePointerMove_(t);var i=this.mode_===Vn;return this.shouldHandle_?(this.finishCoordinate_?this.freehand_||i?this.finishDrawing():this.atFinish_(t)?this.finishCondition_(t)&&this.finishDrawing():this.addToDrawing_(t):(this.startDrawing_(t),this.mode_===qn&&this.finishDrawing()),e=!1):this.freehand_&&(this.finishCoordinate_=null,this.abortDrawing_()),!e&&this.stopClick_&&t.stopPropagation(),e},e.prototype.handlePointerMove_=function(t){if(this.downPx_&&(!this.freehand_&&this.shouldHandle_||this.freehand_&&!this.shouldHandle_)){var e=this.downPx_,i=t.pixel,n=e[0]-i[0],r=e[1]-i[1],o=n*n+r*r;if(this.shouldHandle_=this.freehand_?o>this.squaredClickTolerance_:o<=this.squaredClickTolerance_,!this.shouldHandle_)return!0}return this.finishCoordinate_?this.modifyDrawing_(t):this.createOrUpdateSketchPoint_(t),!0},e.prototype.atFinish_=function(t){var e=!1;if(this.sketchFeature_){var i=!1,n=[this.finishCoordinate_];if(this.mode_===Bn)i=this.sketchCoords_.length>this.minPoints_;else if(this.mode_===Wn){var r=this.sketchCoords_;i=r[0].length>this.minPoints_,n=[r[0][0],r[0][r[0].length-2]]}if(i)for(var o=t.map,s=0,a=n.length;s=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),this.geometryFunction_(i,r)):this.mode_===Wn&&((i=this.sketchCoords_[0]).length>=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),e&&(this.finishCoordinate_=i[0]),this.geometryFunction_(this.sketchCoords_,r)),this.updateSketchFeatures_(),e&&this.finishDrawing()},e.prototype.removeLastPoint=function(){if(this.sketchFeature_){var t,e=this.sketchFeature_.getGeometry();this.mode_===Bn?((t=this.sketchCoords_).splice(-2,1),this.geometryFunction_(t,e),t.length>=2&&(this.finishCoordinate_=t[t.length-2].slice())):this.mode_===Wn&&((t=this.sketchCoords_[0]).splice(-2,1),this.sketchLine_.getGeometry().setCoordinates(t),this.geometryFunction_(this.sketchCoords_,e)),0===t.length&&(this.finishCoordinate_=null),this.updateSketchFeatures_()}},e.prototype.finishDrawing=function(){var t=this.abortDrawing_();if(t){var e=this.sketchCoords_,i=t.getGeometry();this.mode_===Bn?(e.pop(),this.geometryFunction_(e,i)):this.mode_===Wn&&(e[0].pop(),this.geometryFunction_(e,i),e=i.getCoordinates()),this.type_===pe?t.setGeometry(new Ai([e])):this.type_===fe?t.setGeometry(new bi([e])):this.type_===de&&t.setGeometry(new Vi([e])),this.dispatchEvent(new Hn(Un,t)),this.features_&&this.features_.push(t),this.source_&&this.source_.addFeature(t)}},e.prototype.abortDrawing_=function(){this.finishCoordinate_=null;var t=this.sketchFeature_;return t&&(this.sketchFeature_=null,this.sketchPoint_=null,this.sketchLine_=null,this.overlay_.getSource().clear(!0)),t},e.prototype.extend=function(t){var e=t.getGeometry();this.sketchFeature_=t,this.sketchCoords_=e.getCoordinates();var i=this.sketchCoords_[this.sketchCoords_.length-1];this.finishCoordinate_=i.slice(),this.sketchCoords_.push(i.slice()),this.updateSketchFeatures_(),this.dispatchEvent(new Hn(zn,this.sketchFeature_))},e.prototype.updateSketchFeatures_=function(){var t=[];this.sketchFeature_&&t.push(this.sketchFeature_),this.sketchLine_&&t.push(this.sketchLine_),this.sketchPoint_&&t.push(this.sketchPoint_);var e=this.overlay_.getSource();e.clear(!0),e.addFeatures(t)},e.prototype.updateState_=function(){var t=this.getMap(),e=this.getActive();t&&e||this.abortDrawing_(),this.overlay_.setMap(e?t:null)},e}(Ui),$n=Vue.resource("/api/v1/volumes{/id}/export-area"),Zn="modifystart",Qn="modifyend",tr=function(t){function e(e,i,n){t.call(this,e),this.features=i,this.mapBrowserEvent=n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(q);function er(t,e){return t.index-e.index}function ir(t,e){var i,n,r=e.geometry;if(r.getType()===ge){var o=r;if(1===e.index){var s=Mt(o.getCenter(),t),a=Math.sqrt(s)-o.getRadius();return a*a}}return i=t,n=e.segment,Mt(i,St(i,n))}function nr(t,e){var i=e.geometry;return i.getType()===ge&&1===e.index||i.getType()===ve||i.getType()===ye?i.getClosestPoint(t):St(t,e.segment)}var rr=function(t){function e(e){var i,n;if(t.call(this,e),this.condition_=e.condition?e.condition:At,this.defaultDeleteCondition_=function(t){return function(t){var e=t.originalEvent;return e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey}(t)&&function(t){return t.type==vt}(t)},this.deleteCondition_=e.deleteCondition?e.deleteCondition:this.defaultDeleteCondition_,this.insertVertexCondition_=e.insertVertexCondition?e.insertVertexCondition:Pt,this.vertexFeature_=null,this.vertexSegments_=null,this.lastPixel_=[0,0],this.ignoreNextSingleClick_=!1,this.modified_=!1,this.rBush_=new Ln,this.pixelTolerance_=void 0!==e.pixelTolerance?e.pixelTolerance:10,this.snappedToVertex_=!1,this.changingFeature_=!1,this.dragSegments_=[],this.overlay_=new xn({source:new Yn({useSpatialIndex:!1,wrapX:!!e.wrapX}),style:e.style?e.style:(i=gn(),function(t,e){return i[he]}),updateWhileAnimating:!0,updateWhileInteracting:!0}),this.SEGMENT_WRITERS_={Point:this.writePointGeometry_,LineString:this.writeLineStringGeometry_,LinearRing:this.writeLineStringGeometry_,Polygon:this.writePolygonGeometry_,MultiPoint:this.writeMultiPointGeometry_,MultiLineString:this.writeMultiLineStringGeometry_,MultiPolygon:this.writeMultiPolygonGeometry_,Rectangle:this.writePolygonGeometry_,Ellipse:this.writePolygonGeometry_,Circle:this.writeCircleGeometry_,GeometryCollection:this.writeGeometryCollectionGeometry_},this.source_=null,e.source?(this.source_=e.source,n=new gt(this.source_.getFeatures()),O(this.source_,Rn,this.handleSourceAdd_,this),O(this.source_,An,this.handleSourceRemove_,this)):n=e.features,!n)throw new Error("The modify interaction requires features or a source");this.features_=n,this.features_.forEach(this.addFeature_.bind(this)),O(this.features_,st,this.handleFeatureAdd_,this),O(this.features_,at,this.handleFeatureRemove_,this),this.lastPointerEvent_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.addFeature_=function(t){var e=t.getGeometry();e&&e.getType()in this.SEGMENT_WRITERS_&&this.SEGMENT_WRITERS_[e.getType()].call(this,t,e);var i=this.getMap();i&&i.isRendered()&&this.getActive()&&this.handlePointerAtPixel_(this.lastPixel_,i),O(t,W,this.handleFeatureChange_,this)},e.prototype.willModifyFeatures_=function(t){this.modified_||(this.modified_=!0,this.dispatchEvent(new tr(Zn,this.features_,t)))},e.prototype.removeFeature_=function(t){this.removeFeatureSegmentData_(t),this.vertexFeature_&&0===this.features_.getLength()&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),T(t,W,this.handleFeatureChange_,this)},e.prototype.removeFeatureSegmentData_=function(t){var e=this.rBush_,i=[];e.forEach((function(e){t===e.feature&&i.push(e)}));for(var n=i.length-1;n>=0;--n)e.remove(i[n])},e.prototype.setActive=function(e){this.vertexFeature_&&!e&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),t.prototype.setActive.call(this,e)},e.prototype.setMap=function(e){this.overlay_.setMap(e),t.prototype.setMap.call(this,e)},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleSourceAdd_=function(t){t.feature&&this.features_.push(t.feature)},e.prototype.handleSourceRemove_=function(t){t.feature&&this.features_.remove(t.feature)},e.prototype.handleFeatureAdd_=function(t){this.addFeature_(t.element)},e.prototype.handleFeatureChange_=function(t){if(!this.changingFeature_){var e=t.target;this.removeFeature_(e),this.addFeature_(e)}},e.prototype.handleFeatureRemove_=function(t){var e=t.element;this.removeFeature_(e)},e.prototype.writePointGeometry_=function(t,e){var i=e.getCoordinates(),n={feature:t,geometry:e,segment:[i,i]};this.rBush_.insert(e.getExtent(),n)},e.prototype.writeMultiPointGeometry_=function(t,e){for(var i=e.getCoordinates(),n=0,r=i.length;n=0;--_)this.insertVertex_.apply(this,n[_])}return!!this.vertexFeature_},e.prototype.handleUpEvent=function(t){for(var e=this.dragSegments_.length-1;e>=0;--e){var i=this.dragSegments_[e][0],n=i.geometry;if(n.getType()===ye||n.getType()===ve)this.features_.remove(i.feature),this.features_.push(i.feature);else if(n.getType()===ge){var r=n.getCenter(),o=i.featureSegments[0],s=i.featureSegments[1];o.segment[0]=o.segment[1]=r,s.segment[0]=s.segment[1]=r,this.rBush_.update(Ut(r),o),this.rBush_.update(n.getExtent(),s)}else this.rBush_.update(jt(i.segment),i)}return this.modified_&&(this.dispatchEvent(new tr(Qn,this.features_,t)),this.modified_=!1),!1},e.prototype.handlePointerMove_=function(t){this.lastPixel_=t.pixel,this.handlePointerAtPixel_(t.pixel,t.map)},e.prototype.handlePointerAtPixel_=function(t,e){var i,n,r,s=e.getCoordinateFromPixel(t),a=(i=Ut(s),n=e.getView().getResolution()*this.pixelTolerance_,r?(r[0]=i[0]-n,r[1]=i[1]-n,r[2]=i[2]+n,r[3]=i[3]+n,r):[i[0]-n,i[1]-n,i[2]+n,i[3]+n]),h=this.rBush_.getInExtent(a);if(h.length>0){h.sort((function(t,e){return ir(s,t)-ir(s,e)}));var u=h[0],l=u.segment,c=nr(s,u),p=e.getPixelFromCoordinate(c),f=It(t,p);if(f<=this.pixelTolerance_){var d={};if(u.geometry.getType()===ge&&1===u.index)this.snappedToVertex_=!0,this.createOrUpdateVertexFeature_(c);else{var _=e.getPixelFromCoordinate(l[0]),g=e.getPixelFromCoordinate(l[1]),y=Mt(p,_),v=Mt(p,g);f=Math.sqrt(Math.min(y,v)),this.snappedToVertex_=f<=this.pixelTolerance_,this.snappedToVertex_&&(c=y>v?l[1]:l[0]),this.createOrUpdateVertexFeature_(c);for(var m=1,C=h.length;m=0;--r)c=o((l=(i=p[r])[0]).feature),l.depth&&(c+="-"+l.depth.join("-")),c in f||(f[c]={}),0===i[1]?(f[c].right=l,f[c].index=l.index):1==i[1]&&(f[c].left=l,f[c].index=l.index+1);for(c in f){switch(u=f[c].right,a=f[c].left,(h=(s=f[c].index)-1)<0&&(h=0),t=e=(n=(l=void 0!==a?a:u).geometry).getCoordinates(),d=!1,n.getType()){case fe:e[l.depth[0]].length>2&&(e[l.depth[0]].splice(s,1),d=!0);break;case ue:e.length>2&&(e.splice(s,1),d=!0);break;case de:t=t[l.depth[1]];case ce:(t=t[l.depth[0]]).length>4&&(s==t.length-1&&(s=0),t.splice(s,1),d=!0,0===s&&(t.pop(),t.push(t[0]),h=t.length-1))}if(d){this.setGeometryCoordinates_(n,e);var _=[];if(void 0!==a&&(this.rBush_.remove(a),_.push(a.segment[0])),void 0!==u&&(this.rBush_.remove(u),_.push(u.segment[1])),void 0!==a&&void 0!==u){var g={depth:l.depth,feature:l.feature,geometry:l.geometry,index:h,segment:_};this.rBush_.insert(jt(g.segment),g)}this.updateSegmentIndices_(n,s,l.depth,-1),this.vertexFeature_&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),p.length=0}}return d},e.prototype.setGeometryCoordinates_=function(t,e){this.changingFeature_=!0,t.setCoordinates(e),this.changingFeature_=!1},e.prototype.updateSegmentIndices_=function(t,e,i,n){this.rBush_.forEachInExtent(t.getExtent(),(function(r){r.geometry===t&&(void 0===i||void 0===r.depth||function(t,e){var i=t.length;if(i!==e.length)return!1;for(var n=0;ne&&(r.index+=n)}))},e}(Ui),or=biigle.$require("events"),sr=biigle.$require("messages").handleErrorResponse,ar=biigle.$require("annotations.components.settingsTabPlugins"),hr={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null,volumeId:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},layer:function(){return new xn({source:new Yn({features:new gt}),style:[new vn({stroke:new pn({color:"white",width:4}),image:new ot({radius:6,fill:new ln({color:"#666666"}),stroke:new pn({color:"white",width:2,lineDash:[2]})})}),new vn({stroke:new pn({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new Jn({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(t,e){t.length>1&&(t=[t[0],[t[0][0],t[1][1]],t[1],[t[1][0],t[0][1]]]);var i=e;return i?i.setCoordinates([t]):i=new jn([t]),i}})},modifyInteraction:function(){return new rr({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:Rt})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){var t=this;if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),$n.delete({id:this.volumeId}).then((function(){return t.exportArea=null})).catch((function(t){e.addFeature(i),sr(t)}))}},updateCurrentImage:function(t,e){this.currentImage=e},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var t=this.currentImage.tiled?0:this.height,e=new jn([[[this.exportArea[0],t-this.exportArea[1]],[this.exportArea[0],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[1]]]]);this.layer.getSource().addFeature(new yt({geometry:e}))}},handleModifyend:function(t){this.updateExportArea(t.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(t){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),this.updateExportArea(t.feature).catch((function(){e.clear(),i&&e.addFeature(i)}))},updateExportArea:function(t){var e=this,i=t.getGeometry().getCoordinates()[0],n=this.currentImage.tiled?0:this.height;i=[i[0][0],n-i[0][1],i[2][0],n-i[2][1]].map(Math.round);var r=$n.save({id:this.volumeId},{coordinates:i}).then((function(){return e.exportArea=i}));return r.catch(sr),r},extendMap:function(t){t.addLayer(this.layer),t.addInteraction(this.drawInteraction),t.addInteraction(this.modifyInteraction)}},watch:{opacity:function(t){t<1?this.settings.set("exportAreaOpacity",t):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(t)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.volumeId=biigle.$require("annotations.volumeId"),this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend),or.$on("images.change",this.updateCurrentImage),or.$on("annotations.map.init",this.extendMap)}},ur=i("KHd+"),lr=Object(ur.a)(hr,void 0,void 0,!1,null,null,null).exports;ar&&(ar.exportArea=lr)},"A1R+":function(t,e,i){"use strict";t.exports=r,t.exports.default=r;var n=i("YcpW");function r(t,e){if(!(this instanceof r))return new r(t,e);this._maxEntries=Math.max(4,t||9),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),e&&this._initFormat(e),this.clear()}function o(t,e,i){if(!i)return e.indexOf(t);for(var n=0;n=t.minX&&e.maxY>=t.minY}function _(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function g(t,e,i,r,o){for(var s,a=[e,i];a.length;)(i=a.pop())-(e=a.pop())<=r||(s=e+Math.ceil((i-e)/r/2)*r,n(t,s,e,i,o),a.push(e,s,s,i))}r.prototype={all:function(){return this._all(this.data,[])},search:function(t){var e=this.data,i=[],n=this.toBBox;if(!d(t,e))return i;for(var r,o,s,a,h=[];e;){for(r=0,o=e.children.length;r=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(r,o,e)},_split:function(t,e){var i=t[e],n=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,n);var o=this._chooseSplitIndex(i,r,n),a=_(i.children.splice(o,i.children.length-o));a.height=i.height,a.leaf=i.leaf,s(i,this.toBBox),s(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(i,a)},_splitRoot:function(t,e){this.data=_([t,e]),this.data.height=t.height+1,this.data.leaf=!1,s(this.data,this.toBBox)},_chooseSplitIndex:function(t,e,i){var n,r,o,s,h,u,l,p,f,d,_,g,y,v;for(u=l=1/0,n=e;n<=i-e;n++)r=a(t,0,n,this.toBBox),o=a(t,n,i,this.toBBox),f=r,d=o,_=void 0,g=void 0,y=void 0,v=void 0,_=Math.max(f.minX,d.minX),g=Math.max(f.minY,d.minY),y=Math.min(f.maxX,d.maxX),v=Math.min(f.maxY,d.maxY),s=Math.max(0,y-_)*Math.max(0,v-g),h=c(r)+c(o),s=e;r--)o=t.children[r],h(l,t.leaf?s(o):o),c+=p(l);return c},_adjustParentBBoxes:function(t,e,i){for(var n=i;n>=0;n--)h(e[n],t)},_condense:function(t){for(var e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children).splice(e.indexOf(t[i]),1):this.clear():s(t[i],this.toBBox)},_initFormat:function(t){var e=["return a"," - b",";"];this.compareMinX=new Function("a","b",e.join(t[0])),this.compareMinY=new Function("a","b",e.join(t[1])),this.toBBox=new Function("a","return {minX: a"+t[0]+", minY: a"+t[1]+", maxX: a"+t[2]+", maxY: a"+t[3]+"};")}}},"KHd+":function(t,e,i){"use strict";function n(t,e,i,n,r,o,s,a){var h,u="function"==typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=i,u._compiled=!0),n&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),s?(h=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),r&&r.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(s)},u._ssrRegister=h):r&&(h=a?function(){r.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:r),h)if(u.functional){u._injectStyles=h;var l=u.render;u.render=function(t,e){return h.call(e),l(t,e)}}else{var c=u.beforeCreate;u.beforeCreate=c?[].concat(c,h):[h]}return{exports:t,options:u}}i.d(e,"a",(function(){return n}))},YcpW:function(t,e,i){t.exports=function(){"use strict";function t(t,e,i){var n=t[e];t[e]=t[i],t[i]=n}function e(t,e){return te?1:0}return function(i,n,r,o,s){!function e(i,n,r,o,s){for(;o>r;){if(o-r>600){var a=o-r+1,h=n-r+1,u=Math.log(a),l=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*l*(a-l)/a)*(h-a/2<0?-1:1),p=Math.max(r,Math.floor(n-h*l/a+c)),f=Math.min(o,Math.floor(n+(a-h)*l/a+c));e(i,n,p,f,s)}var d=i[n],_=r,g=o;for(t(i,r,n),s(i[o],d)>0&&t(i,r,o);_0;)g--}0===s(i[r],d)?t(i,r,g):(g++,t(i,g,o)),g<=n&&(r=g+1),n<=g&&(o=g-1)}}(i,n,r||0,o||i.length-1,s||e)}}()}}); \ No newline at end of file diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index d69100ffe..25560d338 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -!function(e){var t={};function r(s){if(t[s])return t[s].exports;var i=t[s]={i:s,l:!1,exports:{}};return e[s].call(i.exports,i,i.exports,r),i.l=!0,i.exports}r.m=e,r.c=t,r.d=function(e,t,s){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(r.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(s,i,function(t){return e[t]}.bind(null,i));return s},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/",r(r.s=0)}({0:function(e,t,r){r("Or9D"),e.exports=r("zcrr")},Or9D:function(e,t,r){"use strict";r.r(t);var s=biigle.$require("messages").handleErrorResponse,i=biigle.$require("labelTrees.components.labelTrees"),n={mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:i},data:{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,only_labels:[],aggregate_child_labels:!1}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var r=t.name.split("\\");e.hasOwnProperty(r[0])||(e[r[0]]=[]),e[r[0]].push(r[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(r){t[r]=e.options[r]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:s(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0],this.labelTrees=biigle.$require("reports.labelTrees")}},a=Vue.resource("/api/v1/projects{/id}/reports"),o={mixins:[n],data:{projectId:null,allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","only_labels"],VideoAnnotations:["separate_label_trees","only_labels"]}},methods:{submit:function(){this.request(this.projectId,a)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},l=Vue.resource("/api/v1/videos{/id}/reports"),u={mixins:[n],data:{videoId:null,selectedType:"VideoAnnotations",selectedVariant:"Csv",allowedOptions:{VideoAnnotations:["separate_label_trees","only_labels"]}},methods:{submit:function(){this.request(this.videoId,l)}},created:function(){this.videoId=biigle.$require("reports.videoId")}},c=Vue.resource("/api/v1/volumes{/id}/reports"),d={mixins:[n],data:{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","annotation_session_id","only_labels"]},options:{annotation_session_id:null}},methods:{submit:function(){this.request(this.volumeId,c)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}};biigle.$mount("project-report-form",o),biigle.$mount("video-report-form",u),biigle.$mount("volume-report-form",d)},zcrr:function(e,t){}}); \ No newline at end of file +!function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=0)}({0:function(e,t,n){n("Or9D"),e.exports=n("zcrr")},"KHd+":function(e,t,n){"use strict";function r(e,t,n,r,i,s,o,a){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),s&&(u._scopeId="data-v-"+s),o?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(o)},u._ssrRegister=l):i&&(l=a?function(){i.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:i),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var d=u.beforeCreate;u.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},Or9D:function(e,t,n){"use strict";n.r(t);var r=biigle.$require("messages").handleErrorResponse,i=biigle.$require("labelTrees.components.labelTrees"),s={mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:i},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var n=t.name.split("\\");e.hasOwnProperty(n[0])||(e[n[0]]=[]),e[n[0]].push(n[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(n){t[n]=e.options[n]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:r(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0],this.labelTrees=biigle.$require("reports.labelTrees")}},o=n("KHd+"),a=Object(o.a)(s,void 0,void 0,!1,null,null,null).exports,l=Vue.resource("/api/v1/projects{/id}/reports"),u={mixins:[a],data:function(){return{projectId:null,allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","only_labels"],VideoAnnotations:["separate_label_trees","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,l)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},c=Object(o.a)(u,void 0,void 0,!1,null,null,null).exports,d=Vue.resource("/api/v1/videos{/id}/reports"),p={mixins:[a],data:function(){return{videoId:null,selectedType:"VideoAnnotations",selectedVariant:"Csv",allowedOptions:{VideoAnnotations:["separate_label_trees","only_labels"]}}},methods:{submit:function(){this.request(this.videoId,d)}},created:function(){this.videoId=biigle.$require("reports.videoId")}},f=Object(o.a)(p,void 0,void 0,!1,null,null,null).exports,h=Vue.resource("/api/v1/volumes{/id}/reports"),b={mixins:[a],data:function(){return{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","annotation_session_id","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,h)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},_=Object(o.a)(b,void 0,void 0,!1,null,null,null).exports;biigle.$mount("project-report-form",c),biigle.$mount("video-report-form",f),biigle.$mount("volume-report-form",_)},zcrr:function(e,t){}}); \ No newline at end of file diff --git a/src/public/mix-manifest.json b/src/public/mix-manifest.json index 39f728006..c7922236b 100644 --- a/src/public/mix-manifest.json +++ b/src/public/mix-manifest.json @@ -1,5 +1,5 @@ { - "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=5d076cdaafa31ad5b50d", - "/assets/scripts/main.js": "/assets/scripts/main.js?id=0b411999e5e7c5498cbf", + "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=30a9a1a72b6179458798", + "/assets/scripts/main.js": "/assets/scripts/main.js?id=8b01b655e6b98fe7e685", "/assets/styles/main.css": "/assets/styles/main.css?id=9d45536e01d0a0b3c70b" } diff --git a/src/resources/assets/js/annotations/annotations.js b/src/resources/assets/js/annotations/annotations.js index 5c2e76c34..7d2c8333d 100644 --- a/src/resources/assets/js/annotations/annotations.js +++ b/src/resources/assets/js/annotations/annotations.js @@ -1 +1 @@ -import './settingsTabPlugin'; +import './settingsTabPlugins'; diff --git a/src/resources/assets/js/annotations/components/settingsTabPlugin.vue b/src/resources/assets/js/annotations/components/settingsTabPlugin.vue new file mode 100644 index 000000000..4b153ca36 --- /dev/null +++ b/src/resources/assets/js/annotations/components/settingsTabPlugin.vue @@ -0,0 +1,240 @@ + diff --git a/src/resources/assets/js/annotations/settingsTabPlugin.js b/src/resources/assets/js/annotations/settingsTabPlugin.js deleted file mode 100644 index da7b260d5..000000000 --- a/src/resources/assets/js/annotations/settingsTabPlugin.js +++ /dev/null @@ -1,241 +0,0 @@ -import Circle from '@biigle/ol/style/Circle'; -import Collection from '@biigle/ol/Collection'; -import DrawInteraction from '@biigle/ol/interaction/Draw'; -import ExportAreaApi from './api/exportArea'; -import Feature from '@biigle/ol/Feature'; -import Fill from '@biigle/ol/style/Fill'; -import ModifyInteraction from '@biigle/ol/interaction/Modify'; -import Rectangle from '@biigle/ol/geom/Rectangle'; -import Stroke from '@biigle/ol/style/Stroke'; -import Style from '@biigle/ol/style/Style'; -import VectorLayer from '@biigle/ol/layer/Vector'; -import VectorSource from '@biigle/ol/source/Vector'; -import {Events} from './import'; -import {handleErrorResponse} from './import'; -import {never as neverCondition} from '@biigle/ol/events/condition'; -import {SettingsTabPlugins} from './import'; - -/** - * The plugin component to edit the export area in the annotation tool. - * - * @type {Object} - */ -if (SettingsTabPlugins) { - SettingsTabPlugins.exportArea = { - props: { - settings: { - type: Object, - required: true, - }, - }, - data() { - return { - opacityValue: '1', - currentImage: null, - isEditing: false, - exportArea: null, - volumeId: null, - }; - }, - computed: { - opacity() { - return parseFloat(this.opacityValue); - }, - shown() { - return this.opacity > 0; - }, - height() { - return this.currentImage ? this.currentImage.height : 0; - }, - hasExportArea() { - return this.exportArea !== null; - }, - layer() { - return new VectorLayer({ - source: new VectorSource({ - features: new Collection(), - }), - style: [ - new Style({ - stroke: new Stroke({ - color: 'white', - width: 4 - }), - image: new Circle({ - radius: 6, - fill: new Fill({ - color: '#666666' - }), - stroke: new Stroke({ - color: 'white', - width: 2, - lineDash: [2] - }), - }), - }), - new Style({ - stroke: new Stroke({ - color: '#666666', - width: 1, - lineDash: [2] - }), - }), - ], - zIndex: 4, - updateWhileAnimating: true, - updateWhileInteracting: true, - }); - }, - drawInteraction() { - return new DrawInteraction({ - source: this.layer.getSource(), - type: 'Rectangle', - style: this.layer.getStyle(), - minPoints: 2, - maxPoints: 2, - geometryFunction(coordinates, opt_geometry) { - if (coordinates.length > 1) { - coordinates = [ - coordinates[0], - [coordinates[0][0], coordinates[1][1]], - coordinates[1], - [coordinates[1][0], coordinates[0][1]] - ]; - } - let geometry = opt_geometry; - if (geometry) { - geometry.setCoordinates([coordinates]); - } else { - geometry = new Rectangle([coordinates]); - } - return geometry; - } - }); - }, - modifyInteraction() { - return new ModifyInteraction({ - features: this.layer.getSource().getFeaturesCollection(), - style: this.layer.getStyle(), - deleteCondition: neverCondition, - }); - }, - }, - methods: { - toggleEditing() { - this.isEditing = !this.isEditing; - if (this.isEditing) { - this.drawInteraction.setActive(true); - this.modifyInteraction.setActive(true); - } else { - this.drawInteraction.setActive(false); - this.modifyInteraction.setActive(false); - } - }, - deleteArea() { - if (this.hasExportArea && confirm('Do you really want to delete the export area?')) { - let source = this.layer.getSource(); - let feature = source.getFeatures()[0]; - source.clear(); - ExportAreaApi.delete({id: this.volumeId}) - .then(() => this.exportArea = null) - .catch(function (response) { - source.addFeature(feature); - handleErrorResponse(response); - }); - } - }, - updateCurrentImage(id, image) { - this.currentImage = image; - }, - maybeDrawArea() { - this.clearSource(); - if (this.exportArea && this.height > 0) { - // Handle coordinates for tiled and regular images differently. - let height = this.currentImage.tiled ? 0 : this.height; - - let geometry = new Rectangle([[ - // Swap y coordinates for OpenLayers. - [this.exportArea[0], height - this.exportArea[1]], - [this.exportArea[0], height - this.exportArea[3]], - [this.exportArea[2], height - this.exportArea[3]], - [this.exportArea[2], height - this.exportArea[1]], - ]]); - this.layer.getSource().addFeature(new Feature({geometry: geometry})); - } - }, - handleModifyend(e) { - this.updateExportArea(e.features.item(0)); - }, - clearSource() { - this.layer.getSource().clear(); - }, - handleDrawend(e) { - let source = this.layer.getSource(); - let oldFeature = source.getFeatures()[0]; - source.clear(); - // Remove the feature again if creating it failed. - this.updateExportArea(e.feature).catch(function () { - source.clear(); - if (oldFeature) { - source.addFeature(oldFeature); - } - }); - }, - updateExportArea(feature) { - let coordinates = feature.getGeometry().getCoordinates()[0]; - // Handle coordinates for tiled and regular images differently. - let height = this.currentImage.tiled ? 0 : this.height; - coordinates = [ - coordinates[0][0], height - coordinates[0][1], - coordinates[2][0], height - coordinates[2][1], - ].map(Math.round); - - let promise = ExportAreaApi.save({id: this.volumeId}, {coordinates: coordinates}) - .then(() => this.exportArea = coordinates); - - promise.catch(handleErrorResponse); - - return promise; - }, - extendMap(map) { - map.addLayer(this.layer); - map.addInteraction(this.drawInteraction); - map.addInteraction(this.modifyInteraction); - }, - }, - watch: { - opacity(opacity) { - if (opacity < 1) { - this.settings.set('exportAreaOpacity', opacity); - } else { - this.settings.delete('exportAreaOpacity'); - } - - this.layer.setOpacity(opacity); - }, - exportArea() { - this.maybeDrawArea(); - }, - height() { - this.maybeDrawArea(); - }, - }, - created() { - this.volumeId = biigle.$require('annotations.volumeId'); - - if (this.settings.has('exportAreaOpacity')) { - this.opacityValue = this.settings.get('exportAreaOpacity'); - } - - this.exportArea = biigle.$require('annotations.exportArea'); - - this.drawInteraction.setActive(false); - this.modifyInteraction.setActive(false); - this.drawInteraction.on('drawend', this.handleDrawend); - this.modifyInteraction.on('modifyend', this.handleModifyend); - - Events.$on('images.change', this.updateCurrentImage); - Events.$on('annotations.map.init', this.extendMap); - }, - }; -} diff --git a/src/resources/assets/js/annotations/settingsTabPlugins.js b/src/resources/assets/js/annotations/settingsTabPlugins.js new file mode 100644 index 000000000..812fe05be --- /dev/null +++ b/src/resources/assets/js/annotations/settingsTabPlugins.js @@ -0,0 +1,11 @@ +import Plugin from './components/settingsTabPlugin'; +import {SettingsTabPlugins} from './import'; + +/** + * The plugin component to edit the export area in the annotation tool. + * + * @type {Object} + */ +if (SettingsTabPlugins) { + SettingsTabPlugins.exportArea = Plugin; +} diff --git a/src/resources/assets/js/reports/mixins/reportForm.js b/src/resources/assets/js/reports/mixins/reportForm.vue similarity index 88% rename from src/resources/assets/js/reports/mixins/reportForm.js rename to src/resources/assets/js/reports/mixins/reportForm.vue index 2cfe01ed8..b60a71857 100644 --- a/src/resources/assets/js/reports/mixins/reportForm.js +++ b/src/resources/assets/js/reports/mixins/reportForm.vue @@ -1,3 +1,4 @@ + diff --git a/src/resources/assets/js/reports/projectForm.js b/src/resources/assets/js/reports/projectForm.js deleted file mode 100644 index 428b019e0..000000000 --- a/src/resources/assets/js/reports/projectForm.js +++ /dev/null @@ -1,37 +0,0 @@ -import Form from './mixins/reportForm'; -import ProjectsApi from './api/projectReports'; - -/** - * The form for requesting a project report - */ -export default { - mixins: [Form], - data: { - projectId: null, - allowedOptions: { - 'Annotations': [ - 'export_area', - 'newest_label', - 'separate_label_trees', - 'only_labels', - 'aggregate_child_labels', - ], - 'ImageLabels': [ - 'separate_label_trees', - 'only_labels', - ], - 'VideoAnnotations': [ - 'separate_label_trees', - 'only_labels', - ], - }, - }, - methods: { - submit() { - this.request(this.projectId, ProjectsApi); - } - }, - created() { - this.projectId = biigle.$require('reports.projectId'); - }, -}; diff --git a/src/resources/assets/js/reports/projectForm.vue b/src/resources/assets/js/reports/projectForm.vue new file mode 100644 index 000000000..42f99b135 --- /dev/null +++ b/src/resources/assets/js/reports/projectForm.vue @@ -0,0 +1,41 @@ + diff --git a/src/resources/assets/js/reports/videoForm.js b/src/resources/assets/js/reports/videoForm.vue similarity index 51% rename from src/resources/assets/js/reports/videoForm.js rename to src/resources/assets/js/reports/videoForm.vue index be449d900..1a09c0e35 100644 --- a/src/resources/assets/js/reports/videoForm.js +++ b/src/resources/assets/js/reports/videoForm.vue @@ -1,3 +1,4 @@ + diff --git a/src/resources/assets/js/reports/volumeForm.js b/src/resources/assets/js/reports/volumeForm.js deleted file mode 100644 index c27559713..000000000 --- a/src/resources/assets/js/reports/volumeForm.js +++ /dev/null @@ -1,37 +0,0 @@ -import Form from './mixins/reportForm'; -import VolumesApi from './api/volumeReports'; - -/** - * The form for requesting a volume report - */ -export default { - mixins: [Form], - data: { - allowedOptions: { - 'Annotations': [ - 'export_area', - 'newest_label', - 'separate_label_trees', - 'annotation_session_id', - 'only_labels', - 'aggregate_child_labels', - ], - 'ImageLabels': [ - 'separate_label_trees', - 'annotation_session_id', - 'only_labels', - ], - }, - options: { - annotation_session_id: null, - }, - }, - methods: { - submit() { - this.request(this.volumeId, VolumesApi); - }, - }, - created() { - this.volumeId = biigle.$require('reports.volumeId'); - }, -}; diff --git a/src/resources/assets/js/reports/volumeForm.vue b/src/resources/assets/js/reports/volumeForm.vue new file mode 100644 index 000000000..ed64b2171 --- /dev/null +++ b/src/resources/assets/js/reports/volumeForm.vue @@ -0,0 +1,41 @@ + From 9e0116d9d2faee3168136da5bd727d3ee8fb8aad Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 3 Jul 2020 13:36:33 +0200 Subject: [PATCH 205/407] Update eslintrc --- .eslintrc.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index 6fbc56c81..b3cfa6f9f 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -16,7 +16,8 @@ ], "rules": { "no-prototype-builtins": "off", - "no-console": ["error", {"allow": ["warn", "error"]}] + "no-console": ["error", {"allow": ["warn", "error"]}], + "vue/require-v-for-key": "off" }, "globals": { "biigle": "readonly", From fb841ef9369b5293ff4810ff6cd5195340605956 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 9 Jul 2020 10:24:59 +0200 Subject: [PATCH 206/407] Remove module requirements The modules have been merged into biigle/core. --- composer.json | 4 +--- src/resources/views/projectReports.blade.php | 3 --- src/resources/views/videoReports.blade.php | 3 --- src/resources/views/volumeReports.blade.php | 3 --- 4 files changed, 1 insertion(+), 12 deletions(-) diff --git a/composer.json b/composer.json index fab38a442..f34f2ba22 100644 --- a/composer.json +++ b/composer.json @@ -15,9 +15,7 @@ } ], "require": { - "ext-zip": "*", - "biigle/projects": "^1.4 | dev-master", - "biigle/label-trees": "^1.27 | dev-master" + "ext-zip": "*" }, "autoload": { "psr-4": { diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index 70fc8849f..b1cd41588 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -3,7 +3,6 @@ @section('title', "Reports for {$project->name}") @push('scripts') - - -@endpush - -@push('styles') - -@endpush - -@section('navbar') - -@endsection - -@section('content') -
    -
    -
    -

    Request report for {{$video->name}}

    -

    - Request a video report to consolidate data of the video into downloadable files. -

    -
    -
    - - - @include('reports::partials.reportTypeInfo') -
    -
    -
    - -
    -
    -
    - Annotations belonging to different label trees will be separated to different files. -
    -
    - @include('reports::partials.restrictLabels') -
    - The requested report will be prepared. You will get notified when it is ready. Now you can request a new report or go back to the video. -
    -
    - back - -
    -
    -

    - ProTip: You can request reports for a whole project from the project overview page. -

    -
    -
    -
    -@endsection diff --git a/src/resources/views/videosSidebar.blade.php b/src/resources/views/videosSidebar.blade.php deleted file mode 100644 index c691c891b..000000000 --- a/src/resources/views/videosSidebar.blade.php +++ /dev/null @@ -1 +0,0 @@ - diff --git a/tests/Http/Controllers/Views/VideoReportsControllerTest.php b/tests/Http/Controllers/Views/VideoReportsControllerTest.php deleted file mode 100644 index c28c53500..000000000 --- a/tests/Http/Controllers/Views/VideoReportsControllerTest.php +++ /dev/null @@ -1,22 +0,0 @@ - $this->project()->id]); - - $this->get("videos/{$video->id}/reports")->assertStatus(302); - - $this->beUser(); - $this->get("videos/{$video->id}/reports")->assertStatus(403); - - $this->beGuest(); - $this->get("videos/{$video->id}/reports")->assertStatus(200); - } -} From aee1934f4ea4fa148156f8576ec9b81e2f7271dc Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 4 Aug 2020 16:15:56 +0200 Subject: [PATCH 220/407] Fix project reports view --- .../Views/ProjectReportsController.php | 25 ++++++++------- src/public/assets/scripts/main.js | 2 +- src/public/mix-manifest.json | 2 +- .../assets/js/reports/api/videoReports.js | 14 -------- src/resources/assets/js/reports/main.js | 2 -- .../assets/js/reports/projectForm.vue | 2 +- src/resources/assets/js/reports/videoForm.vue | 32 ------------------- .../assets/js/reports/volumeForm.vue | 2 +- src/resources/views/projectReports.blade.php | 14 +++----- .../Views/ProjectReportsControllerTest.php | 9 ------ 10 files changed, 21 insertions(+), 83 deletions(-) delete mode 100644 src/resources/assets/js/reports/api/videoReports.js delete mode 100644 src/resources/assets/js/reports/videoForm.vue diff --git a/src/Http/Controllers/Views/ProjectReportsController.php b/src/Http/Controllers/Views/ProjectReportsController.php index 2ae4a3843..cc23b8f98 100644 --- a/src/Http/Controllers/Views/ProjectReportsController.php +++ b/src/Http/Controllers/Views/ProjectReportsController.php @@ -5,6 +5,7 @@ use Biigle\Http\Controllers\Views\Controller; use Biigle\Modules\Reports\ReportType; use Biigle\Project; +use Illuminate\Http\Response; class ProjectReportsController extends Controller { @@ -17,25 +18,25 @@ class ProjectReportsController extends Controller public function show($id) { $project = Project::findOrFail($id); - $hasVideo = $project->videos()->exists(); - $hasVolume = $project->volumes()->exists(); - if (!$hasVolume && !$hasVideo) { - abort(404); + $hasVideoVolume = $project->videoVolumes()->exists(); + $hasImageVolume = $project->imageVolumes()->exists(); + if (!$hasVideoVolume && !$hasImageVolume) { + abort(Response::HTTP_NOT_FOUND); } $this->authorize('access', $project); - $types = ReportType::when($hasVolume, function ($query) { - $query->where('name', 'like', 'ImageAnnotations%') - ->orWhere('name', 'like', 'ImageLabels%'); + $types = ReportType::when($hasImageVolume, function ($query) { + $query->where('name', 'like', 'Image%'); }) - ->when($hasVideo, function ($query) { - $query->orWhere('name', 'like', 'VideoAnnotations%'); + ->when($hasVideoVolume, function ($query) { + $query->orWhere('name', 'like', 'Video%'); }) + ->orderBy('name', 'asc') ->get(); - $hasExportArea = $project->volumes() + $hasExportArea = $project->imageVolumes() ->whereNotNull('attrs->export_area') ->exists(); @@ -45,8 +46,8 @@ public function show($id) 'project' => $project, 'reportTypes' => $types, 'hasExportArea' => $hasExportArea, - 'hasVolume' => $hasVolume, - 'hasVideo' => $hasVideo, + 'hasImageVolume' => $hasImageVolume, + 'hasVideoVolume' => $hasVideoVolume, 'labelTrees' => $labelTrees, ]); } diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index 25560d338..367adfd13 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=0)}({0:function(e,t,n){n("Or9D"),e.exports=n("zcrr")},"KHd+":function(e,t,n){"use strict";function r(e,t,n,r,i,s,o,a){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),s&&(u._scopeId="data-v-"+s),o?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(o)},u._ssrRegister=l):i&&(l=a?function(){i.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:i),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var d=u.beforeCreate;u.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},Or9D:function(e,t,n){"use strict";n.r(t);var r=biigle.$require("messages").handleErrorResponse,i=biigle.$require("labelTrees.components.labelTrees"),s={mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:i},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var n=t.name.split("\\");e.hasOwnProperty(n[0])||(e[n[0]]=[]),e[n[0]].push(n[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(n){t[n]=e.options[n]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:r(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0],this.labelTrees=biigle.$require("reports.labelTrees")}},o=n("KHd+"),a=Object(o.a)(s,void 0,void 0,!1,null,null,null).exports,l=Vue.resource("/api/v1/projects{/id}/reports"),u={mixins:[a],data:function(){return{projectId:null,allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","only_labels"],VideoAnnotations:["separate_label_trees","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,l)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},c=Object(o.a)(u,void 0,void 0,!1,null,null,null).exports,d=Vue.resource("/api/v1/videos{/id}/reports"),p={mixins:[a],data:function(){return{videoId:null,selectedType:"VideoAnnotations",selectedVariant:"Csv",allowedOptions:{VideoAnnotations:["separate_label_trees","only_labels"]}}},methods:{submit:function(){this.request(this.videoId,d)}},created:function(){this.videoId=biigle.$require("reports.videoId")}},f=Object(o.a)(p,void 0,void 0,!1,null,null,null).exports,h=Vue.resource("/api/v1/volumes{/id}/reports"),b={mixins:[a],data:function(){return{allowedOptions:{Annotations:["export_area","newest_label","separate_label_trees","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","annotation_session_id","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,h)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},_=Object(o.a)(b,void 0,void 0,!1,null,null,null).exports;biigle.$mount("project-report-form",c),biigle.$mount("video-report-form",f),biigle.$mount("volume-report-form",_)},zcrr:function(e,t){}}); \ No newline at end of file +!function(e){var t={};function n(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,n),s.l=!0,s.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)n.d(r,s,function(t){return e[t]}.bind(null,s));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=0)}({0:function(e,t,n){n("Or9D"),e.exports=n("zcrr")},"KHd+":function(e,t,n){"use strict";function r(e,t,n,r,s,i,o,a){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),o?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),s&&s.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(o)},u._ssrRegister=l):s&&(l=a?function(){s.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:s),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var d=u.beforeCreate;u.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},Or9D:function(e,t,n){"use strict";n.r(t);var r=biigle.$require("messages").handleErrorResponse,s=biigle.$require("labelTrees.components.labelTrees"),i={mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:s},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var n=t.name.split("\\");e.hasOwnProperty(n[0])||(e[n[0]]=[]),e[n[0]].push(n[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(n){t[n]=e.options[n]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:r(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0],this.labelTrees=biigle.$require("reports.labelTrees")}},o=n("KHd+"),a=Object(o.a)(i,void 0,void 0,!1,null,null,null).exports,l=Vue.resource("/api/v1/projects{/id}/reports"),u={mixins:[a],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","only_labels"],VideoAnnotations:["separate_label_trees","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,l)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},c=Object(o.a)(u,void 0,void 0,!1,null,null,null).exports,d=Vue.resource("/api/v1/volumes{/id}/reports"),p={mixins:[a],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","annotation_session_id","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,d)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},f=Object(o.a)(p,void 0,void 0,!1,null,null,null).exports;biigle.$mount("project-report-form",c),biigle.$mount("volume-report-form",f)},zcrr:function(e,t){}}); \ No newline at end of file diff --git a/src/public/mix-manifest.json b/src/public/mix-manifest.json index c7922236b..87f3501f0 100644 --- a/src/public/mix-manifest.json +++ b/src/public/mix-manifest.json @@ -1,5 +1,5 @@ { "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=30a9a1a72b6179458798", - "/assets/scripts/main.js": "/assets/scripts/main.js?id=8b01b655e6b98fe7e685", + "/assets/scripts/main.js": "/assets/scripts/main.js?id=24d30edb63af89ec94d0", "/assets/styles/main.css": "/assets/styles/main.css?id=9d45536e01d0a0b3c70b" } diff --git a/src/resources/assets/js/reports/api/videoReports.js b/src/resources/assets/js/reports/api/videoReports.js deleted file mode 100644 index 15c1fadda..000000000 --- a/src/resources/assets/js/reports/api/videoReports.js +++ /dev/null @@ -1,14 +0,0 @@ -/** - * Resource for requesting reports for videos - * - * let resource = biigle.$require('reports.api.videoReports'); - * - * Request a CSV report: - * - * resource.save({id: 1}, { - * type_id: 8, - * separate_label_trees: true, - * }).then(...) - * - */ -export default Vue.resource('/api/v1/videos{/id}/reports'); diff --git a/src/resources/assets/js/reports/main.js b/src/resources/assets/js/reports/main.js index b22403a2a..cad963ca7 100644 --- a/src/resources/assets/js/reports/main.js +++ b/src/resources/assets/js/reports/main.js @@ -1,7 +1,5 @@ import ProjectForm from './projectForm'; -import VideoForm from './videoForm'; import VolumeForm from './volumeForm'; biigle.$mount('project-report-form', ProjectForm); -biigle.$mount('video-report-form', VideoForm); biigle.$mount('volume-report-form', VolumeForm); diff --git a/src/resources/assets/js/reports/projectForm.vue b/src/resources/assets/js/reports/projectForm.vue index 42f99b135..fee449f8a 100644 --- a/src/resources/assets/js/reports/projectForm.vue +++ b/src/resources/assets/js/reports/projectForm.vue @@ -11,7 +11,7 @@ export default { return { projectId: null, allowedOptions: { - 'Annotations': [ + 'ImageAnnotations': [ 'export_area', 'newest_label', 'separate_label_trees', diff --git a/src/resources/assets/js/reports/videoForm.vue b/src/resources/assets/js/reports/videoForm.vue deleted file mode 100644 index 1a09c0e35..000000000 --- a/src/resources/assets/js/reports/videoForm.vue +++ /dev/null @@ -1,32 +0,0 @@ - diff --git a/src/resources/assets/js/reports/volumeForm.vue b/src/resources/assets/js/reports/volumeForm.vue index ed64b2171..328ff4c4e 100644 --- a/src/resources/assets/js/reports/volumeForm.vue +++ b/src/resources/assets/js/reports/volumeForm.vue @@ -10,7 +10,7 @@ export default { data() { return { allowedOptions: { - 'Annotations': [ + 'ImageAnnotations': [ 'export_area', 'newest_label', 'separate_label_trees', diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index 92cef651f..eea2cbedf 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -27,27 +27,21 @@

    Request report for {{$project->name}}

    - @if ($hasVolume && $hasVideo) - Request a project report to consolidate data of all volumes or videos of the project into downloadable files. - @elseif ($hasVolume) - Request a project report to consolidate data of all volumes of the project into downloadable files. - @else - Request a project report to consolidate data of all videos of the project into downloadable files. - @endif + Request a project report to consolidate data of image or video volumes of the project into downloadable files.

    - @if ($hasVolume) + @if ($hasImageVolume)
    - +
    @endif - @if ($hasVideo) + @if ($hasVideoVolume)
    diff --git a/tests/Http/Controllers/Views/ProjectReportsControllerTest.php b/tests/Http/Controllers/Views/ProjectReportsControllerTest.php index be389d60b..85ce6cedc 100644 --- a/tests/Http/Controllers/Views/ProjectReportsControllerTest.php +++ b/tests/Http/Controllers/Views/ProjectReportsControllerTest.php @@ -28,13 +28,4 @@ public function testShowEmpty() $this->beGuest(); $this->get("projects/{$id}/reports")->assertStatus(404); } - - public function testShowVideo() - { - $id = $this->project()->id; - $this->beGuest(); - $this->get("projects/{$id}/reports")->assertStatus(404); - VideoTest::create(['project_id' => $id]); - $this->get("projects/{$id}/reports")->assertStatus(200); - } } From 1cb223407f3a050f341b8af0472d4c35afcc78bf Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 5 Aug 2020 11:19:47 +0200 Subject: [PATCH 221/407] Update volume report view for video volumes --- .../Api/Projects/ProjectReportController.php | 2 +- .../Api/Volumes/VolumeReportController.php | 2 +- .../Views/VolumeReportsController.php | 12 +++- src/Http/Requests/StoreReport.php | 2 - src/resources/views/volumeReports.blade.php | 56 +++++++++++-------- 5 files changed, 44 insertions(+), 30 deletions(-) diff --git a/src/Http/Controllers/Api/Projects/ProjectReportController.php b/src/Http/Controllers/Api/Projects/ProjectReportController.php index 8fd8bb4fc..0d1aa40b9 100644 --- a/src/Http/Controllers/Api/Projects/ProjectReportController.php +++ b/src/Http/Controllers/Api/Projects/ProjectReportController.php @@ -24,7 +24,7 @@ class ProjectReportController extends Controller * @apiParam (Optional arguments) {Boolean} newest_label If `true`, restrict the report to the newest label of each annotation. * @apiParam (Optional arguments) {Boolean} separate_label_trees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet. * @apiParam (Optional arguments) {Number[]} only_labels Array of label IDs to restrict the report to. Omit or leave empty to take all labels. - * @apiParam (Optional arguments) {Boolean} aggregate_child_labels If `true`, add the abundance of child labels to the abundance of their parent labels and omit the child labels. This is only valid for the Basic, Extended and Abundance reports. Labels that are excluded with `only_labels` are not counted. + * @apiParam (Optional arguments) {Boolean} aggregate_child_labels If `true`, add the abundance of child labels to the abundance of their parent labels and omit the child labels. This is only valid for the abundance report. Labels that are excluded with `only_labels` are not counted. * * @apiPermission projectMember * diff --git a/src/Http/Controllers/Api/Volumes/VolumeReportController.php b/src/Http/Controllers/Api/Volumes/VolumeReportController.php index 117a9655d..1428bf5af 100644 --- a/src/Http/Controllers/Api/Volumes/VolumeReportController.php +++ b/src/Http/Controllers/Api/Volumes/VolumeReportController.php @@ -26,7 +26,7 @@ class VolumeReportController extends Controller * @apiParam (Optional arguments) {Boolean} separate_label_trees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet. * @apiParam (Optional arguments) {Number} annotation_session_id ID of an annotation session of the volume. If given, only annotations belonging to the annotation session are included in the report. * @apiParam (Optional arguments) {Number[]} only_labels Array of label IDs to restrict the report to. Omit or leave empty to take all labels. - * @apiParam (Optional arguments) {Boolean} aggregate_child_labels If `true`, add the abundance of child labels to the abundance of their parent labels and omit the child labels. This is only valid for the Basic, Extended and Abundance reports. Labels that are excluded with `only_labels` are not counted. + * @apiParam (Optional arguments) {Boolean} aggregate_child_labels If `true`, add the abundance of child labels to the abundance of their parent labels and omit the child labels. This is only valid for the abundance report. Labels that are excluded with `only_labels` are not counted. * * @apiPermission projectMember * diff --git a/src/Http/Controllers/Views/VolumeReportsController.php b/src/Http/Controllers/Views/VolumeReportsController.php index f49d86919..ebd1ac8c0 100644 --- a/src/Http/Controllers/Views/VolumeReportsController.php +++ b/src/Http/Controllers/Views/VolumeReportsController.php @@ -25,8 +25,13 @@ public function show(Request $request, $id) $volume = BaseVolume::findOrFail($id); $this->authorize('access', $volume); $sessions = $volume->annotationSessions()->orderBy('starts_at', 'desc')->get(); - $types = ReportType::where('name', 'like', 'ImageAnnotations%') - ->orWhere('name', 'like', 'ImageLabels%') + $types = ReportType::when($volume->isImageVolume(), function ($query) { + $query->where('name', 'like', 'Image%'); + }) + ->when($volume->isVideoVolume(), function ($query) { + $query->where('name', 'like', 'Video%'); + }) + ->orderBy('name', 'asc') ->get(); $user = $request->user(); @@ -54,12 +59,15 @@ public function show(Request $request, $id) }) ->get(); + $reportPrefix = $volume->isImageVolume() ? 'Image' : 'Video'; + return view('reports::volumeReports', [ 'projects' => $volume->projects, 'volume' => Volume::convert($volume), 'annotationSessions' => $sessions, 'reportTypes' => $types, 'labelTrees' => $labelTrees, + 'reportPrefix' => $reportPrefix, ]); } } diff --git a/src/Http/Requests/StoreReport.php b/src/Http/Requests/StoreReport.php index 2cd5bd88a..c8aed2341 100644 --- a/src/Http/Requests/StoreReport.php +++ b/src/Http/Requests/StoreReport.php @@ -107,8 +107,6 @@ protected function isAllowedForExportArea() protected function isAllowedForAggregateChildLabels() { return $this->isType([ - ReportType::imageAnnotationsBasicId(), - ReportType::imageAnnotationsExtendedId(), ReportType::imageAnnotationsAbundanceId(), ]); } diff --git a/src/resources/views/volumeReports.blade.php b/src/resources/views/volumeReports.blade.php index 49fe8122a..6b442485d 100644 --- a/src/resources/views/volumeReports.blade.php +++ b/src/resources/views/volumeReports.blade.php @@ -33,12 +33,18 @@
    -
    - -
    -
    - -
    + @if ($volume->isImageVolume()) +
    + +
    +
    + +
    + @else +
    + +
    + @endif
    @@ -49,7 +55,7 @@ @include('reports::partials.reportTypeInfo')
    @if ($annotationSessions->count() > 0) -
    +
    Restrict to export area - - @else - - @endif +
    + @if ($volume->isImageVolume()) +
    +
    + @if ($volume->exportArea) + + @else + + @endif +
    +
    +
    + Annotations that are outside of the export area will be discarded for this report. +
    -
    -
    - Annotations that are outside of the export area will be discarded for this report. -
    -
    + @endif
    @endsection diff --git a/src/resources/views/partials/reportTypeInfo.blade.php b/src/resources/views/partials/reportTypeInfo.blade.php index d5860785d..71dd140f1 100644 --- a/src/resources/views/partials/reportTypeInfo.blade.php +++ b/src/resources/views/partials/reportTypeInfo.blade.php @@ -25,3 +25,6 @@
    The CSV video annotation report is intended for subsequent processing and lists the video annotation labels at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema.
    +
    + The CSV video label report lists the video labels at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema. +
    diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index eea2cbedf..62654af15 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -32,21 +32,30 @@
    -
    - @if ($hasImageVolume) + @if ($hasImageVolume) +
    - @endif - @if ($hasVideoVolume) +
    + @endif + @if ($hasImageVolume && $hasVideoVolume) +
    +
    + @endif + @if ($hasVideoVolume) +
    - @endif -
    +
    + +
    +
    + @endif
    diff --git a/src/resources/views/volumeReports.blade.php b/src/resources/views/volumeReports.blade.php index 6b442485d..67f23440b 100644 --- a/src/resources/views/volumeReports.blade.php +++ b/src/resources/views/volumeReports.blade.php @@ -42,14 +42,17 @@
    @else
    - + +
    +
    +
    @endif
    - @include('reports::partials.reportTypeInfo') diff --git a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php index c36cf28db..829e94cd1 100644 --- a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php +++ b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php @@ -65,6 +65,16 @@ public function testStoreInvalidVideoAnnotations() ->assertStatus(422); } + public function testStoreInvalidVideoLabels() + { + $volumeId = $this->volume()->id; + $typeId = ReportType::videoLabelsCsvId(); + + $this->beGuest(); + $this->postJson("api/v1/volumes/{$volumeId}/reports", ['type_id' => $typeId]) + ->assertStatus(422); + } + public function testStoreVideoVolume() { $volumeId = $this->volume(['media_type_id' => MediaType::videoId()])->id; @@ -103,6 +113,16 @@ public function testStoreInvalidImageAnnotations() ->assertStatus(422); } + public function testStoreInvalidImageLabels() + { + $volumeId = $this->volume(['media_type_id' => MediaType::videoId()])->id; + $typeId = ReportType::imageLabelsCsvId(); + + $this->beGuest(); + $this->postJson("api/v1/volumes/{$volumeId}/reports", ['type_id' => $typeId]) + ->assertStatus(422); + } + public function testStoreOnlyLabels() { $this->beGuest(); diff --git a/tests/Support/Reports/Projects/VideoLabels/CsvReportGeneratorTest.php b/tests/Support/Reports/Projects/VideoLabels/CsvReportGeneratorTest.php new file mode 100644 index 000000000..7b8296bd0 --- /dev/null +++ b/tests/Support/Reports/Projects/VideoLabels/CsvReportGeneratorTest.php @@ -0,0 +1,16 @@ +assertEquals('CSV video label report', $generator->getName()); + $this->assertEquals('csv_video_label_report', $generator->getFilename()); + } +} diff --git a/tests/Support/Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php b/tests/Support/Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php new file mode 100644 index 000000000..d59d4d590 --- /dev/null +++ b/tests/Support/Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php @@ -0,0 +1,210 @@ +assertEquals('CSV video label report', $generator->getName()); + $this->assertEquals('csv_video_label_report', $generator->getFilename()); + $this->assertStringEndsWith('.zip', $generator->getFullFilename()); + } + + public function testGenerateReport() + { + $volume = VolumeTest::create(); + + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + + $il = VideoLabelTest::create([ + 'video_id' => VideoTest::create([ + 'volume_id' => $volume->id, + 'filename' => 'foo.mp4', + ])->id, + 'label_id' => $child->id, + ]); + + $mock = Mockery::mock(); + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); + + $mock->shouldReceive('put') + ->once() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([ + $il->id, + $il->video_id, + $il->video->filename, + $il->user_id, + $il->user->firstname, + $il->user->lastname, + $il->label_id, + $child->name, + "{$root->name} > {$child->name}", + ]); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile')->once(); + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new CsvReportGenerator; + $generator->setSource($volume); + $generator->generateReport('my/path'); + } + + public function testGenerateReportSeparateLabelTrees() + { + $tree1 = LabelTreeTest::create(['name' => 'tree1']); + $tree2 = LabelTreeTest::create(['name' => 'tree2']); + + $label1 = LabelTest::create(['label_tree_id' => $tree1->id]); + $label2 = LabelTest::create(['label_tree_id' => $tree2->id]); + + $video = VideoTest::create(); + + $il1 = VideoLabelTest::create([ + 'video_id' => $video->id, + 'label_id' => $label1->id, + ]); + $il2 = VideoLabelTest::create([ + 'video_id' => $video->id, + 'label_id' => $label2->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $mock->shouldReceive('put') + ->twice() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([ + $il1->id, + $video->id, + $video->filename, + $il1->user_id, + $il1->user->firstname, + $il1->user->lastname, + $label1->id, + $label1->name, + $label1->name, + ]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $il2->id, + $video->id, + $video->filename, + $il2->user_id, + $il2->user->firstname, + $il2->user->lastname, + $label2->id, + $label2->name, + $label2->name, + ]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$tree1->id}-{$tree1->name}.csv"); + + $mock->shouldReceive('addFile') + ->once() + ->with('def', "{$tree2->id}-{$tree2->name}.csv"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new CsvReportGenerator([ + 'separateLabelTrees' => true, + ]); + $generator->setSource($video->volume); + $generator->generateReport('my/path'); + } + + public function testRestrictToLabels() + { + $video = VideoTest::create(); + $il1 = VideoLabelTest::create(['video_id' => $video->id]); + $il2 = VideoLabelTest::create(['video_id' => $video->id]); + + $generator = new CsvReportGenerator([ + 'onlyLabels' => [$il1->label_id], + ]); + $generator->setSource($video->volume); + $results = $generator->query()->get(); + $this->assertCount(1, $results); + $this->assertEquals($il1->id, $results[0]->video_label_id); + } +} From ced43b63ad0170374442102d001e1cbe83907267 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 11 Aug 2020 09:22:52 +0200 Subject: [PATCH 227/407] Use new generic user settings endpoint for report notifications --- .../Controllers/Api/SettingsController.php | 35 ---------- src/ReportsServiceProvider.php | 2 + .../views/settings/notifications.blade.php | 2 +- .../Controllers/SettingsControllerTest.php | 65 ------------------- .../Http/Requests/UpdateUserSettingsTest.php | 27 ++++++++ 5 files changed, 30 insertions(+), 101 deletions(-) delete mode 100644 src/Http/Controllers/Api/SettingsController.php delete mode 100644 tests/Http/Controllers/SettingsControllerTest.php create mode 100644 tests/Http/Requests/UpdateUserSettingsTest.php diff --git a/src/Http/Controllers/Api/SettingsController.php b/src/Http/Controllers/Api/SettingsController.php deleted file mode 100644 index d19761ca9..000000000 --- a/src/Http/Controllers/Api/SettingsController.php +++ /dev/null @@ -1,35 +0,0 @@ -validate($request, [ - 'report_notifications' => 'filled|in:email,web', - ]); - $settings = $request->only(['report_notifications']); - $request->user()->setSettings($settings); - } -} diff --git a/src/ReportsServiceProvider.php b/src/ReportsServiceProvider.php index a9e8dffef..1afc1552f 100644 --- a/src/ReportsServiceProvider.php +++ b/src/ReportsServiceProvider.php @@ -2,6 +2,7 @@ namespace Biigle\Modules\Reports; +use Biigle\Http\Requests\UpdateUserSettings; use Biigle\Modules\Reports\Http\Controllers\Mixins\Views\SearchControllerMixin; use Biigle\Services\Modules; use Illuminate\Database\Eloquent\Factory as EloquentFactory; @@ -66,6 +67,7 @@ public function boot(Modules $modules, Router $router) if (config('reports.notifications.allow_user_settings')) { $modules->registerViewMixin('reports', 'settings.notifications'); + UpdateUserSettings::addRule('report_notifications', 'filled|in:email,web'); } $this->registerPolicies(); diff --git a/src/resources/views/settings/notifications.blade.php b/src/resources/views/settings/notifications.blade.php index bb696d8c5..0616ecd99 100644 --- a/src/resources/views/settings/notifications.blade.php +++ b/src/resources/views/settings/notifications.blade.php @@ -43,7 +43,7 @@ watch: { settings: function (settings) { this.startLoading(); - this.$http.post('api/v1/users/my/settings/reports', { + this.$http.put('api/v1/users/my/settings', { report_notifications: this.settings, }) .then(this.handleSuccess, this.handleError) diff --git a/tests/Http/Controllers/SettingsControllerTest.php b/tests/Http/Controllers/SettingsControllerTest.php deleted file mode 100644 index 321ef7b50..000000000 --- a/tests/Http/Controllers/SettingsControllerTest.php +++ /dev/null @@ -1,65 +0,0 @@ -json('POST', 'api/v1/users/my/settings/reports') - ->assertStatus(401); - - $this->beUser(); - $response = $this->post('api/v1/users/my/settings/reports') - ->assertStatus(200); - - $this->assertNull($this->user()->fresh()->settings); - - $response = $this->post('api/v1/users/my/settings/reports', [ - 'unknown_key' => 'somevalue', - ]) - ->assertStatus(200); - - $this->assertNull($this->user()->fresh()->settings); - } - - public function testStoreNotificationSettings() - { - $user = $this->user(); - $this->beUser(); - - $this->assertNull($this->user()->fresh()->getSettings('report_notifications')); - - $response = $this->json('POST', 'api/v1/users/my/settings/reports', [ - 'report_notifications' => 'unknown value', - ]) - ->assertStatus(422); - - $this->assertNull($this->user()->fresh()->getSettings('report_notifications')); - - $response = $this->json('POST', 'api/v1/users/my/settings/reports', [ - 'report_notifications' => 'email', - ]) - ->assertStatus(200); - - $this->assertEquals('email', $this->user()->fresh()->getSettings('report_notifications')); - - $response = $this->json('POST', 'api/v1/users/my/settings/reports', [ - 'report_notifications' => 'web', - ]) - ->assertStatus(200); - - $this->assertEquals('web', $this->user()->fresh()->getSettings('report_notifications')); - - config(['reports.notifications.allow_user_settings' => false]); - - $response = $this->json('POST', 'api/v1/users/my/settings/reports', [ - 'report_notifications' => 'email', - ]) - ->assertStatus(404); - - $this->assertEquals('web', $this->user()->fresh()->getSettings('report_notifications')); - } -} diff --git a/tests/Http/Requests/UpdateUserSettingsTest.php b/tests/Http/Requests/UpdateUserSettingsTest.php new file mode 100644 index 000000000..e290262a4 --- /dev/null +++ b/tests/Http/Requests/UpdateUserSettingsTest.php @@ -0,0 +1,27 @@ +beUser(); + $this->putJson("/api/v1/users/my/settings", ['report_notifications' => 'test']) + ->assertStatus(422); + + $this->assertNull($this->user()->fresh()->getSettings('report_notifications')); + + $this->putJson("/api/v1/users/my/settings", ['report_notifications' => 'email']) + ->assertStatus(200); + + $this->assertEquals('email', $this->user()->fresh()->getSettings('report_notifications')); + + $this->putJson("/api/v1/users/my/settings", ['report_notifications' => 'web']) + ->assertStatus(200); + + $this->assertEquals('web', $this->user()->fresh()->getSettings('report_notifications')); + } +} From d2f89a5a2c0e8e765a0d3ac8d6fb9a1633d9ca0f Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 11 Aug 2020 09:26:32 +0200 Subject: [PATCH 228/407] Remove unused route --- src/Http/routes.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Http/routes.php b/src/Http/routes.php index d76bfe754..70e4f1eb2 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -38,10 +38,6 @@ 'destroy' => 'destroy-reports', ], ]); - - $router->post('users/my/settings/reports', [ - 'uses' => 'SettingsController@store', - ]); }); $router->group([ From 193c75fe742a36f00f4f505f2199d97e7f65e6a3 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 17 Aug 2020 13:32:15 +0200 Subject: [PATCH 229/407] Implement compatibility with the new project overview --- .../Views/ProjectReportsController.php | 79 ++++++++++- src/ReportsServiceProvider.php | 1 + .../views/projectReportsV2.blade.php | 125 ++++++++++++++++++ .../views/projectsShowV2Tabs.blade.php | 5 + 4 files changed, 209 insertions(+), 1 deletion(-) create mode 100644 src/resources/views/projectReportsV2.blade.php create mode 100644 src/resources/views/projectsShowV2Tabs.blade.php diff --git a/src/Http/Controllers/Views/ProjectReportsController.php b/src/Http/Controllers/Views/ProjectReportsController.php index cc23b8f98..366bd637c 100644 --- a/src/Http/Controllers/Views/ProjectReportsController.php +++ b/src/Http/Controllers/Views/ProjectReportsController.php @@ -5,6 +5,7 @@ use Biigle\Http\Controllers\Views\Controller; use Biigle\Modules\Reports\ReportType; use Biigle\Project; +use Illuminate\Http\Request; use Illuminate\Http\Response; class ProjectReportsController extends Controller @@ -12,10 +13,29 @@ class ProjectReportsController extends Controller /** * Show the project reports view. * + * @param Request $request * @param int $id Project ID * @return \Illuminate\Http\Response */ - public function show($id) + public function show(Request $request, $id) + { + $showV1 = $request->user()->getSettings('project_overview_v1', false); + + if (!config('biigle.project_overview_v2_preview') || $showV1) { + return $this->showV1($id); + } + + return $this->showV2($request, $id); + } + + /** + * Show the old project reports view. + * + * @param int $id + * + * @return \Illuminate\Http\Response + */ + protected function showV1($id) { $project = Project::findOrFail($id); $hasVideoVolume = $project->videoVolumes()->exists(); @@ -51,4 +71,61 @@ public function show($id) 'labelTrees' => $labelTrees, ]); } + + /** + * Show the new project reports view. + * + * @param Request $request + * @param int $id + * + * @return \Illuminate\Http\Response + */ + protected function showV2(Request $request, $id) + { + $project = Project::findOrFail($id); + $hasVideoVolume = $project->videoVolumes()->exists(); + $hasImageVolume = $project->imageVolumes()->exists(); + if (!$hasVideoVolume && !$hasImageVolume) { + abort(Response::HTTP_NOT_FOUND); + } + + $this->authorize('access', $project); + + $userProject = $request->user()->projects()->where('id', $id)->first(); + $isMember = $userProject !== null; + $isPinned = $isMember && $userProject->pivot->pinned; + $canPin = $isMember && 3 > $request->user() + ->projects() + ->wherePivot('pinned', true) + ->count(); + + $types = ReportType::when($hasImageVolume, function ($query) { + $query->where('name', 'like', 'Image%'); + }) + ->when($hasVideoVolume, function ($query) { + $query->orWhere('name', 'like', 'Video%'); + }) + ->orderBy('name', 'asc') + ->get(); + + + $hasExportArea = $project->imageVolumes() + ->whereNotNull('attrs->export_area') + ->exists(); + + $labelTrees = $project->labelTrees()->with('labels', 'version')->get(); + + return view('reports::projectReportsV2', [ + 'project' => $project, + 'isMember' => $isMember, + 'isPinned' => $isPinned, + 'canPin' => $canPin, + 'activeTab' => 'reports', + 'reportTypes' => $types, + 'hasExportArea' => $hasExportArea, + 'hasImageVolume' => $hasImageVolume, + 'hasVideoVolume' => $hasVideoVolume, + 'labelTrees' => $labelTrees, + ]); + } } diff --git a/src/ReportsServiceProvider.php b/src/ReportsServiceProvider.php index 1afc1552f..6374e6f06 100644 --- a/src/ReportsServiceProvider.php +++ b/src/ReportsServiceProvider.php @@ -58,6 +58,7 @@ public function boot(Modules $modules, Router $router) 'annotationsManualSidebarSettings', 'searchTab', 'searchTabContent', + 'projectsShowV2Tabs', ], 'controllerMixins' => [ 'search' => SearchControllerMixin::class.'@index', diff --git a/src/resources/views/projectReportsV2.blade.php b/src/resources/views/projectReportsV2.blade.php new file mode 100644 index 000000000..26230bfe3 --- /dev/null +++ b/src/resources/views/projectReportsV2.blade.php @@ -0,0 +1,125 @@ +@extends('projects.show.base') + +@section('title', "Reports for {$project->name}") + +@push('scripts') + + +@endpush + +@push('styles') + +@endpush + +@section('project-content') +
    +

    + Request a project report to consolidate data of image or video volumes of the project into downloadable files. +

    + +
    +
    +
    + + @if ($hasImageVolume) +
    +
    + +
    +
    + +
    +
    + @endif + @if ($hasImageVolume && $hasVideoVolume) +
    +
    + @endif + @if ($hasVideoVolume) +
    +
    + +
    +
    + +
    +
    + @endif +
    +
    + + + @include('reports::partials.reportTypeInfo') +
    +
    + The requested report will be prepared. You will get notified when it is ready. +
    +
    + +
    +
    +
    +
    +
    +
    + @if ($hasExportArea) + + @else + + @endif +
    +
    +
    + Annotations that are outside of the export area will be discarded for this report. +
    +
    +
    +
    + +
    +
    +
    + Only the newest label of each annotation will be included in the report. +
    +
    +
    +
    + +
    +
    +
    + Aggregate the abundance of child labels to their parent label. +
    +
    +
    +
    +
    + +
    +
    +
    + Annotations belonging to different label trees will be separated to different files/sheets. +
    +
    + @include('reports::partials.restrictLabels') +
    +
    + +
    +@endsection diff --git a/src/resources/views/projectsShowV2Tabs.blade.php b/src/resources/views/projectsShowV2Tabs.blade.php new file mode 100644 index 000000000..b96a82984 --- /dev/null +++ b/src/resources/views/projectsShowV2Tabs.blade.php @@ -0,0 +1,5 @@ +@if ($project->volumes()->exists()) + +@endif From 04586ea1f17cda005b3f7dcef31bfd6a18bd1552 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 9 Sep 2020 07:37:22 +0200 Subject: [PATCH 230/407] Fix restrict to labels option for very large label trees --- src/public/assets/scripts/main.js | 2 +- src/public/mix-manifest.json | 2 +- .../assets/js/reports/mixins/reportForm.vue | 13 ++++++++++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index c42ba8c43..b0e1a8e32 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,n),s.l=!0,s.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)n.d(r,s,function(t){return e[t]}.bind(null,s));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=0)}({0:function(e,t,n){n("Or9D"),e.exports=n("zcrr")},"KHd+":function(e,t,n){"use strict";function r(e,t,n,r,s,i,a,o){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),s&&s.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):s&&(l=o?function(){s.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:s),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var d=u.beforeCreate;u.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},Or9D:function(e,t,n){"use strict";n.r(t);var r=biigle.$require("messages").handleErrorResponse,s=biigle.$require("labelTrees.components.labelTrees"),i={mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:s},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var n=t.name.split("\\");e.hasOwnProperty(n[0])||(e[n[0]]=[]),e[n[0]].push(n[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(n){t[n]=e.options[n]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:r(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0],this.labelTrees=biigle.$require("reports.labelTrees")}},a=n("KHd+"),o=Object(a.a)(i,void 0,void 0,!1,null,null,null).exports,l=Vue.resource("/api/v1/projects{/id}/reports"),u={mixins:[o],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,l)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},c=Object(a.a)(u,void 0,void 0,!1,null,null,null).exports,d=Vue.resource("/api/v1/volumes{/id}/reports"),p={mixins:[o],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","annotation_session_id","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","annotation_session_id","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,d)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},f=Object(a.a)(p,void 0,void 0,!1,null,null,null).exports;biigle.$mount("project-report-form",c),biigle.$mount("volume-report-form",f)},zcrr:function(e,t){}}); \ No newline at end of file +!function(e){var t={};function n(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,n),s.l=!0,s.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)n.d(r,s,function(t){return e[t]}.bind(null,s));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=0)}({0:function(e,t,n){n("Or9D"),e.exports=n("zcrr")},"KHd+":function(e,t,n){"use strict";function r(e,t,n,r,s,i,a,o){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),s&&s.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):s&&(l=o?function(){s.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:s),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var d=u.beforeCreate;u.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},Or9D:function(e,t,n){"use strict";n.r(t);var r=biigle.$require("messages").handleErrorResponse,s=biigle.$require("labelTrees.components.labelTrees"),i={mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:s},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var n=t.name.split("\\");e.hasOwnProperty(n[0])||(e[n[0]]=[]),e[n[0]].push(n[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(n){t[n]=e.options[n]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:r(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0];var e=biigle.$require("reports.labelTrees");e.forEach((function(e){e.labels.forEach((function(e){e.selected=!1}))})),this.labelTrees=e}},a=n("KHd+"),o=Object(a.a)(i,void 0,void 0,!1,null,null,null).exports,l=Vue.resource("/api/v1/projects{/id}/reports"),u={mixins:[o],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,l)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},c=Object(a.a)(u,void 0,void 0,!1,null,null,null).exports,d=Vue.resource("/api/v1/volumes{/id}/reports"),p={mixins:[o],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","annotation_session_id","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","annotation_session_id","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,d)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},f=Object(a.a)(p,void 0,void 0,!1,null,null,null).exports;biigle.$mount("project-report-form",c),biigle.$mount("volume-report-form",f)},zcrr:function(e,t){}}); \ No newline at end of file diff --git a/src/public/mix-manifest.json b/src/public/mix-manifest.json index 0cdd949a9..440a9e46c 100644 --- a/src/public/mix-manifest.json +++ b/src/public/mix-manifest.json @@ -1,5 +1,5 @@ { "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=30a9a1a72b6179458798", - "/assets/scripts/main.js": "/assets/scripts/main.js?id=0088451dcb2dae15cbba", + "/assets/scripts/main.js": "/assets/scripts/main.js?id=7289a2449844f3f6494e", "/assets/styles/main.css": "/assets/styles/main.css?id=9d45536e01d0a0b3c70b" } diff --git a/src/resources/assets/js/reports/mixins/reportForm.vue b/src/resources/assets/js/reports/mixins/reportForm.vue index b60a71857..094ed85bd 100644 --- a/src/resources/assets/js/reports/mixins/reportForm.vue +++ b/src/resources/assets/js/reports/mixins/reportForm.vue @@ -149,7 +149,18 @@ export default { this.reportTypes = biigle.$require('reports.reportTypes'); this.selectedType = Object.keys(this.variants)[0]; this.selectedVariant = this.availableVariants[0]; - this.labelTrees = biigle.$require('reports.labelTrees'); + let trees = biigle.$require('reports.labelTrees'); + // The "selected" property is automatically set by the label trees component. + // However, this may not be fast enough for very large label trees to complete + // before the selectedLabels computed property is evaluated. The computed + // property won't work correctly in that case so we explicitly set the "selected" + // property here. + trees.forEach(function (tree) { + tree.labels.forEach(function (label) { + label.selected = false; + }); + }); + this.labelTrees = trees; }, }; From e12ff8c410199f65d9c21ee0f83753d882bfffbe Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 9 Sep 2020 15:34:23 +0200 Subject: [PATCH 231/407] Fix report generation with seperate label trees but no annotations/labels --- .../Volumes/ImageAnnotations/AbundanceReportGenerator.php | 2 +- .../Reports/Volumes/ImageAnnotations/AreaReportGenerator.php | 2 +- .../Reports/Volumes/ImageAnnotations/BasicReportGenerator.php | 2 +- .../Reports/Volumes/ImageAnnotations/CsvReportGenerator.php | 2 +- .../Volumes/ImageAnnotations/ExtendedReportGenerator.php | 2 +- .../Reports/Volumes/ImageAnnotations/FullReportGenerator.php | 2 +- .../Reports/Volumes/ImageLabels/BasicReportGenerator.php | 2 +- src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php | 2 +- .../Reports/Volumes/VideoAnnotations/CsvReportGenerator.php | 2 +- src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGenerator.php index 4771f8086..d861b2685 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGenerator.php @@ -39,7 +39,7 @@ public function generateReport($path) { $rows = $this->query()->get(); - if ($this->shouldSeparateLabelTrees()) { + if ($this->shouldSeparateLabelTrees() && $rows->isNotEmpty()) { $rows = $rows->groupBy('label_tree_id'); $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); diff --git a/src/Support/Reports/Volumes/ImageAnnotations/AreaReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/AreaReportGenerator.php index 0ef1a3899..fb0641cd2 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/AreaReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/AreaReportGenerator.php @@ -54,7 +54,7 @@ public function generateReport($path) ->get() ->keyBy('id'); - if ($this->shouldSeparateLabelTrees()) { + if ($this->shouldSeparateLabelTrees() && $rows->isNotEmpty()) { $rows = $rows->groupBy('label_tree_id'); $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); diff --git a/src/Support/Reports/Volumes/ImageAnnotations/BasicReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/BasicReportGenerator.php index 7a13d98fd..1ae410dfb 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/BasicReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/BasicReportGenerator.php @@ -38,7 +38,7 @@ public function generateReport($path) { $labels = $this->query()->get(); - if ($this->shouldSeparateLabelTrees()) { + if ($this->shouldSeparateLabelTrees() && $labels->isNotEmpty()) { $labels = $labels->groupBy('label_tree_id'); $trees = LabelTree::whereIn('id', $labels->keys())->pluck('name', 'id'); diff --git a/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php index 88bdf37b8..2909cb6ba 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php @@ -42,7 +42,7 @@ public function generateReport($path) $rows = $this->query()->get(); $toZip = []; - if ($this->shouldSeparateLabelTrees()) { + if ($this->shouldSeparateLabelTrees() && $rows->isNotEmpty()) { $rows = $rows->groupBy('label_tree_id'); $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); diff --git a/src/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGenerator.php index c836e0c1d..eb141601d 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGenerator.php @@ -38,7 +38,7 @@ public function generateReport($path) { $rows = $this->query()->get(); - if ($this->shouldSeparateLabelTrees()) { + if ($this->shouldSeparateLabelTrees() && $rows->isNotEmpty()) { $rows = $rows->groupBy('label_tree_id'); $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); diff --git a/src/Support/Reports/Volumes/ImageAnnotations/FullReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/FullReportGenerator.php index 18881490a..c50bdc223 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/FullReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/FullReportGenerator.php @@ -39,7 +39,7 @@ public function generateReport($path) { $rows = $this->query()->get(); - if ($this->shouldSeparateLabelTrees()) { + if ($this->shouldSeparateLabelTrees() && $rows->isNotEmpty()) { $rows = $rows->groupBy('label_tree_id'); $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); diff --git a/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php index b7af4e284..26da4763c 100644 --- a/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php @@ -39,7 +39,7 @@ public function generateReport($path) { $rows = $this->query()->get(); - if ($this->shouldSeparateLabelTrees()) { + if ($this->shouldSeparateLabelTrees() && $rows->isNotEmpty()) { $rows = $rows->groupBy('label_tree_id'); $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); diff --git a/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php index bfb5c5001..361cc3466 100644 --- a/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php @@ -43,7 +43,7 @@ public function generateReport($path) $rows = $this->query()->get(); $toZip = []; - if ($this->shouldSeparateLabelTrees()) { + if ($this->shouldSeparateLabelTrees() && $rows->isNotEmpty()) { $rows = $rows->groupBy('label_tree_id'); $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); diff --git a/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php b/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php index 7d8cd5611..b7d7a00b6 100644 --- a/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php @@ -99,7 +99,7 @@ public function generateReport($path) $rows = $this->query()->get(); $toZip = []; - if ($this->shouldSeparateLabelTrees()) { + if ($this->shouldSeparateLabelTrees() && $rows->isNotEmpty()) { $rows = $rows->groupBy('label_tree_id'); $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); diff --git a/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php b/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php index 4feb6ee28..dbae455b0 100644 --- a/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php @@ -43,7 +43,7 @@ public function generateReport($path) $rows = $this->query()->get(); $toZip = []; - if ($this->shouldSeparateLabelTrees()) { + if ($this->shouldSeparateLabelTrees() && $rows->isNotEmpty()) { $rows = $rows->groupBy('label_tree_id'); $trees = LabelTree::whereIn('id', $rows->keys())->pluck('name', 'id'); From 1c1ed4889c8faab6918d2121b251e77052734277 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 21 Sep 2020 09:27:42 +0200 Subject: [PATCH 232/407] Fix vulnerable dependency --- package-lock.json | 1683 ++++++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 881 insertions(+), 804 deletions(-) diff --git a/package-lock.json b/package-lock.json index a1eba8c60..04de99d41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,9 +14,9 @@ } }, "@babel/compat-data": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.3.tgz", - "integrity": "sha512-BDIfJ9uNZuI0LajPfoYV28lX8kyCPMHY6uY4WH1lJdcicmAfxCK5ASzaeV0D/wsUaRH/cLk+amuxtC37sZ8TUg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", + "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", "dev": true, "requires": { "browserslist": "^4.12.0", @@ -25,67 +25,94 @@ } }, "@babel/core": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.3.tgz", - "integrity": "sha512-5YqWxYE3pyhIi84L84YcwjeEgS+fa7ZjK6IBVGTjDVfm64njkR2lfDhVR5OudLk8x2GK59YoSyVv+L/03k1q9w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.3", - "@babel/generator": "^7.10.3", - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helpers": "^7.10.1", - "@babel/parser": "^7.10.3", - "@babel/template": "^7.10.3", - "@babel/traverse": "^7.10.3", - "@babel/types": "^7.10.3", + "version": "7.11.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", + "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.6", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.5", + "@babel/types": "^7.11.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", - "lodash": "^4.17.13", + "lodash": "^4.17.19", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + } } }, "@babel/generator": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz", - "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==", + "version": "7.11.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", + "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", "dev": true, "requires": { - "@babel/types": "^7.10.3", + "@babel/types": "^7.11.5", "jsesc": "^2.5.1", - "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.1.tgz", - "integrity": "sha512-ewp3rvJEwLaHgyWGe4wQssC2vjks3E80WiUe2BpMb0KhreTjMROCbxXcEovTrbeGVdQct5VjQfrv9EgC+xMzCw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", "dev": true, "requires": { - "@babel/types": "^7.10.1" + "@babel/types": "^7.10.4" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.3.tgz", - "integrity": "sha512-lo4XXRnBlU6eRM92FkiZxpo1xFLmv3VsPFk61zJKMm7XYJfwqXHsYJTY6agoc4a3L8QPw1HqWehO18coZgbT6A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.3", - "@babel/types": "^7.10.3" + "@babel/helper-explode-assignable-expression": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-compilation-targets": { - "version": "7.10.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz", - "integrity": "sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", + "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.10.1", + "@babel/compat-data": "^7.10.4", "browserslist": "^4.12.0", "invariant": "^2.2.4", "levenary": "^1.1.1", @@ -93,179 +120,186 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.3.tgz", - "integrity": "sha512-iRT9VwqtdFmv7UheJWthGc/h2s7MqoweBF9RUj77NFZsg9VfISvBTum3k6coAhJ8RWv2tj3yUjA03HxPd0vfpQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", + "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.3", - "@babel/helper-member-expression-to-functions": "^7.10.3", - "@babel/helper-optimise-call-expression": "^7.10.3", - "@babel/helper-plugin-utils": "^7.10.3", - "@babel/helper-replace-supers": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-member-expression-to-functions": "^7.10.5", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.1.tgz", - "integrity": "sha512-Rx4rHS0pVuJn5pJOqaqcZR4XSgeF9G/pO/79t+4r7380tXFJdzImFnxMU19f83wjSrmKHq6myrM10pFHTGzkUA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", + "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.1", - "@babel/helper-regex": "^7.10.1", + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-regex": "^7.10.4", "regexpu-core": "^4.7.0" } }, "@babel/helper-define-map": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.3.tgz", - "integrity": "sha512-bxRzDi4Sin/k0drWCczppOhov1sBSdBvXJObM1NLHQzjhXhwRtn7aRWGvLJWCYbuu2qUk3EKs6Ci9C9ps8XokQ==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.3", - "@babel/types": "^7.10.3", - "lodash": "^4.17.13" + "@babel/helper-function-name": "^7.10.4", + "@babel/types": "^7.10.5", + "lodash": "^4.17.19" } }, "@babel/helper-explode-assignable-expression": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.3.tgz", - "integrity": "sha512-0nKcR64XrOC3lsl+uhD15cwxPvaB6QKUDlD84OT9C3myRbhJqTMYir69/RWItUvHpharv0eJ/wk7fl34ONSwZw==", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz", + "integrity": "sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ==", "dev": true, "requires": { - "@babel/traverse": "^7.10.3", - "@babel/types": "^7.10.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-function-name": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz", - "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.3", - "@babel/template": "^7.10.3", - "@babel/types": "^7.10.3" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-get-function-arity": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz", - "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", "dev": true, "requires": { - "@babel/types": "^7.10.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-hoist-variables": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.3.tgz", - "integrity": "sha512-9JyafKoBt5h20Yv1+BXQMdcXXavozI1vt401KBiRc2qzUepbVnd7ogVNymY1xkQN9fekGwfxtotH2Yf5xsGzgg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", "dev": true, "requires": { - "@babel/types": "^7.10.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.3.tgz", - "integrity": "sha512-q7+37c4EPLSjNb2NmWOjNwj0+BOyYlssuQ58kHEWk1Z78K5i8vTUsteq78HMieRPQSl/NtpQyJfdjt3qZ5V2vw==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", + "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", "dev": true, "requires": { - "@babel/types": "^7.10.3" + "@babel/types": "^7.11.0" } }, "@babel/helper-module-imports": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.3.tgz", - "integrity": "sha512-Jtqw5M9pahLSUWA+76nhK9OG8nwYXzhQzVIGFoNaHnXF/r4l7kz4Fl0UAW7B6mqC5myoJiBP5/YQlXQTMfHI9w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", + "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", "dev": true, "requires": { - "@babel/types": "^7.10.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-module-transforms": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.1.tgz", - "integrity": "sha512-RLHRCAzyJe7Q7sF4oy2cB+kRnU4wDZY/H2xJFGof+M+SJEGhZsb+GFj5j1AD8NiSaVBJ+Pf0/WObiXu/zxWpFg==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", + "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.1", - "@babel/helper-replace-supers": "^7.10.1", - "@babel/helper-simple-access": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1", - "lodash": "^4.17.13" + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/template": "^7.10.4", + "@babel/types": "^7.11.0", + "lodash": "^4.17.19" } }, "@babel/helper-optimise-call-expression": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz", - "integrity": "sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", "dev": true, "requires": { - "@babel/types": "^7.10.3" + "@babel/types": "^7.10.4" } }, "@babel/helper-plugin-utils": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz", - "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", "dev": true }, "@babel/helper-regex": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.1.tgz", - "integrity": "sha512-7isHr19RsIJWWLLFn21ubFt223PjQyg1HY7CZEMRr820HttHPpVvrsIN3bUOo44DEfFV4kBXO7Abbn9KTUZV7g==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", "dev": true, "requires": { - "lodash": "^4.17.13" + "lodash": "^4.17.19" } }, "@babel/helper-remap-async-to-generator": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.3.tgz", - "integrity": "sha512-sLB7666ARbJUGDO60ZormmhQOyqMX/shKBXZ7fy937s+3ID8gSrneMvKSSb+8xIM5V7Vn6uNVtOY1vIm26XLtA==", + "version": "7.11.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz", + "integrity": "sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.1", - "@babel/helper-wrap-function": "^7.10.1", - "@babel/template": "^7.10.3", - "@babel/traverse": "^7.10.3", - "@babel/types": "^7.10.3" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-wrap-function": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-replace-supers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.1.tgz", - "integrity": "sha512-SOwJzEfpuQwInzzQJGjGaiG578UYmyi2Xw668klPWV5n07B73S0a9btjLk/52Mlcxa+5AdIYqws1KyXRfMoB7A==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", + "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.1", - "@babel/helper-optimise-call-expression": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" + "@babel/helper-member-expression-to-functions": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helper-simple-access": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.1.tgz", - "integrity": "sha512-VSWpWzRzn9VtgMJBIWTZ+GP107kZdQ4YplJlCmIrjoLVSi/0upixezHCDG8kpPVTBJpKfxTH01wDhh+jS2zKbw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", + "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", "dev": true, "requires": { - "@babel/template": "^7.10.1", - "@babel/types": "^7.10.1" + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", + "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.1.tgz", - "integrity": "sha512-UQ1LVBPrYdbchNhLwj6fetj46BcFwfS4NllJo/1aJsT+1dLTEnXJL0qHqtY7gPzF8S2fXBJamf1biAXV3X077g==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", "dev": true, "requires": { - "@babel/types": "^7.10.1" + "@babel/types": "^7.11.0" } }, "@babel/helper-validator-identifier": { @@ -275,26 +309,26 @@ "dev": true }, "@babel/helper-wrap-function": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.1.tgz", - "integrity": "sha512-C0MzRGteVDn+H32/ZgbAv5r56f2o1fZSA/rj/TYo8JEJNHg+9BdSmKBUND0shxWRztWhjlT2cvHYuynpPsVJwQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", + "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.1", - "@babel/template": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" + "@babel/helper-function-name": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/helpers": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.1.tgz", - "integrity": "sha512-muQNHF+IdU6wGgkaJyhhEmI54MOZBKsFfsXFhboz1ybwJ1Kl7IHlbm2a++4jwrmY5UYsgitt5lfqo1wMFcHmyw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", + "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", "dev": true, "requires": { - "@babel/template": "^7.10.1", - "@babel/traverse": "^7.10.1", - "@babel/types": "^7.10.1" + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.10.4", + "@babel/types": "^7.10.4" } }, "@babel/highlight": { @@ -309,121 +343,142 @@ } }, "@babel/parser": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz", - "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", + "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.3.tgz", - "integrity": "sha512-WUUWM7YTOudF4jZBAJIW9D7aViYC/Fn0Pln4RIHlQALyno3sXSjqmTA4Zy1TKC2D49RCR8Y/Pn4OIUtEypK3CA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", + "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.3", - "@babel/helper-remap-async-to-generator": "^7.10.3", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4", "@babel/plugin-syntax-async-generators": "^7.8.0" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.1.tgz", - "integrity": "sha512-sqdGWgoXlnOdgMXU+9MbhzwFRgxVLeiGBqTrnuS7LC2IBU31wSsESbTUreT2O418obpfPdGUR2GbEufZF1bpqw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", + "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.1.tgz", - "integrity": "sha512-Cpc2yUVHTEGPlmiQzXj026kqwjEQAD9I4ZC16uzdbgWgitg/UHKHLffKNCQZ5+y8jpIZPJcKcwsr2HwPh+w3XA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", + "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-dynamic-import": "^7.8.0" } }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", + "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, "@babel/plugin-proposal-json-strings": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.1.tgz", - "integrity": "sha512-m8r5BmV+ZLpWPtMY2mOKN7wre6HIO4gfIiV+eOmsnZABNenrt/kzYBwrh+KOfgumSWpnlGs5F70J8afYMSJMBg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", + "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.0" } }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", + "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.1.tgz", - "integrity": "sha512-56cI/uHYgL2C8HVuHOuvVowihhX0sxb3nnfVRzUeVHTWmRHTZrKuAh/OBIMggGU/S1g/1D2CRCXqP+3u7vX7iA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", + "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.1.tgz", - "integrity": "sha512-jjfym4N9HtCiNfyyLAVD8WqPYeHUrw4ihxuAynWj6zzp2gf9Ey2f7ImhFm6ikB3CLf5Z/zmcJDri6B4+9j9RsA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", + "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/plugin-syntax-numeric-separator": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.3.tgz", - "integrity": "sha512-ZZh5leCIlH9lni5bU/wB/UcjtcVLgR8gc+FAgW2OOY+m9h1II3ItTO1/cewNUcsIDZSYcSaz/rYVls+Fb0ExVQ==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", + "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.3", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.1" + "@babel/plugin-transform-parameters": "^7.10.4" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.1.tgz", - "integrity": "sha512-VqExgeE62YBqI3ogkGoOJp1R6u12DFZjqwJhqtKc2o5m1YTUuUWnos7bZQFBhwkxIFpWYJ7uB75U7VAPPiKETA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", + "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1", + "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.3.tgz", - "integrity": "sha512-yyG3n9dJ1vZ6v5sfmIlMMZ8azQoqx/5/nZTSWX1td6L1H1bsjzA8TInDChpafCZiJkeOFzp/PtrfigAQXxI1Ng==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", + "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.3", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.1.tgz", - "integrity": "sha512-RZecFFJjDiQ2z6maFprLgrdnm0OzoC23Mx89xf1CcEsxmHuzuXOdniEuI+S3v7vjQG4F5sa6YtUp+19sZuSxHg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", + "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.1.tgz", - "integrity": "sha512-JjfngYRvwmPwmnbRZyNiPFI8zxCZb8euzbCG/LxyKdeTb59tVciKo9GK9bi6JYKInk1H11Dq9j/zRqIH4KigfQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", + "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-async-generators": { @@ -436,12 +491,12 @@ } }, "@babel/plugin-syntax-class-properties": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.1.tgz", - "integrity": "sha512-Gf2Yx/iRs1JREDtVZ56OrjjgFHCaldpTnuy9BHla10qyVT3YkIIGEtoDWhyop0ksu1GvNjHIoYRBqm3zoR1jyQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", + "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-dynamic-import": { @@ -453,6 +508,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, "@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", @@ -462,6 +526,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, "@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", @@ -472,12 +545,12 @@ } }, "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.1.tgz", - "integrity": "sha512-uTd0OsHrpe3tH5gRPTxG8Voh99/WCU78vIm5NMRYPAqC8lR4vajt6KkCAknCHrx24vkPdd/05yfdGSB4EIY2mg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-syntax-object-rest-spread": { @@ -508,406 +581,410 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.1.tgz", - "integrity": "sha512-hgA5RYkmZm8FTFT3yu2N9Bx7yVVOKYT6yEdXXo6j2JTm0wNxgqaGeQVaSHRjhfnQbX91DtjFB6McRFSlcJH3xQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", + "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.1.tgz", - "integrity": "sha512-6AZHgFJKP3DJX0eCNJj01RpytUa3SOGawIxweHkNX2L6PYikOZmoh5B0d7hIHaIgveMjX990IAa/xK7jRTN8OA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", + "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.1.tgz", - "integrity": "sha512-XCgYjJ8TY2slj6SReBUyamJn3k2JLUIiiR5b6t1mNCMSvv7yx+jJpaewakikp0uWFQSF7ChPPoe3dHmXLpISkg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", + "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-remap-async-to-generator": "^7.10.1" + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.10.4" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.1.tgz", - "integrity": "sha512-B7K15Xp8lv0sOJrdVAoukKlxP9N59HS48V1J3U/JGj+Ad+MHq+am6xJVs85AgXrQn4LV8vaYFOB+pr/yIuzW8Q==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", + "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.1.tgz", - "integrity": "sha512-8bpWG6TtF5akdhIm/uWTyjHqENpy13Fx8chg7pFH875aNLwX8JxIxqm08gmAT+Whe6AOmaTeLPe7dpLbXt+xUw==", + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz", + "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "lodash": "^4.17.13" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-classes": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.3.tgz", - "integrity": "sha512-irEX0ChJLaZVC7FvvRoSIxJlmk0IczFLcwaRXUArBKYHCHbOhe57aG8q3uw/fJsoSXvZhjRX960hyeAGlVBXZw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.1", - "@babel/helper-define-map": "^7.10.3", - "@babel/helper-function-name": "^7.10.3", - "@babel/helper-optimise-call-expression": "^7.10.3", - "@babel/helper-plugin-utils": "^7.10.3", - "@babel/helper-replace-supers": "^7.10.1", - "@babel/helper-split-export-declaration": "^7.10.1", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", + "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-define-map": "^7.10.4", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-optimise-call-expression": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.10.4", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.3.tgz", - "integrity": "sha512-GWzhaBOsdbjVFav96drOz7FzrcEW6AP5nax0gLIpstiFaI3LOb2tAg06TimaWU6YKOfUACK3FVrxPJ4GSc5TgA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", + "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.3" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-destructuring": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.1.tgz", - "integrity": "sha512-V/nUc4yGWG71OhaTH705pU8ZSdM6c1KmmLP8ys59oOYbT7RpMYAR3MsVOt6OHL0WzG7BlTU076va9fjJyYzJMA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", + "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.1.tgz", - "integrity": "sha512-19VIMsD1dp02RvduFUmfzj8uknaO3uiHHF0s3E1OHnVsNj8oge8EQ5RzHRbJjGSetRnkEuBYO7TG1M5kKjGLOA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", + "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.1.tgz", - "integrity": "sha512-wIEpkX4QvX8Mo9W6XF3EdGttrIPZWozHfEaDTU0WJD/TDnXMvdDh30mzUl/9qWhnf7naicYartcEfUghTCSNpA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", + "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.1.tgz", - "integrity": "sha512-lr/przdAbpEA2BUzRvjXdEDLrArGRRPwbaF9rvayuHRvdQ7lUTTkZnhZrJ4LE2jvgMRFF4f0YuPQ20vhiPYxtA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", + "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-for-of": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.1.tgz", - "integrity": "sha512-US8KCuxfQcn0LwSCMWMma8M2R5mAjJGsmoCBVwlMygvmDUMkTCykc84IqN1M7t+agSfOmLYTInLCHJM+RUoz+w==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", + "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-function-name": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.1.tgz", - "integrity": "sha512-//bsKsKFBJfGd65qSNNh1exBy5Y9gD9ZN+DvrJ8f7HXr4avE5POW6zB7Rj6VnqHV33+0vXWUwJT0wSHubiAQkw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", + "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-literals": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.1.tgz", - "integrity": "sha512-qi0+5qgevz1NHLZroObRm5A+8JJtibb7vdcPQF1KQE12+Y/xxl8coJ+TpPW9iRq+Mhw/NKLjm+5SHtAHCC7lAw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", + "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.1.tgz", - "integrity": "sha512-UmaWhDokOFT2GcgU6MkHC11i0NQcL63iqeufXWfRy6pUOGYeCGEKhvfFO6Vz70UfYJYHwveg62GS83Rvpxn+NA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", + "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.1.tgz", - "integrity": "sha512-31+hnWSFRI4/ACFr1qkboBbrTxoBIzj7qA69qlq8HY8p7+YCzkCT6/TvQ1a4B0z27VeWtAeJd6pr5G04dc1iHw==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", + "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.1.tgz", - "integrity": "sha512-AQG4fc3KOah0vdITwt7Gi6hD9BtQP/8bhem7OjbaMoRNCH5Djx42O2vYMfau7QnAzQCa+RJnhJBmFFMGpQEzrg==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", + "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-simple-access": "^7.10.1", + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-simple-access": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.3.tgz", - "integrity": "sha512-GWXWQMmE1GH4ALc7YXW56BTh/AlzvDWhUNn9ArFF0+Cz5G8esYlVbXfdyHa1xaD1j+GnBoCeoQNlwtZTVdiG/A==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", + "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.10.3", - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.3", + "@babel/helper-hoist-variables": "^7.10.4", + "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-plugin-utils": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.1.tgz", - "integrity": "sha512-EIuiRNMd6GB6ulcYlETnYYfgv4AxqrswghmBRQbWLHZxN4s7mupxzglnHqk9ZiUpDI4eRWewedJJNj67PWOXKA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", + "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.3.tgz", - "integrity": "sha512-I3EH+RMFyVi8Iy/LekQm948Z4Lz4yKT7rK+vuCAeRm0kTa6Z5W7xuhRxDNJv0FPya/her6AUgrDITb70YHtTvA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", + "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.8.3" + "@babel/helper-create-regexp-features-plugin": "^7.10.4" } }, "@babel/plugin-transform-new-target": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.1.tgz", - "integrity": "sha512-MBlzPc1nJvbmO9rPr1fQwXOM2iGut+JC92ku6PbiJMMK7SnQc1rytgpopveE3Evn47gzvGYeCdgfCDbZo0ecUw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", + "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-object-super": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.1.tgz", - "integrity": "sha512-WnnStUDN5GL+wGQrJylrnnVlFhFmeArINIR9gjhSeYyvroGhBrSAXYg/RHsnfzmsa+onJrTJrEClPzgNmmQ4Gw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", + "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-replace-supers": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-replace-supers": "^7.10.4" } }, "@babel/plugin-transform-parameters": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.1.tgz", - "integrity": "sha512-tJ1T0n6g4dXMsL45YsSzzSDZCxiHXAQp/qHrucOq5gEHncTA3xDxnd5+sZcoQp+N1ZbieAaB8r/VUCG0gqseOg==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", + "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-property-literals": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.1.tgz", - "integrity": "sha512-Kr6+mgag8auNrgEpbfIWzdXYOvqDHZOF0+Bx2xh4H2EDNwcbRb9lY6nkZg8oSjsX+DH9Ebxm9hOqtKW+gRDeNA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", + "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-regenerator": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.3.tgz", - "integrity": "sha512-H5kNeW0u8mbk0qa1jVIVTeJJL6/TJ81ltD4oyPx0P499DhMJrTmmIFCmJ3QloGpQG8K9symccB7S7SJpCKLwtw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", + "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", "dev": true, "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.1.tgz", - "integrity": "sha512-qN1OMoE2nuqSPmpTqEM7OvJ1FkMEV+BjVeZZm9V9mq/x1JLKQ4pcv8riZJMNN3u2AUGl0ouOMjRr2siecvHqUQ==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", + "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-runtime": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.10.3.tgz", - "integrity": "sha512-b5OzMD1Hi8BBzgQdRHyVVaYrk9zG0wset1it2o3BgonkPadXfOv0aXRqd7864DeOIu3FGKP/h6lr15FE5mahVw==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.5.tgz", + "integrity": "sha512-9aIoee+EhjySZ6vY5hnLjigHzunBlscx9ANKutkeWTJTx6m5Rbq6Ic01tLvO54lSusR+BxV7u4UDdCmXv5aagg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.3", - "@babel/helper-plugin-utils": "^7.10.3", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", "resolve": "^1.8.1", "semver": "^5.5.1" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.1.tgz", - "integrity": "sha512-AR0E/lZMfLstScFwztApGeyTHJ5u3JUKMjneqRItWeEqDdHWZwAOKycvQNCasCK/3r5YXsuNG25funcJDu7Y2g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", + "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-spread": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.1.tgz", - "integrity": "sha512-8wTPym6edIrClW8FI2IoaePB91ETOtg36dOkj3bYcNe7aDMN2FXEoUa+WrmPc4xa1u2PQK46fUX2aCb+zo9rfw==", + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", + "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.1.tgz", - "integrity": "sha512-j17ojftKjrL7ufX8ajKvwRilwqTok4q+BjkknmQw9VNHnItTyMP5anPFzxFJdCQs7clLcWpCV3ma+6qZWLnGMA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", + "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1", - "@babel/helper-regex": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-regex": "^7.10.4" } }, "@babel/plugin-transform-template-literals": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.3.tgz", - "integrity": "sha512-yaBn9OpxQra/bk0/CaA4wr41O0/Whkg6nqjqApcinxM7pro51ojhX6fv1pimAnVjVfDy14K0ULoRL70CA9jWWA==", + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", + "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.3" + "@babel/helper-annotate-as-pure": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.1.tgz", - "integrity": "sha512-qX8KZcmbvA23zDi+lk9s6hC1FM7jgLHYIjuLgULgc8QtYnmB3tAVIYkNoKRQ75qWBeyzcoMoK8ZQmogGtC/w0g==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", + "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.1.tgz", - "integrity": "sha512-zZ0Poh/yy1d4jeDWpx/mNwbKJVwUYJX73q+gyh4bwtG0/iUlzdEu0sLMda8yuDFS6LBQlT/ST1SJAR6zYwXWgw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", + "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.10.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.1.tgz", - "integrity": "sha512-Y/2a2W299k0VIUdbqYm9X2qS6fE0CUBhhiPpimK6byy7OJ/kORLlIX+J6UrjgNu5awvs62k+6RSslxhcvVw2Tw==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", + "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.1", - "@babel/helper-plugin-utils": "^7.10.1" + "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/preset-env": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.3.tgz", - "integrity": "sha512-jHaSUgiewTmly88bJtMHbOd1bJf2ocYxb5BWKSDQIP5tmgFuS/n0gl+nhSrYDhT33m0vPxp+rP8oYYgPgMNQlg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.10.3", - "@babel/helper-compilation-targets": "^7.10.2", - "@babel/helper-module-imports": "^7.10.3", - "@babel/helper-plugin-utils": "^7.10.3", - "@babel/plugin-proposal-async-generator-functions": "^7.10.3", - "@babel/plugin-proposal-class-properties": "^7.10.1", - "@babel/plugin-proposal-dynamic-import": "^7.10.1", - "@babel/plugin-proposal-json-strings": "^7.10.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1", - "@babel/plugin-proposal-numeric-separator": "^7.10.1", - "@babel/plugin-proposal-object-rest-spread": "^7.10.3", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.1", - "@babel/plugin-proposal-optional-chaining": "^7.10.3", - "@babel/plugin-proposal-private-methods": "^7.10.1", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.1", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.5.tgz", + "integrity": "sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.11.0", + "@babel/helper-compilation-targets": "^7.10.4", + "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-proposal-async-generator-functions": "^7.10.4", + "@babel/plugin-proposal-class-properties": "^7.10.4", + "@babel/plugin-proposal-dynamic-import": "^7.10.4", + "@babel/plugin-proposal-export-namespace-from": "^7.10.4", + "@babel/plugin-proposal-json-strings": "^7.10.4", + "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", + "@babel/plugin-proposal-numeric-separator": "^7.10.4", + "@babel/plugin-proposal-object-rest-spread": "^7.11.0", + "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", + "@babel/plugin-proposal-optional-chaining": "^7.11.0", + "@babel/plugin-proposal-private-methods": "^7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.1", + "@babel/plugin-syntax-class-properties": "^7.10.4", "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.1", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.1", - "@babel/plugin-transform-arrow-functions": "^7.10.1", - "@babel/plugin-transform-async-to-generator": "^7.10.1", - "@babel/plugin-transform-block-scoped-functions": "^7.10.1", - "@babel/plugin-transform-block-scoping": "^7.10.1", - "@babel/plugin-transform-classes": "^7.10.3", - "@babel/plugin-transform-computed-properties": "^7.10.3", - "@babel/plugin-transform-destructuring": "^7.10.1", - "@babel/plugin-transform-dotall-regex": "^7.10.1", - "@babel/plugin-transform-duplicate-keys": "^7.10.1", - "@babel/plugin-transform-exponentiation-operator": "^7.10.1", - "@babel/plugin-transform-for-of": "^7.10.1", - "@babel/plugin-transform-function-name": "^7.10.1", - "@babel/plugin-transform-literals": "^7.10.1", - "@babel/plugin-transform-member-expression-literals": "^7.10.1", - "@babel/plugin-transform-modules-amd": "^7.10.1", - "@babel/plugin-transform-modules-commonjs": "^7.10.1", - "@babel/plugin-transform-modules-systemjs": "^7.10.3", - "@babel/plugin-transform-modules-umd": "^7.10.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.3", - "@babel/plugin-transform-new-target": "^7.10.1", - "@babel/plugin-transform-object-super": "^7.10.1", - "@babel/plugin-transform-parameters": "^7.10.1", - "@babel/plugin-transform-property-literals": "^7.10.1", - "@babel/plugin-transform-regenerator": "^7.10.3", - "@babel/plugin-transform-reserved-words": "^7.10.1", - "@babel/plugin-transform-shorthand-properties": "^7.10.1", - "@babel/plugin-transform-spread": "^7.10.1", - "@babel/plugin-transform-sticky-regex": "^7.10.1", - "@babel/plugin-transform-template-literals": "^7.10.3", - "@babel/plugin-transform-typeof-symbol": "^7.10.1", - "@babel/plugin-transform-unicode-escapes": "^7.10.1", - "@babel/plugin-transform-unicode-regex": "^7.10.1", + "@babel/plugin-syntax-top-level-await": "^7.10.4", + "@babel/plugin-transform-arrow-functions": "^7.10.4", + "@babel/plugin-transform-async-to-generator": "^7.10.4", + "@babel/plugin-transform-block-scoped-functions": "^7.10.4", + "@babel/plugin-transform-block-scoping": "^7.10.4", + "@babel/plugin-transform-classes": "^7.10.4", + "@babel/plugin-transform-computed-properties": "^7.10.4", + "@babel/plugin-transform-destructuring": "^7.10.4", + "@babel/plugin-transform-dotall-regex": "^7.10.4", + "@babel/plugin-transform-duplicate-keys": "^7.10.4", + "@babel/plugin-transform-exponentiation-operator": "^7.10.4", + "@babel/plugin-transform-for-of": "^7.10.4", + "@babel/plugin-transform-function-name": "^7.10.4", + "@babel/plugin-transform-literals": "^7.10.4", + "@babel/plugin-transform-member-expression-literals": "^7.10.4", + "@babel/plugin-transform-modules-amd": "^7.10.4", + "@babel/plugin-transform-modules-commonjs": "^7.10.4", + "@babel/plugin-transform-modules-systemjs": "^7.10.4", + "@babel/plugin-transform-modules-umd": "^7.10.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", + "@babel/plugin-transform-new-target": "^7.10.4", + "@babel/plugin-transform-object-super": "^7.10.4", + "@babel/plugin-transform-parameters": "^7.10.4", + "@babel/plugin-transform-property-literals": "^7.10.4", + "@babel/plugin-transform-regenerator": "^7.10.4", + "@babel/plugin-transform-reserved-words": "^7.10.4", + "@babel/plugin-transform-shorthand-properties": "^7.10.4", + "@babel/plugin-transform-spread": "^7.11.0", + "@babel/plugin-transform-sticky-regex": "^7.10.4", + "@babel/plugin-transform-template-literals": "^7.10.4", + "@babel/plugin-transform-typeof-symbol": "^7.10.4", + "@babel/plugin-transform-unicode-escapes": "^7.10.4", + "@babel/plugin-transform-unicode-regex": "^7.10.4", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.10.3", + "@babel/types": "^7.11.5", "browserslist": "^4.12.0", "core-js-compat": "^3.6.2", "invariant": "^2.2.2", @@ -916,9 +993,9 @@ } }, "@babel/preset-modules": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", - "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -929,51 +1006,115 @@ } }, "@babel/runtime": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.3.tgz", - "integrity": "sha512-RzGO0RLSdokm9Ipe/YD+7ww8X2Ro79qiXZF3HU9ljrM+qnJmH1Vqth+hbiQZy761LnMJTMitHDuKVYTk3k4dLw==", + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", + "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz", - "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==", + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.3", - "@babel/parser": "^7.10.3", - "@babel/types": "^7.10.3" + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.10.4", + "@babel/types": "^7.10.4" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + } } }, "@babel/traverse": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz", - "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", + "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.3", - "@babel/generator": "^7.10.3", - "@babel/helper-function-name": "^7.10.3", - "@babel/helper-split-export-declaration": "^7.10.1", - "@babel/parser": "^7.10.3", - "@babel/types": "^7.10.3", + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.11.5", + "@babel/types": "^7.11.5", "debug": "^4.1.0", "globals": "^11.1.0", - "lodash": "^4.17.13" + "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + } } }, "@babel/types": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz", - "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==", + "version": "7.11.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", + "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.3", - "lodash": "^4.17.13", + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + } } }, "@biigle/ol": { @@ -1207,9 +1348,9 @@ "dev": true }, "@types/glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "dev": true, "requires": { "@types/minimatch": "*", @@ -1229,9 +1370,9 @@ "dev": true }, "@types/node": { - "version": "14.0.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.14.tgz", - "integrity": "sha512-syUgf67ZQpaJj01/tRTknkMNoBBLWJOBODF0Zm4NrXmiSuxjymFrxnTu1QVYRubhVkRcZLYZG8STTwJRdVm/WQ==", + "version": "14.11.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.1.tgz", + "integrity": "sha512-oTQgnd0hblfLsJ6BvJzzSL+Inogp3lq9fGgqRkMB/ziKMgEUaFl801OncOzUmalfzt14N0oPHMK47ipl+wbTIw==", "dev": true }, "@types/q": { @@ -1241,9 +1382,9 @@ "dev": true }, "@vue/component-compiler-utils": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.1.2.tgz", - "integrity": "sha512-QLq9z8m79mCinpaEeSURhnNCN6djxpHw0lpP/bodMlt5kALfONpryMthvnrQOlTcIKoF+VoPi+lPHUYeDFPXug==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz", + "integrity": "sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==", "dev": true, "requires": { "consolidate": "^0.15.1", @@ -1562,9 +1703,9 @@ } }, "aggregate-error": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", - "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "requires": { "clean-stack": "^2.0.0", @@ -1722,14 +1863,15 @@ "dev": true }, "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "requires": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" }, "dependencies": { "bn.js": { @@ -1813,14 +1955,14 @@ "dev": true }, "autoprefixer": { - "version": "9.8.4", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.4.tgz", - "integrity": "sha512-84aYfXlpUe45lvmS+HoAWKCkirI/sw4JK0/bTeeqgHYco3dcsOn0NqdejISjptsYwNji/21dnkDri9PsYKk89A==", + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", "dev": true, "requires": { "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001087", - "colorette": "^1.2.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", "normalize-range": "^0.1.2", "num2fraction": "^1.2.2", "postcss": "^7.0.32", @@ -2006,9 +2148,9 @@ "dev": true }, "bn.js": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz", - "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", "dev": true }, "body-parser": { @@ -2179,16 +2321,16 @@ } }, "browserify-sign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz", - "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, "requires": { "bn.js": "^5.1.1", "browserify-rsa": "^4.0.1", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.2", + "elliptic": "^6.5.3", "inherits": "^2.0.4", "parse-asn1": "^5.1.5", "readable-stream": "^3.6.0", @@ -2224,15 +2366,15 @@ } }, "browserslist": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.1.tgz", - "integrity": "sha512-WMjXwFtPskSW1pQUDJRxvRKRkeCr7usN0O/Za76N+F4oadaTdQHotSGcX9jT/Hs7mSKPkyMFNvqawB/1HzYDKQ==", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.3.tgz", + "integrity": "sha512-GcZPC5+YqyPO4SFnz48/B0YaCwS47Q9iPChRGi6t7HhflKBcINzFrJvRfC+jp30sRMKxF+d4EHGs27Z0XP1NaQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001088", - "electron-to-chromium": "^1.3.481", - "escalade": "^3.0.1", - "node-releases": "^1.1.58" + "caniuse-lite": "^1.0.30001131", + "electron-to-chromium": "^1.3.570", + "escalade": "^3.1.0", + "node-releases": "^1.1.61" } }, "buffer": { @@ -2378,9 +2520,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001088", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001088.tgz", - "integrity": "sha512-6eYUrlShRYveyqKG58HcyOfPgh3zb2xqs7NvT2VVtP3hEUeeWvc3lqhpeMTxYWBBeeaT9A4bKsrtjATm66BTHg==", + "version": "1.0.30001133", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001133.tgz", + "integrity": "sha512-s3XAUFaC/ntDb1O3lcw9K8MPeOW7KO3z9+GzAoBxfz1B0VdacXPMKgFUtG4KIsgmnbexmi013s9miVu4h+qMHw==", "dev": true }, "chalk": { @@ -2552,16 +2694,10 @@ "q": "^1.1.2" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, "collect.js": { - "version": "4.27.3", - "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.27.3.tgz", - "integrity": "sha512-2nmoyhUJbhjVVE0W9W0cSBeg8/PL3ObGe1ijj9WDlLG3RrpvePsBZd6p3uTm1dTAUKJVd3qT8mnH6iXCdENEHQ==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.28.2.tgz", + "integrity": "sha512-Ok2z0kuyywWJ4AtkeUI61pbSxCmaN5XYr/fkUYJP4bYk6Dz3NKH2FA8RhF7i3Do9Iq80MLRFWasSOpyE9X7hDA==", "dev": true }, "collection-visit": { @@ -2610,15 +2746,15 @@ } }, "colorette": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.0.tgz", - "integrity": "sha512-soRSroY+OF/8OdA3PTQXwaDJeMc7TfknKKrxeSCencL2a4+Tx5zhxmmv7hdpCjhKBjehzp8+bwe/T68K0hpIjw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", "dev": true }, "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "commondir": { @@ -2683,6 +2819,15 @@ } } }, + "concat": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", + "integrity": "sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=", + "dev": true, + "requires": { + "commander": "^2.9.0" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2701,15 +2846,6 @@ "typedarray": "^0.0.6" } }, - "concatenate": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/concatenate/-/concatenate-0.0.2.tgz", - "integrity": "sha1-C0nW6MQQR9dyjNyNYqCGYjOXtJ8=", - "dev": true, - "requires": { - "globs": "^0.1.2" - } - }, "connect-history-api-fallback": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", @@ -2830,13 +2966,13 @@ } }, "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "requires": { "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "elliptic": "^6.5.3" }, "dependencies": { "bn.js": { @@ -3021,14 +3157,13 @@ "dev": true }, "css-selector-tokenizer": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz", - "integrity": "sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", "dev": true, "requires": { "cssesc": "^3.0.0", - "fastparse": "^1.1.2", - "regexpu-core": "^4.6.0" + "fastparse": "^1.1.2" } }, "css-tree": { @@ -3450,9 +3585,9 @@ }, "dependencies": { "domelementtype": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", - "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", + "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==", "dev": true } } @@ -3480,9 +3615,9 @@ } }, "dot-prop": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.2.0.tgz", - "integrity": "sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "requires": { "is-obj": "^2.0.0" @@ -3519,9 +3654,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.482", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.482.tgz", - "integrity": "sha512-iRK2JHR6Q3x20Pkl1Rf+gzalOwmVG+PF2J9BHiVOCPotloQmDSG6dT+Vtf2D+3JT3fpzoDNdtHgGuRO6OAUlhQ==", + "version": "1.3.570", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.570.tgz", + "integrity": "sha512-Y6OCoVQgFQBP5py6A/06+yWxUZHDlNr/gNDGatjH8AZqXl8X0tE4LfjLJsXGz/JmWJz8a6K7bR1k+QzZ+k//fg==", "dev": true }, "elliptic": { @@ -3575,9 +3710,9 @@ } }, "enhanced-resolve": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.2.0.tgz", - "integrity": "sha512-S7eiFb/erugyd1rLb6mQ3Vuq+EXHv5cpCkNqqIkYkBgN2QdFnyCZzFBleqwGEx4lgNGYij81BWnCrFNK7vxvjQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -3710,9 +3845,9 @@ } }, "escalade": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.1.tgz", - "integrity": "sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.0.tgz", + "integrity": "sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig==", "dev": true }, "escape-html": { @@ -4041,15 +4176,15 @@ "dev": true }, "eventemitter3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz", - "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "events": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", - "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", "dev": true }, "eventsource": { @@ -4564,9 +4699,9 @@ } }, "follow-redirects": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz", - "integrity": "sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", "dev": true }, "for-in": { @@ -4855,15 +4990,6 @@ } } }, - "globs": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globs/-/globs-0.1.4.tgz", - "integrity": "sha512-D23dWbOq48vlOraoSigbcQV4tWrnhwk+E/Um2cMuDS3/5dwGmdFeA7L/vAvDhLFlQOTDqHcXh35m/71g2A2WzQ==", - "dev": true, - "requires": { - "glob": "^7.1.1" - } - }, "graceful-fs": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", @@ -5082,6 +5208,14 @@ "param-case": "2.1.x", "relateurl": "0.2.x", "uglify-js": "3.4.x" + }, + "dependencies": { + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + } } }, "http-deceiver": { @@ -5234,9 +5368,9 @@ } }, "img-loader": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-3.0.1.tgz", - "integrity": "sha512-0jDJqexgzOuq3zlXwFTBKJlMcaP1uXyl5t4Qu6b1IgXb3IwBDjPfVylBC8vHFIIESDw/S+5QkBbtBrt4T8wESA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-3.0.2.tgz", + "integrity": "sha512-rSriLKgvi85Km7ppSF+AEAM3nU4fxpvCkaXtC/IoCEU7jfks55bEANFs0bB9YXYkxY9JurZQIZFtXh5Gue3upw==", "dev": true, "requires": { "loader-utils": "^1.1.0" @@ -5351,12 +5485,6 @@ "loose-envify": "^1.0.0" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", @@ -5669,9 +5797,9 @@ "dev": true }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -5764,9 +5892,9 @@ "dev": true }, "laravel-mix": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-5.0.4.tgz", - "integrity": "sha512-/fkcMdlxhGDBcH+kFDqKONlAfhJinMAWd+fjQ+VLii4UzIeXUF5Q8FbS4+ZrZs9JO3Y1E4KoNq3hMw0t/soahA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-5.0.5.tgz", + "integrity": "sha512-ruogwsrTsmUpZU9x1Whgxh+gcEB/6IFJlL+ZTSrYt1SXfOsi8BgMI2R9RWvQpOyR+40VYl7n7Gsr+sHjfFb90Q==", "dev": true, "requires": { "@babel/core": "^7.2.0", @@ -5781,7 +5909,7 @@ "chokidar": "^2.0.3", "clean-css": "^4.1.3", "collect.js": "^4.12.8", - "concatenate": "0.0.2", + "concat": "^1.0.3", "css-loader": "^1.0.1", "dotenv": "^6.2.0", "dotenv-expand": "^4.2.0", @@ -5806,7 +5934,7 @@ "webpack-dev-server": "^3.1.14", "webpack-merge": "^4.1.0", "webpack-notifier": "^1.5.1", - "yargs": "^12.0.5" + "yargs": "^15.4.1" } }, "laravel-mix-artisan-publish": { @@ -5827,15 +5955,6 @@ "webpack-sources": "^1.1.0" } }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -5918,9 +6037,9 @@ "dev": true }, "loglevel": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz", - "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", + "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==", "dev": true }, "loose-envify": { @@ -5965,15 +6084,6 @@ "semver": "^5.6.0" } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -6000,14 +6110,14 @@ } }, "md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "dev": true, "requires": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" } }, "md5.js": { @@ -6033,17 +6143,6 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -6155,12 +6254,6 @@ "mime-db": "1.44.0" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -6216,9 +6309,9 @@ } }, "minipass-pipeline": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.3.tgz", - "integrity": "sha512-cFOknTvng5vqnwOpDsZTWhNll6Jf8o2x+/diplafmxpuIymAjzoOolZG0VvQf3V2HgqzJNhnuKHYp2BqDgz8IQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, "requires": { "minipass": "^3.0.0" @@ -6369,9 +6462,9 @@ "dev": true }, "node-forge": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz", - "integrity": "sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", "dev": true }, "node-libs-browser": { @@ -6427,9 +6520,9 @@ } }, "node-releases": { - "version": "1.1.58", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.58.tgz", - "integrity": "sha512-NxBudgVKiRh/2aPWMgPR7bPTX0VPmGx5QBwCtdHitnqFE5/O8DeBXuIMH1nwNnw/aMo6AjOrpsHzfY3UbUJ7yg==", + "version": "1.1.61", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.61.tgz", + "integrity": "sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g==", "dev": true }, "normalize-path": { @@ -6474,12 +6567,6 @@ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", "dev": true }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6642,9 +6729,9 @@ } }, "optimize-css-assets-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz", + "integrity": "sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A==", "dev": true, "requires": { "cssnano": "^4.1.10", @@ -6680,35 +6767,12 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -6801,14 +6865,13 @@ } }, "parse-asn1": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", - "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "requires": { - "asn1.js": "^4.0.0", + "asn1.js": "^5.2.0", "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", "evp_bytestokey": "^1.0.0", "pbkdf2": "^3.0.3", "safe-buffer": "^5.1.1" @@ -6972,14 +7035,14 @@ } }, "portfinder": { - "version": "1.0.26", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", - "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, "requires": { "async": "^2.6.2", "debug": "^3.1.1", - "mkdirp": "^0.5.1" + "mkdirp": "^0.5.5" }, "dependencies": { "debug": { @@ -7000,9 +7063,9 @@ "dev": true }, "postcss": { - "version": "7.0.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", - "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "version": "7.0.34", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.34.tgz", + "integrity": "sha512-H/7V2VeNScX9KE83GDrDZNiGT1m2H+UTnlinIzhjlLX9hfMUn1mHNnGeX81a1c8JSBdBvqk7c2ZOG6ZPn5itGw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -7028,9 +7091,9 @@ } }, "postcss-calc": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.2.tgz", - "integrity": "sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.4.tgz", + "integrity": "sha512-0I79VRAd1UTkaHzY9w83P39YGO/M3bG7/tNLrHGEunBolfoGM0hSjrGvjoeaj0JE/zIw5GsI2KZ0UwDJqv5hjw==", "dev": true, "requires": { "postcss": "^7.0.27", @@ -7114,9 +7177,9 @@ } }, "postcss-load-config": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", - "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.1.tgz", + "integrity": "sha512-D2ENobdoZsW0+BHy4x1CAkXtbXtYWYRIxL/JbtRBqrRGOPtJ2zoga/bEZWhV/ShWB5saVxJMzbMdSyA/vv4tXw==", "dev": true, "requires": { "cosmiconfig": "^5.0.0", @@ -7813,9 +7876,9 @@ "dev": true }, "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, "quickselect": { @@ -7930,19 +7993,18 @@ } }, "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", "dev": true }, "regenerator-transform": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", - "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "dev": true, "requires": { - "@babel/runtime": "^7.8.4", - "private": "^0.1.8" + "@babel/runtime": "^7.8.4" } }, "regex-not": { @@ -7977,9 +8039,9 @@ "dev": true }, "regexpu-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", - "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "dev": true, "requires": { "regenerate": "^1.4.0", @@ -8350,12 +8412,12 @@ "dev": true }, "selfsigned": { - "version": "1.10.7", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz", - "integrity": "sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA==", + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", "dev": true, "requires": { - "node-forge": "0.9.0" + "node-forge": "^0.10.0" } }, "semver": { @@ -8411,9 +8473,9 @@ } }, "serialize-javascript": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz", - "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -9193,12 +9255,6 @@ "source-map-support": "~0.5.10" }, "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -9208,9 +9264,9 @@ } }, "terser-webpack-plugin": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.7.tgz", - "integrity": "sha512-xzYyaHUNhzgaAdBsXxk2Yvo/x1NJdslUaussK3fdpBbvttm1iIwU+c26dj9UxJcwk2c5UWt5F55MUTIA8BE7Dg==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz", + "integrity": "sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w==", "dev": true, "requires": { "cacache": "^13.0.1", @@ -9218,18 +9274,12 @@ "jest-worker": "^25.4.0", "p-limit": "^2.3.0", "schema-utils": "^2.6.6", - "serialize-javascript": "^3.1.0", + "serialize-javascript": "^4.0.0", "source-map": "^0.6.1", "terser": "^4.6.12", "webpack-sources": "^1.4.3" }, "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "find-cache-dir": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", @@ -9856,12 +9906,12 @@ "dev": true }, "watchpack": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz", - "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", "dev": true, "requires": { - "chokidar": "^3.4.0", + "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0", "watchpack-chokidar2": "^2.0.0" @@ -9879,9 +9929,9 @@ } }, "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", "dev": true, "optional": true }, @@ -9896,9 +9946,9 @@ } }, "chokidar": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz", - "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", + "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", "dev": true, "optional": true, "requires": { @@ -9998,9 +10048,9 @@ } }, "webpack": { - "version": "4.43.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz", - "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==", + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", + "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", "dev": true, "requires": { "@webassemblyjs/ast": "1.9.0", @@ -10011,7 +10061,7 @@ "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.1.0", + "enhanced-resolve": "^4.3.0", "eslint-scope": "^4.0.3", "json-parse-better-errors": "^1.0.2", "loader-runner": "^2.4.0", @@ -10024,7 +10074,7 @@ "schema-utils": "^1.0.0", "tapable": "^1.1.3", "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.6.1", + "watchpack": "^1.7.4", "webpack-sources": "^1.4.1" }, "dependencies": { @@ -10051,12 +10101,6 @@ "y18n": "^4.0.0" } }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -10095,16 +10139,16 @@ } }, "terser-webpack-plugin": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz", - "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", "dev": true, "requires": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", "is-wsl": "^1.1.0", "schema-utils": "^1.0.0", - "serialize-javascript": "^3.1.0", + "serialize-javascript": "^4.0.0", "source-map": "^0.6.1", "terser": "^4.1.2", "webpack-sources": "^1.4.0", @@ -10504,114 +10548,147 @@ "dev": true }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, "requires": { - "cliui": "^4.0.0", + "cliui": "^6.0.0", "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^4.2.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "color-name": "~1.1.4" } }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "p-locate": "^4.1.0" } }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^5.0.0" } }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", diff --git a/package.json b/package.json index 648d9b1a7..822f45c09 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "cross-env": "^5.1", "eslint": "^7.3.1", "eslint-plugin-vue": "^6.2.2", - "laravel-mix": "^5.0.1", + "laravel-mix": "^5.0.5", "laravel-mix-artisan-publish": "git://github.com/mzur/laravel-mix-artisan-publish.git", "resolve-url-loader": "^3.1.0", "sass": "^1.15.2", From 681ed2d2547b0869dafc4b03b4e39f3a8f25bf4e Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 20 Oct 2020 13:04:55 +0200 Subject: [PATCH 233/407] Fix Node dependency vulnerability --- package-lock.json | 94 ++++++++++------------------------------------- package.json | 2 +- 2 files changed, 21 insertions(+), 75 deletions(-) diff --git a/package-lock.json b/package-lock.json index 04de99d41..8313bd311 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1632,72 +1632,24 @@ "dev": true }, "adjust-sourcemap-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-2.0.0.tgz", - "integrity": "sha512-4hFsTsn58+YjrU9qKzML2JSSDqKvN8mUGQ0nNIrfPi8hmIONT4L3uUaT6MKdMsZ9AjsU6D2xDkZxCkbQPxChrA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", + "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", "dev": true, "requires": { - "assert": "1.4.1", - "camelcase": "5.0.0", - "loader-utils": "1.2.3", - "object-path": "0.11.4", - "regex-parser": "2.2.10" + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" }, "dependencies": { - "assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", - "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", - "dev": true, - "requires": { - "util": "0.10.3" - } - }, - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", - "dev": true - }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "dev": true, "requires": { "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" + "emojis-list": "^3.0.0", + "json5": "^2.1.2" } } } @@ -4357,9 +4309,9 @@ }, "dependencies": { "type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.0.0.tgz", - "integrity": "sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", + "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", "dev": true } } @@ -6623,12 +6575,6 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, - "object-path": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.4.tgz", - "integrity": "sha1-NwrnUvvzfePqcKhhwju6iRVpGUk=", - "dev": true - }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -8018,9 +7964,9 @@ } }, "regex-parser": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.10.tgz", - "integrity": "sha512-8t6074A68gHfU8Neftl0Le6KTDwfGAj7IyjPIMSfikI2wJUTHDMaIq42bUsfVnj8mhx0R+45rdUXHGpN164avA==", + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", "dev": true }, "regexp.prototype.flags": { @@ -8185,12 +8131,12 @@ "dev": true }, "resolve-url-loader": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.1.tgz", - "integrity": "sha512-K1N5xUjj7v0l2j/3Sgs5b8CjrrgtC70SmdCuZiJ8tSyb5J+uk3FoeZ4b7yTnH6j7ngI+Bc5bldHJIa8hYdu2gQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", + "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", "dev": true, "requires": { - "adjust-sourcemap-loader": "2.0.0", + "adjust-sourcemap-loader": "3.0.0", "camelcase": "5.3.1", "compose-function": "3.0.3", "convert-source-map": "1.7.0", diff --git a/package.json b/package.json index 822f45c09..51aec8582 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "eslint-plugin-vue": "^6.2.2", "laravel-mix": "^5.0.5", "laravel-mix-artisan-publish": "git://github.com/mzur/laravel-mix-artisan-publish.git", - "resolve-url-loader": "^3.1.0", + "resolve-url-loader": "^3.1.2", "sass": "^1.15.2", "sass-loader": "^8.0.0", "vue-template-compiler": "^2.6.11" From c029e1e37c10bbe37fbf6cee23be71569d7ce827 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 4 Nov 2020 14:22:24 +0100 Subject: [PATCH 234/407] Update for the default new project overview --- .../Views/ProjectReportsController.php | 66 +-------- src/ReportsServiceProvider.php | 3 +- src/resources/views/projectReports.blade.php | 42 +++--- .../views/projectReportsV2.blade.php | 125 ------------------ ...s.blade.php => projectsShowTabs.blade.php} | 0 .../views/projectsShowToolbar.blade.php | 5 - 6 files changed, 21 insertions(+), 220 deletions(-) delete mode 100644 src/resources/views/projectReportsV2.blade.php rename src/resources/views/{projectsShowV2Tabs.blade.php => projectsShowTabs.blade.php} (100%) delete mode 100644 src/resources/views/projectsShowToolbar.blade.php diff --git a/src/Http/Controllers/Views/ProjectReportsController.php b/src/Http/Controllers/Views/ProjectReportsController.php index 366bd637c..7f94bc34d 100644 --- a/src/Http/Controllers/Views/ProjectReportsController.php +++ b/src/Http/Controllers/Views/ProjectReportsController.php @@ -10,68 +10,6 @@ class ProjectReportsController extends Controller { - /** - * Show the project reports view. - * - * @param Request $request - * @param int $id Project ID - * @return \Illuminate\Http\Response - */ - public function show(Request $request, $id) - { - $showV1 = $request->user()->getSettings('project_overview_v1', false); - - if (!config('biigle.project_overview_v2_preview') || $showV1) { - return $this->showV1($id); - } - - return $this->showV2($request, $id); - } - - /** - * Show the old project reports view. - * - * @param int $id - * - * @return \Illuminate\Http\Response - */ - protected function showV1($id) - { - $project = Project::findOrFail($id); - $hasVideoVolume = $project->videoVolumes()->exists(); - $hasImageVolume = $project->imageVolumes()->exists(); - if (!$hasVideoVolume && !$hasImageVolume) { - abort(Response::HTTP_NOT_FOUND); - } - - $this->authorize('access', $project); - - $types = ReportType::when($hasImageVolume, function ($query) { - $query->where('name', 'like', 'Image%'); - }) - ->when($hasVideoVolume, function ($query) { - $query->orWhere('name', 'like', 'Video%'); - }) - ->orderBy('name', 'asc') - ->get(); - - - $hasExportArea = $project->imageVolumes() - ->whereNotNull('attrs->export_area') - ->exists(); - - $labelTrees = $project->labelTrees()->with('labels', 'version')->get(); - - return view('reports::projectReports', [ - 'project' => $project, - 'reportTypes' => $types, - 'hasExportArea' => $hasExportArea, - 'hasImageVolume' => $hasImageVolume, - 'hasVideoVolume' => $hasVideoVolume, - 'labelTrees' => $labelTrees, - ]); - } - /** * Show the new project reports view. * @@ -80,7 +18,7 @@ protected function showV1($id) * * @return \Illuminate\Http\Response */ - protected function showV2(Request $request, $id) + protected function show(Request $request, $id) { $project = Project::findOrFail($id); $hasVideoVolume = $project->videoVolumes()->exists(); @@ -115,7 +53,7 @@ protected function showV2(Request $request, $id) $labelTrees = $project->labelTrees()->with('labels', 'version')->get(); - return view('reports::projectReportsV2', [ + return view('reports::projectReports', [ 'project' => $project, 'isMember' => $isMember, 'isPinned' => $isPinned, diff --git a/src/ReportsServiceProvider.php b/src/ReportsServiceProvider.php index 6374e6f06..5adb859de 100644 --- a/src/ReportsServiceProvider.php +++ b/src/ReportsServiceProvider.php @@ -50,7 +50,6 @@ public function boot(Modules $modules, Router $router) $modules->register('reports', [ 'viewMixins' => [ - 'projectsShowToolbar', 'annotationsSettingsTab', 'annotationsScripts', 'manualTutorial', @@ -58,7 +57,7 @@ public function boot(Modules $modules, Router $router) 'annotationsManualSidebarSettings', 'searchTab', 'searchTabContent', - 'projectsShowV2Tabs', + 'projectsShowTabs', ], 'controllerMixins' => [ 'search' => SearchControllerMixin::class.'@index', diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index 62654af15..26230bfe3 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -1,4 +1,4 @@ -@extends('app') +@extends('projects.show.base') @section('title', "Reports for {$project->name}") @@ -15,21 +15,14 @@ @endpush -@section('navbar') - -@endsection - -@section('content') +@section('project-content')
    -
    -
    -

    Request report for {{$project->name}}

    -

    - Request a project report to consolidate data of image or video volumes of the project into downloadable files. -

    -
    +

    + Request a project report to consolidate data of image or video volumes of the project into downloadable files. +

    + +
    +
    @if ($hasImageVolume) @@ -64,6 +57,14 @@ @include('reports::partials.reportTypeInfo')
    +
    + The requested report will be prepared. You will get notified when it is ready. +
    +
    + +
    +
    +
    @@ -117,15 +118,8 @@
    @include('reports::partials.restrictLabels') -
    - The requested report will be prepared. You will get notified when it is ready. Now you can request a new report or go back to the project. -
    -
    - back - -
    - +
    -
    +
    @endsection diff --git a/src/resources/views/projectReportsV2.blade.php b/src/resources/views/projectReportsV2.blade.php deleted file mode 100644 index 26230bfe3..000000000 --- a/src/resources/views/projectReportsV2.blade.php +++ /dev/null @@ -1,125 +0,0 @@ -@extends('projects.show.base') - -@section('title', "Reports for {$project->name}") - -@push('scripts') - - -@endpush - -@push('styles') - -@endpush - -@section('project-content') -
    -

    - Request a project report to consolidate data of image or video volumes of the project into downloadable files. -

    -
    -
    -
    -
    - - @if ($hasImageVolume) -
    -
    - -
    -
    - -
    -
    - @endif - @if ($hasImageVolume && $hasVideoVolume) -
    -
    - @endif - @if ($hasVideoVolume) -
    -
    - -
    -
    - -
    -
    - @endif -
    -
    - - - @include('reports::partials.reportTypeInfo') -
    -
    - The requested report will be prepared. You will get notified when it is ready. -
    -
    - -
    -
    -
    -
    -
    -
    - @if ($hasExportArea) - - @else - - @endif -
    -
    -
    - Annotations that are outside of the export area will be discarded for this report. -
    -
    -
    -
    - -
    -
    -
    - Only the newest label of each annotation will be included in the report. -
    -
    -
    -
    - -
    -
    -
    - Aggregate the abundance of child labels to their parent label. -
    -
    -
    -
    -
    - -
    -
    -
    - Annotations belonging to different label trees will be separated to different files/sheets. -
    -
    - @include('reports::partials.restrictLabels') -
    -
    -
    -
    -@endsection diff --git a/src/resources/views/projectsShowV2Tabs.blade.php b/src/resources/views/projectsShowTabs.blade.php similarity index 100% rename from src/resources/views/projectsShowV2Tabs.blade.php rename to src/resources/views/projectsShowTabs.blade.php diff --git a/src/resources/views/projectsShowToolbar.blade.php b/src/resources/views/projectsShowToolbar.blade.php deleted file mode 100644 index 107ebadc5..000000000 --- a/src/resources/views/projectsShowToolbar.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -@unless ($volumes->isEmpty()) - - Request reports - -@endif From fba400b63b26f3f7a95815c5570f1ba71eb0b396 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 10 Nov 2020 08:17:16 +0100 Subject: [PATCH 235/407] Add notice that the module is included in biigle/biigle --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a6d1950c0..d12f73295 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,8 @@ This is the BIIGLE module to generate reports for projects, volumes and videos. ## Installation +This module is already included in [`biigle/biigle`](https://github.com/biigle/biigle). + 1. Run `composer require biigle/reports`. 2. Add `Biigle\Modules\Reports\ReportsServiceProvider::class` to the `providers` array in `config/app.php`. 3. Run `php artisan vendor:publish --tag=public` to publish the public assets of this module. From 73839b4e49203815aa6d00d0971a53fc175f8670 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 10 Nov 2020 10:05:09 +0100 Subject: [PATCH 236/407] Use GitHub Container Registry --- .github/workflows/test.yml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7af5d93b8..3d13ea471 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -68,15 +68,10 @@ jobs: run: php artisan key:generate working-directory: ../core - - name: Docker login - run: docker login docker.pkg.github.com -u $GITHUB_ACTOR -p $GITHUB_TOKEN - env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - - name: Fetch base images run: | - docker pull docker.pkg.github.com/biigle/core/app:latest - docker pull docker.pkg.github.com/biigle/core/worker:latest + docker pull ghcr.io/biigle/app:latest + docker pull ghcr.io/biigle/worker:latest - name: Start test database run: docker-compose up -d --no-build database_testing From f8b915b00e94de6bddafce6dd79c3e2d4dea0f2d Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 15 Dec 2020 15:57:25 +0100 Subject: [PATCH 237/407] Implement ImageLocationReportGenerator for volumes --- composer.json | 3 +- src/Http/Requests/StoreVolumeReport.php | 19 ++ src/ReportType.php | 3 + src/Support/CsvFile.php | 6 +- src/Support/File.php | 13 + .../ImageLocationReportGenerator.php | 153 +++++++++++ ...12_15_142500_add_location_report_types.php | 36 +++ .../Volumes/VolumeReportControllerTest.php | 24 ++ .../ImageLocationReportGeneratorTest.php | 249 ++++++++++++++++++ 9 files changed, 503 insertions(+), 3 deletions(-) create mode 100644 src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php create mode 100644 src/database/migrations/2020_12_15_142500_add_location_report_types.php create mode 100644 tests/Support/Reports/Volumes/ImageLabels/ImageLocationReportGeneratorTest.php diff --git a/composer.json b/composer.json index f34f2ba22..7e52aab13 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,8 @@ } ], "require": { - "ext-zip": "*" + "ext-zip": "*", + "jmikola/geojson=^1.0" }, "autoload": { "psr-4": { diff --git a/src/Http/Requests/StoreVolumeReport.php b/src/Http/Requests/StoreVolumeReport.php index 60287c9b0..cb1041d9c 100644 --- a/src/Http/Requests/StoreVolumeReport.php +++ b/src/Http/Requests/StoreVolumeReport.php @@ -44,6 +44,7 @@ public function rules() ReportType::imageAnnotationsAbundanceId(), ReportType::imageLabelsBasicId(), ReportType::imageLabelsCsvId(), + ReportType::imageLabelsImageLocationId(), ]; } else { $types = [ @@ -57,6 +58,24 @@ public function rules() ]); } + /** + * Configure the validator instance. + * + * @param \Illuminate\Validation\Validator $validator + * @return void + */ + public function withValidator($validator) + { + parent::withValidator($validator); + + $validator->after(function ($validator) { + $typeId = intval($this->input('type_id')); + if ($typeId === ReportType::imageLabelsImageLocationId() && !$this->volume->hasGeoInfo()) { + $validator->errors()->add('id', 'The volume images have no geo coordinates.'); + } + }); + } + /** * Get the options for the new report. * diff --git a/src/ReportType.php b/src/ReportType.php index 667b52d35..9822079db 100644 --- a/src/ReportType.php +++ b/src/ReportType.php @@ -21,8 +21,11 @@ class ReportType extends Model 'imageAnnotationsExtended' => 'ImageAnnotations\Extended', 'imageAnnotationsFull' => 'ImageAnnotations\Full', 'imageAnnotationsAbundance' => 'ImageAnnotations\Abundance', + 'imageAnnotationsImageLocation' => 'ImageAnnotations\ImageLocation', + 'imageAnnotationsAnnotationLocation' => 'ImageAnnotations\AnnotationLocation', 'imageLabelsBasic' => 'ImageLabels\Basic', 'imageLabelsCsv' => 'ImageLabels\Csv', + 'imageLabelsImageLocation' => 'ImageLabels\ImageLocation', 'videoAnnotationsCsv' => 'VideoAnnotations\Csv', 'videoLabelsCsv' => 'VideoLabels\Csv', ]; diff --git a/src/Support/CsvFile.php b/src/Support/CsvFile.php index 05d003293..d9ca26846 100644 --- a/src/Support/CsvFile.php +++ b/src/Support/CsvFile.php @@ -46,8 +46,10 @@ public function __construct($path = null, $delimiter = ',', $enclosure = '"', $e * * @param array $items Row items */ - public function put(array $items) + public function put($items) { - fputcsv($this->handle, $items, $this->delimiter, $this->enclosure, $this->escape_char); + if (is_array($items)) { + fputcsv($this->handle, $items, $this->delimiter, $this->enclosure, $this->escape_char); + } } } diff --git a/src/Support/File.php b/src/Support/File.php index 0d5d28c98..c8fee919c 100644 --- a/src/Support/File.php +++ b/src/Support/File.php @@ -82,4 +82,17 @@ public function getPath() { return $this->path; } + + /** + * Add content to the file. + * + * @param string $content File content + * @return int + */ + public function put($content) + { + if (is_string($content)) { + return fwrite($this->handle, $content); + } + } } diff --git a/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php new file mode 100644 index 000000000..6e479286e --- /dev/null +++ b/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php @@ -0,0 +1,153 @@ +join('labels', 'image_labels.label_id', '=', 'labels.id') + ->where('images.volume_id', $this->source->id) + ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']) + ->distinct(); + + $imageLabels = $this->query()->get(); + + $images = $this->source->images() + ->whereNotNull('lng') + ->whereNotNull('lat'); + + if ($this->shouldSeparateLabelTrees() && $imageLabels->isNotEmpty()) { + $imageLabels = $imageLabels->groupBy('label_tree_id'); + $trees = LabelTree::whereIn('id', $imageLabels->keys())->pluck('name', 'id'); + + foreach ($trees as $id => $name) { + $usedImageLabels = (clone $usedImageLabelsQuery) + ->where('labels.label_tree_id', $id) + ->pluck('labels.name', 'labels.id'); + + $tmpImageLabels = $imageLabels->get($id)->groupBy('image_id'); + $file = $this->createNdJSON($images, $usedImageLabels, $tmpImageLabels); + $this->tmpFiles[] = $file; + $toZip[$file->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'ndjson'); + } + } else { + $usedImageLabels = $usedImageLabelsQuery->pluck('labels.name', 'labels.id'); + $imageLabels = $imageLabels->groupBy('image_id'); + $file = $this->createNdJSON($images, $usedImageLabels, $imageLabels); + $this->tmpFiles[] = $file; + $toZip[$file->getPath()] = $this->sanitizeFilename("{$this->source->id}-{$this->source->name}", 'ndjson'); + } + + $this->makeZip($toZip, $path); + } + + /** + * Callback to be used in a `when` query statement that restricts the results to a specific subset of annotation labels. + * + * @param \Illuminate\Database\Query\Builder $query + * @return \Illuminate\Database\Query\Builder + */ + public function restrictToLabelsQuery($query) + { + return $query->whereIn('image_labels.label_id', $this->getOnlyLabels()); + } + + /** + * Assemble a new DB query for the volume of this report. + * + * @return \Illuminate\Database\Query\Builder + */ + public function query() + { + $query = DB::table('image_labels') + ->join('images', 'image_labels.image_id', '=', 'images.id') + ->select([ + 'image_labels.image_id', + 'image_labels.label_id', + ]) + ->where('images.volume_id', $this->source->id) + ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']); + + if ($this->shouldSeparateLabelTrees()) { + $query->join('labels', 'labels.id', '=', 'image_labels.label_id') + ->addSelect('labels.label_tree_id'); + } + + return $query; + } + + /** + * Create the newline delimited GeoJSON file. + * + * @param \Illuminate\Database\Query\Builder $query + * @param \Illuminate\Support\Collection $usedImageLabels + * @param \Illuminate\Support\Collection $imageLabels + * + * @return File + */ + protected function createNdJSON($query, $usedImageLabels, $imageLabels) + { + $file = File::makeTmp(); + + $query->each(function ($image) use ($usedImageLabels, $imageLabels, $file) { + $labels = []; + foreach ($usedImageLabels as $id => $name) { + $item = $imageLabels->get($image->id); + $labels["{$name} (#{$id})"] = $item && $item->firstWhere('label_id', $id); + } + + $properties = array_merge([ + '_id' => $image->id, + '_filename' => $image->filename, + ], $labels); + + $feature = new Feature(new Point([$image->lng, $image->lat]), $properties); + $file->put(json_encode($feature)."\n"); + }); + $file->close(); + + return $file; + } +} diff --git a/src/database/migrations/2020_12_15_142500_add_location_report_types.php b/src/database/migrations/2020_12_15_142500_add_location_report_types.php new file mode 100644 index 000000000..70097871e --- /dev/null +++ b/src/database/migrations/2020_12_15_142500_add_location_report_types.php @@ -0,0 +1,36 @@ +insert([ + ['name' => 'ImageLabels\ImageLocation'], + ['name' => 'ImageAnnotations\ImageLocation'], + ['name' => 'ImageAnnotations\AnnotationLocation'], + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + DB::table('report_types') + ->whereIn('name', [ + 'ImageLabels\ImageLocation', + 'ImageAnnotations\ImageLocation', + 'ImageAnnotations\AnnotationLocation', + ]) + ->delete(); + } +} diff --git a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php index 829e94cd1..03418ffaa 100644 --- a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php +++ b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php @@ -6,6 +6,7 @@ use Biigle\MediaType; use Biigle\Modules\Reports\Jobs\GenerateReportJob; use Biigle\Modules\Reports\ReportType; +use Biigle\Tests\ImageTest; use Biigle\Tests\LabelTest; class VolumeReportControllerTest extends ApiTestCase @@ -141,4 +142,27 @@ public function testStoreOnlyLabels() ]) ->assertStatus(200); } + + public function testStoreImageLabelImageLocationWithoutLatLng() + { + $this->beGuest(); + $label = LabelTest::create(); + $volumeId = $this->volume()->id; + $image = ImageTest::create(['volume_id' => $volumeId]); + + $this->postJson("api/v1/volumes/{$volumeId}/reports", [ + 'type_id' => ReportType::imageLabelsImageLocationId(), + ]) + ->assertStatus(422); + + $image->lat = 1; + $image->lng = 1; + $image->save(); + $this->volume()->flushGeoInfoCache(); + + $this->postJson("api/v1/volumes/{$volumeId}/reports", [ + 'type_id' => ReportType::imageLabelsImageLocationId(), + ]) + ->assertStatus(200); + } } diff --git a/tests/Support/Reports/Volumes/ImageLabels/ImageLocationReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageLabels/ImageLocationReportGeneratorTest.php new file mode 100644 index 000000000..b6ebe260b --- /dev/null +++ b/tests/Support/Reports/Volumes/ImageLabels/ImageLocationReportGeneratorTest.php @@ -0,0 +1,249 @@ +assertEquals('image location image label report', $generator->getName()); + $this->assertEquals('image_location_image_label_report', $generator->getFilename()); + $this->assertStringEndsWith('.zip', $generator->getFullFilename()); + } + + public function testGenerateReport() + { + $volume = VolumeTest::create(['name' => 'volume1']); + + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + + $il = ImageLabelTest::create([ + 'image_id' => ImageTest::create([ + 'volume_id' => $volume->id, + 'filename' => 'foo.jpg', + 'lng' => 80.2, + 'lat' => 52.5, + ])->id, + 'label_id' => $child->id, + ]); + + $mock = Mockery::mock(); + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); + + $jsonContent = [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'Point', + 'coordinates' => [80.2, 52.5], + ], + 'properties' => [ + '_id' => $il->image_id, + '_filename' => 'foo.jpg', + "{$child->name} (#{$child->id})" => true, + ], + ]; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(File::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$volume->id}-{$volume->name}.ndjson"); + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new ImageLocationReportGenerator; + $generator->setSource($volume); + $generator->generateReport('my/path'); + } + + public function testGenerateReportNoCoordinates() + { + $volume = VolumeTest::create(); + + $il = ImageLabelTest::create([ + 'image_id' => ImageTest::create([ + 'volume_id' => $volume->id, + ])->id, + ]); + + $mock = Mockery::mock(); + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); + + $mock->shouldReceive('put')->never(); + + $mock->shouldReceive('close')->once(); + + App::singleton(File::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile')->once(); + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new ImageLocationReportGenerator; + $generator->setSource($volume); + $generator->generateReport('my/path'); + } + + public function testGenerateReportSeparateLabelTrees() + { + $tree1 = LabelTreeTest::create(['name' => 'tree1']); + $tree2 = LabelTreeTest::create(['name' => 'tree2']); + + $label1 = LabelTest::create(['label_tree_id' => $tree1->id]); + $label2 = LabelTest::create(['label_tree_id' => $tree2->id]); + + $image = ImageTest::create([ + 'lng' => 80.2, + 'lat' => 52.5, + ]); + + $il1 = ImageLabelTest::create([ + 'image_id' => $image->id, + 'label_id' => $label1->id, + ]); + $il2 = ImageLabelTest::create([ + 'image_id' => $image->id, + 'label_id' => $label2->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $jsonContent = [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'Point', + 'coordinates' => [80.2, 52.5], + ], + 'properties' => [ + '_id' => $image->id, + '_filename' => $image->filename, + "{$label1->name} (#{$label1->id})" => true, + ], + ]; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $jsonContent = [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'Point', + 'coordinates' => [80.2, 52.5], + ], + 'properties' => [ + '_id' => $image->id, + '_filename' => $image->filename, + "{$label2->name} (#{$label2->id})" => true, + ], + ]; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(File::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$tree1->id}-{$tree1->name}.ndjson"); + + $mock->shouldReceive('addFile') + ->once() + ->with('def', "{$tree2->id}-{$tree2->name}.ndjson"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new ImageLocationReportGenerator([ + 'separateLabelTrees' => true, + ]); + $generator->setSource($image->volume); + $generator->generateReport('my/path'); + } + + public function testRestrictToLabels() + { + $image = ImageTest::create(); + $il1 = ImageLabelTest::create(['image_id' => $image->id]); + $il2 = ImageLabelTest::create(['image_id' => $image->id]); + + $generator = new ImageLocationReportGenerator([ + 'onlyLabels' => [$il1->label_id], + ]); + $generator->setSource($image->volume); + $results = $generator->query()->get(); + $this->assertCount(1, $results); + $this->assertEquals($il1->image_id, $results[0]->image_id); + $this->assertEquals($il1->label_id, $results[0]->label_id); + } +} From e41bd30e792d51e0e943c586280841ca46621959 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 15 Dec 2020 16:10:16 +0100 Subject: [PATCH 238/407] Fix NPM vulnerabilities --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8313bd311..b40e86b44 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5407,9 +5407,9 @@ "dev": true }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "internal-ip": { From 707c8b9bd8c04ec695d6cb355e9490166db63f40 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 16 Dec 2020 13:01:59 +0100 Subject: [PATCH 239/407] Implement project image location image label report --- .../ImageLocationReportGenerator.php | 30 +++++++++++++++++++ .../ImageLocationReportGeneratorTest.php | 16 ++++++++++ 2 files changed, 46 insertions(+) create mode 100644 src/Support/Reports/Projects/ImageLabels/ImageLocationReportGenerator.php create mode 100644 tests/Support/Reports/Projects/ImageLabels/ImageLocationReportGeneratorTest.php diff --git a/src/Support/Reports/Projects/ImageLabels/ImageLocationReportGenerator.php b/src/Support/Reports/Projects/ImageLabels/ImageLocationReportGenerator.php new file mode 100644 index 000000000..23d838d9d --- /dev/null +++ b/src/Support/Reports/Projects/ImageLabels/ImageLocationReportGenerator.php @@ -0,0 +1,30 @@ +assertEquals('image location image label report', $generator->getName()); + $this->assertEquals('image_location_image_label_report', $generator->getFilename()); + } +} From 0df870d09c9b177af8bfff8a0039d4e6f4bce87f Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 16 Dec 2020 13:46:53 +0100 Subject: [PATCH 240/407] Add image location image annotation reports --- .../ImageLocationReportGenerator.php | 29 +++ .../ImageLocationReportGenerator.php | 144 +++++++++++ .../ImageLocationReportGenerator.php | 18 +- .../ImageLocationReportGeneratorTest.php | 16 ++ .../ImageLocationReportGeneratorTest.php | 242 ++++++++++++++++++ .../ImageLocationReportGeneratorTest.php | 6 +- 6 files changed, 444 insertions(+), 11 deletions(-) create mode 100644 src/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGenerator.php create mode 100644 src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php create mode 100644 tests/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGeneratorTest.php create mode 100644 tests/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGeneratorTest.php diff --git a/src/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGenerator.php b/src/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGenerator.php new file mode 100644 index 000000000..62be593e3 --- /dev/null +++ b/src/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGenerator.php @@ -0,0 +1,29 @@ +join('images', 'image_annotations.image_id', '=', 'images.id') + ->join('labels', 'image_annotation_labels.label_id', '=', 'labels.id') + ->where('images.volume_id', $this->source->id) + ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']) + ->distinct(); + + $labels = $this->query()->get(); + + $images = $this->source->images() + ->whereNotNull('lng') + ->whereNotNull('lat'); + + if ($this->shouldSeparateLabelTrees() && $labels->isNotEmpty()) { + $labels = $labels->groupBy('label_tree_id'); + $trees = LabelTree::whereIn('id', $labels->keys())->pluck('name', 'id'); + + foreach ($trees as $id => $name) { + $usedLabels = (clone $usedLabelsQuery) + ->where('labels.label_tree_id', $id) + ->pluck('labels.name', 'labels.id'); + + $tmpLabels = $labels->get($id)->groupBy('image_id'); + $file = $this->createNdJSON($images, $usedLabels, $tmpLabels); + $this->tmpFiles[] = $file; + $toZip[$file->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'ndjson'); + } + } else { + $usedLabels = $usedLabelsQuery->pluck('labels.name', 'labels.id'); + $labels = $labels->groupBy('image_id'); + $file = $this->createNdJSON($images, $usedLabels, $labels); + $this->tmpFiles[] = $file; + $toZip[$file->getPath()] = $this->sanitizeFilename("{$this->source->id}-{$this->source->name}", 'ndjson'); + } + + $this->makeZip($toZip, $path); + } + + /** + * Assemble a new DB query for the volume of this report. + * + * @return \Illuminate\Database\Query\Builder + */ + public function query() + { + $query = DB::table('image_annotation_labels') + ->join('image_annotations', 'image_annotation_labels.annotation_id', '=', 'image_annotations.id') + ->join('images', 'image_annotations.image_id', '=', 'images.id') + ->select([ + 'image_annotations.image_id', + 'image_annotation_labels.label_id', + ]) + ->where('images.volume_id', $this->source->id) + ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']); + + if ($this->shouldSeparateLabelTrees()) { + $query->join('labels', 'labels.id', '=', 'image_annotation_labels.label_id') + ->addSelect('labels.label_tree_id'); + } + + return $query; + } + + /** + * Create the newline delimited GeoJSON file. + * + * @param \Illuminate\Database\Query\Builder $query + * @param \Illuminate\Support\Collection $usedLabels + * @param \Illuminate\Support\Collection $labels + * + * @return File + */ + protected function createNdJSON($query, $usedLabels, $labels) + { + $file = File::makeTmp(); + + $query->each(function ($image) use ($usedLabels, $labels, $file) { + $properties = [ + '_id' => $image->id, + '_filename' => $image->filename, + ]; + foreach ($usedLabels as $id => $name) { + $item = $labels->get($image->id); + if ($item) { + $properties["{$name} (#{$id})"] = $item->where('label_id', $id)->count(); + } else { + $properties["{$name} (#{$id})"] = 0; + } + } + + $feature = new Feature(new Point([$image->lng, $image->lat]), $properties); + $file->put(json_encode($feature)."\n"); + }); + $file->close(); + + return $file; + } +} diff --git a/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php index 6e479286e..720dac054 100644 --- a/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php @@ -8,7 +8,6 @@ use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; use Biigle\Modules\Reports\Support\Reports\Volumes\VolumeReportGenerator; use DB; -use GeoJson\CoordinateReferenceSystem\Named; use GeoJson\Feature\Feature; use GeoJson\Feature\FeatureCollection; use GeoJson\Geometry\Point; @@ -132,17 +131,20 @@ protected function createNdJSON($query, $usedImageLabels, $imageLabels) $file = File::makeTmp(); $query->each(function ($image) use ($usedImageLabels, $imageLabels, $file) { - $labels = []; + $properties = [ + '_id' => $image->id, + '_filename' => $image->filename, + ]; + foreach ($usedImageLabels as $id => $name) { $item = $imageLabels->get($image->id); - $labels["{$name} (#{$id})"] = $item && $item->firstWhere('label_id', $id); + if ($item && $item->firstWhere('label_id', $id)) { + $properties["{$name} (#{$id})"] = 1; + } else { + $properties["{$name} (#{$id})"] = 0; + } } - $properties = array_merge([ - '_id' => $image->id, - '_filename' => $image->filename, - ], $labels); - $feature = new Feature(new Point([$image->lng, $image->lat]), $properties); $file->put(json_encode($feature)."\n"); }); diff --git a/tests/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGeneratorTest.php b/tests/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGeneratorTest.php new file mode 100644 index 000000000..7e5cc8578 --- /dev/null +++ b/tests/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGeneratorTest.php @@ -0,0 +1,16 @@ +assertEquals('image location image annotation report', $generator->getName()); + $this->assertEquals('image_location_image_annotation_report', $generator->getFilename()); + } +} diff --git a/tests/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGeneratorTest.php new file mode 100644 index 000000000..4866fa47d --- /dev/null +++ b/tests/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGeneratorTest.php @@ -0,0 +1,242 @@ +assertEquals('image location image annotation report', $generator->getName()); + $this->assertEquals('image_location_image_annotation_report', $generator->getFilename()); + $this->assertStringEndsWith('.zip', $generator->getFullFilename()); + } + + public function testGenerateReport() + { + $volume = VolumeTest::create([ + 'name' => 'My Cool Volume', + ]); + + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + + $al = ImageAnnotationLabelTest::create([ + 'label_id' => $child->id, + ]); + $al->annotation->image->volume_id = $volume->id; + $al->annotation->image->attrs = ['image' => 'attrs']; + $al->annotation->image->lng = 80.2; + $al->annotation->image->lat = 52.5; + $al->annotation->image->save(); + + ImageAnnotationLabelTest::create([ + 'label_id' => $child->id, + 'annotation_id' => $al->annotation_id, + ]); + + $mock = Mockery::mock(); + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); + + $jsonContent = [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'Point', + 'coordinates' => [80.2, 52.5], + ], + 'properties' => [ + '_id' => $al->annotation->image_id, + '_filename' => 'test-image.jpg', + "{$child->name} (#{$child->id})" => 2, + ], + ]; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(File::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$volume->id}-my-cool-volume.ndjson"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new ImageLocationReportGenerator; + $generator->setSource($volume); + $generator->generateReport('my/path'); + } + + public function testGenerateReportNoCoordinates() + { + $volume = VolumeTest::create(); + + $al = ImageAnnotationLabelTest::create(); + $al->annotation->image->volume_id = $volume->id; + $al->annotation->image->save(); + + $mock = Mockery::mock(); + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(File::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile')->once(); + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new ImageLocationReportGenerator; + $generator->setSource($volume); + $generator->generateReport('my/path'); + } + + public function testGenerateReportSeparateLabelTrees() + { + $tree1 = LabelTreeTest::create(['name' => 'tree1']); + $tree2 = LabelTreeTest::create(['name' => 'tree2']); + + $label1 = LabelTest::create(['label_tree_id' => $tree1->id]); + $label2 = LabelTest::create(['label_tree_id' => $tree2->id]); + + $image = ImageTest::create([ + 'lng' => 80.2, + 'lat' => 52.5, + ]); + + $annotation = ImageAnnotationTest::create([ + 'image_id' => $image->id, + ]); + + $al1 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'label_id' => $label1->id, + ]); + $al2 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'label_id' => $label2->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $jsonContent = [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'Point', + 'coordinates' => [80.2, 52.5], + ], + 'properties' => [ + '_id' => $image->id, + '_filename' => $image->filename, + "{$label1->name} (#{$label1->id})" => 1, + ], + ]; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $jsonContent = [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'Point', + 'coordinates' => [80.2, 52.5], + ], + 'properties' => [ + '_id' => $image->id, + '_filename' => $image->filename, + "{$label2->name} (#{$label2->id})" => 1, + ], + ]; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(File::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$tree1->id}-{$tree1->name}.ndjson"); + + $mock->shouldReceive('addFile') + ->once() + ->with('def', "{$tree2->id}-{$tree2->name}.ndjson"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new ImageLocationReportGenerator([ + 'separateLabelTrees' => true, + ]); + $generator->setSource($image->volume); + $generator->generateReport('my/path'); + } +} diff --git a/tests/Support/Reports/Volumes/ImageLabels/ImageLocationReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageLabels/ImageLocationReportGeneratorTest.php index b6ebe260b..713aa7830 100644 --- a/tests/Support/Reports/Volumes/ImageLabels/ImageLocationReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageLabels/ImageLocationReportGeneratorTest.php @@ -59,7 +59,7 @@ public function testGenerateReport() 'properties' => [ '_id' => $il->image_id, '_filename' => 'foo.jpg', - "{$child->name} (#{$child->id})" => true, + "{$child->name} (#{$child->id})" => 1, ], ]; @@ -172,7 +172,7 @@ public function testGenerateReportSeparateLabelTrees() 'properties' => [ '_id' => $image->id, '_filename' => $image->filename, - "{$label1->name} (#{$label1->id})" => true, + "{$label1->name} (#{$label1->id})" => 1, ], ]; @@ -189,7 +189,7 @@ public function testGenerateReportSeparateLabelTrees() 'properties' => [ '_id' => $image->id, '_filename' => $image->filename, - "{$label2->name} (#{$label2->id})" => true, + "{$label2->name} (#{$label2->id})" => 1, ], ]; From 6fa5e423889c000fe6e158d696a841c1bf09846d Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Jan 2021 09:04:09 +0100 Subject: [PATCH 241/407] Simplify ImageLocationReportGenerator --- .../ImageLocationReportGenerator.php | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php index cf5e8e21d..dbca0aad0 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php @@ -89,22 +89,10 @@ public function generateReport($path) */ public function query() { - $query = DB::table('image_annotation_labels') - ->join('image_annotations', 'image_annotation_labels.annotation_id', '=', 'image_annotations.id') - ->join('images', 'image_annotations.image_id', '=', 'images.id') - ->select([ - 'image_annotations.image_id', - 'image_annotation_labels.label_id', - ]) - ->where('images.volume_id', $this->source->id) - ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']); - - if ($this->shouldSeparateLabelTrees()) { - $query->join('labels', 'labels.id', '=', 'image_annotation_labels.label_id') - ->addSelect('labels.label_tree_id'); - } - - return $query; + return $this->initQuery([ + 'image_annotations.image_id', + 'image_annotation_labels.label_id', + ]); } /** @@ -125,6 +113,7 @@ protected function createNdJSON($query, $usedLabels, $labels) '_id' => $image->id, '_filename' => $image->filename, ]; + foreach ($usedLabels as $id => $name) { $item = $labels->get($image->id); if ($item) { From 210a65b4df47cc90ff5b7da6f32b4d096a6a4c38 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Jan 2021 09:04:31 +0100 Subject: [PATCH 242/407] Add request validation for AnnotationLocationReport --- src/Http/Requests/StoreVolumeReport.php | 28 ++++++++- .../Volumes/VolumeReportControllerTest.php | 61 +++++++++++++++++++ 2 files changed, 88 insertions(+), 1 deletion(-) diff --git a/src/Http/Requests/StoreVolumeReport.php b/src/Http/Requests/StoreVolumeReport.php index cb1041d9c..1c5cefcb6 100644 --- a/src/Http/Requests/StoreVolumeReport.php +++ b/src/Http/Requests/StoreVolumeReport.php @@ -42,6 +42,7 @@ public function rules() ReportType::imageAnnotationsExtendedId(), ReportType::imageAnnotationsFullId(), ReportType::imageAnnotationsAbundanceId(), + ReportType::imageAnnotationsImageLocationId(), ReportType::imageLabelsBasicId(), ReportType::imageLabelsCsvId(), ReportType::imageLabelsImageLocationId(), @@ -70,9 +71,34 @@ public function withValidator($validator) $validator->after(function ($validator) { $typeId = intval($this->input('type_id')); - if ($typeId === ReportType::imageLabelsImageLocationId() && !$this->volume->hasGeoInfo()) { + $needsGeoInfo = [ + ReportType::imageAnnotationsImageLocationId(), + ReportType::imageLabelsImageLocationId(), + ]; + + if (in_array($typeId, $needsGeoInfo) && !$this->volume->hasGeoInfo()) { $validator->errors()->add('id', 'The volume images have no geo coordinates.'); } + + if ($typeId === ReportType::imageAnnotationsImageLocationId()) { + $hasImagesWithMetadata = $this->volume->images() + ->whereNotNull('attrs->metadata->yaw') + ->whereNotNull('attrs->metadata->distance_to_ground') + ->exists(); + + if (!$hasImagesWithMetadata) { + $validator->errors()->add('id', 'The volume images have no yaw and/or distance to ground metadata.'); + } + + $hasImagesWithDimensions = $this->volume->images() + ->whereNotNull('attrs->width') + ->whereNotNull('attrs->height') + ->exists(); + + if (!$hasImagesWithDimensions) { + $validator->errors()->add('id', 'The volume images have no dimension information. Try again later if the images are new and still being processed.'); + } + } }); } diff --git a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php index 03418ffaa..f6e58b4ac 100644 --- a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php +++ b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php @@ -165,4 +165,65 @@ public function testStoreImageLabelImageLocationWithoutLatLng() ]) ->assertStatus(200); } + + public function testStoreImageAnnotationImageLocationWithoutLatLng() + { + $this->beGuest(); + $label = LabelTest::create(); + $volumeId = $this->volume()->id; + $image = ImageTest::create(['volume_id' => $volumeId]); + + $this->postJson("api/v1/volumes/{$volumeId}/reports", [ + 'type_id' => ReportType::imageAnnotationsImageLocationId(), + ]) + ->assertStatus(422); + + $image->lat = 1; + $image->lng = 1; + $image->save(); + $this->volume()->flushGeoInfoCache(); + + $this->postJson("api/v1/volumes/{$volumeId}/reports", [ + 'type_id' => ReportType::imageAnnotationsImageLocationId(), + ]) + ->assertStatus(200); + } + + public function testStoreImageAnnotationAnnotationLocationWithoutLatLngYawDistance() + { + $this->beGuest(); + $label = LabelTest::create(); + $volumeId = $this->volume()->id; + $image = ImageTest::create(['volume_id' => $volumeId]); + + $this->postJson("api/v1/volumes/{$volumeId}/reports", [ + 'type_id' => ReportType::imageAnnotationsImageLocationId(), + ]) + // Metadata missing. + ->assertStatus(422); + + $image->lat = 1; + $image->lng = 1; + $image->metadata = [ + 'yaw' => 90, + 'distance_to_ground' => 10, + ]; + $image->save(); + $this->volume()->flushGeoInfoCache(); + + $this->postJson("api/v1/volumes/{$volumeId}/reports", [ + 'type_id' => ReportType::imageAnnotationsImageLocationId(), + ]) + // Width/height missing. + ->assertStatus(422); + + $image->width = 1; + $image->height = 1; + $image->save(); + + $this->postJson("api/v1/volumes/{$volumeId}/reports", [ + 'type_id' => ReportType::imageAnnotationsImageLocationId(), + ]) + ->assertStatus(200); + } } From 538080872ca5b029b8599cb1db8309822876f3f1 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Jan 2021 09:06:07 +0100 Subject: [PATCH 243/407] Implement AnnotationLocationReport Supports only point annotations for now. --- .../AnnotationLocationReportGenerator.php | 208 +++++++++++++ .../AnnotationLocationReportGeneratorTest.php | 275 ++++++++++++++++++ 2 files changed, 483 insertions(+) create mode 100644 src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php create mode 100644 tests/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGeneratorTest.php diff --git a/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php new file mode 100644 index 000000000..ac359f50c --- /dev/null +++ b/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php @@ -0,0 +1,208 @@ +query()->get(); + + if ($this->shouldSeparateLabelTrees() && $items->isNotEmpty()) { + $items = $items->groupBy('label_tree_id'); + $trees = LabelTree::whereIn('id', $items->keys())->pluck('name', 'id'); + + foreach ($trees as $id => $name) { + $tmpItems = $items->get($id); + $file = $this->createNdJSON($tmpItems); + $this->tmpFiles[] = $file; + $toZip[$file->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'ndjson'); + } + } else { + $file = $this->createNdJSON($items); + $this->tmpFiles[] = $file; + $toZip[$file->getPath()] = $this->sanitizeFilename("{$this->source->id}-{$this->source->name}", 'ndjson'); + } + + $this->makeZip($toZip, $path); + } + + /** + * Assemble a new DB query for the volume of this report. + * + * @return \Illuminate\Database\Query\Builder + */ + public function query() + { + return $this->initQuery([ + 'image_annotation_labels.id as annotation_label_id', + 'image_annotation_labels.label_id', + 'image_annotations.image_id', + 'images.filename', + 'images.attrs->metadata->yaw as yaw', + 'images.attrs->metadata->distance_to_ground as distance_to_ground', + 'images.attrs->width as width', + 'images.attrs->height as height', + 'images.lat', + 'images.lng', + 'image_annotations.points', + 'image_annotation_labels.id as annotation_label_id', + 'labels.name as label_name', + ]) + ->whereNotNull('images.lat') + ->whereNotNull('images.lng') + ->whereNotNull('images.attrs->width') + ->whereNotNull('images.attrs->height') + ->whereNotNull('images.attrs->metadata->distance_to_ground') + ->whereNotNull('images.attrs->metadata->yaw'); + } + + /** + * Create the newline delimited GeoJSON file. + * + * @param \Illuminate\Support\Collection $items + * + * @return File + */ + protected function createNdJSON($items) + { + $file = File::makeTmp(); + + $items->each(function ($item) use ($file) { + $properties = [ + '_id' => $item->annotation_label_id, + '_image_id' => $item->image_id, + '_image_filename' => $item->filename, + '_image_latitude' => floatval($item->lat), + '_image_longitude' => floatval($item->lng), + '_label_name' => $item->label_name, + '_label_id' => $item->label_id, + ]; + + $geometry = $this->estimateAnnotationPosition($item); + + $feature = new Feature($geometry, $properties); + $file->put(json_encode($feature)."\n"); + }); + $file->close(); + + return $file; + } + + /** + * Estimate the position of an annotation in world coordinates. + * + * @param object $item + * + * @return \GeoJson\Geometry\Geometry + */ + protected function estimateAnnotationPosition($item) + { + // First calculate the offset of the annotation from the image center in pixels. + + $imageCenter = [$item->width / 2, $item->height / 2]; + $points = json_decode($item->points); + + // Annotation position relative to the image center. Also, change the y axis from + // going top down to going bottom up. This is required for the correct rotation + // and shift calculation below. + $pointsOffsetInPx = [ + $points[0] - $imageCenter[0], + ($item->height - $points[1]) - $imageCenter[1], + ]; + + // Now rotate the annotation position around the image center according to the + // yaw. This assumes that 0° yaw is north and 90° yaw is east. + // See: https://stackoverflow.com/a/34374437/1796523 + + // Yaw specifies the clockwise rotation in degrees but the formula below expects + // the counterclockwise angle in radians. + $angle = deg2rad(360 - floatval($item->yaw)); + + // We don't need to shift the rotated coordinates back by adding $imageCenter, + // as we assume that latitude and longitude describe the image center point and + // not [0, 0], so the center is the "origin" here. + $rotatedOffsetInPx = [ + $pointsOffsetInPx[0] * cos($angle) - $pointsOffsetInPx[1] * sin($angle), + $pointsOffsetInPx[0] * sin($angle) + $pointsOffsetInPx[1] * cos($angle), + ]; + + // Then convert the pixel offset to meters. + + /* We assume that the camera points straight to the ground and the opening angle + * is 90°. Therefore, the width of the image in meters is twice the distance of + * the camera to the ground. + * + * camera + * o - Angle a is 90°. + * /a\ | Distance d to the ground. + * / \ |d w = 2 * d + * / \ | + * -----|-------|--- + * ground w + */ + $imageWidthInM = 2 * floatval($item->distance_to_ground); + + // The ratio of meter per pixel. + $scalingFactor = $imageWidthInM / $item->width; + + $rotatedOffsetInM = array_map(function($point) use ($scalingFactor) { + return $point * $scalingFactor; + }, $rotatedOffsetInPx); + + // Finally, shift the image coordinates by the offset in meters to estimate the + // annotation position. + // See: https://gis.stackexchange.com/a/2980/50820 + + $R = 6378137; + + $rotatedOffsetInRadians = [ + $rotatedOffsetInM[0] / ($R * cos(M_PI * $item->lat / 180)), + $rotatedOffsetInM[1] / $R, + ]; + + // Shifted image center position. + return new Point([ + $item->lng + $rotatedOffsetInRadians[0] * 180 / M_PI, + $item->lat + $rotatedOffsetInRadians[1] * 180 / M_PI, + ]); + } +} diff --git a/tests/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGeneratorTest.php new file mode 100644 index 000000000..c54a43280 --- /dev/null +++ b/tests/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGeneratorTest.php @@ -0,0 +1,275 @@ +assertEquals('annotation location image annotation report', $generator->getName()); + $this->assertEquals('annotation_location_image_annotation_report', $generator->getFilename()); + $this->assertStringEndsWith('.zip', $generator->getFullFilename()); + } + + public function testGenerateReportPoint() + { + $volume = VolumeTest::create([ + 'name' => 'My Cool Volume', + ]); + + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + + $image = ImageTest::create([ + 'volume_id' => $volume->id, + 'lat' => 51.0, + 'lng' => 0.0, + 'attrs' => [ + 'width' => 100, + 'height' => 100, + 'metadata' => [ + 'yaw' => 90, + 'distance_to_ground' => 10, + ], + ], + ]); + + $a = ImageAnnotationTest::create([ + 'points' => [10, 10], + 'image_id' => $image->id, + ]); + + $al = ImageAnnotationLabelTest::create([ + 'label_id' => $child->id, + 'annotation_id' => $a->id, + ]); + + $mock = Mockery::mock(); + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); + + $jsonContent = [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'Point', + 'coordinates' => [0.000114194969290087, 51.00007186522273], + ], + 'properties' => [ + '_id' => $al->id, + '_image_id' => $image->id, + '_image_filename' => 'test-image.jpg', + '_image_latitude' => $image->lat, + '_image_longitude' => $image->lng, + '_label_name' => $child->name, + '_label_id' => $child->id, + ], + ]; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(File::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$volume->id}-my-cool-volume.ndjson"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new AnnotationLocationReportGenerator; + $generator->setSource($volume); + $generator->generateReport('my/path'); + } + + public function testGenerateReportCircle() + { + + } + + public function testGenerateReportLineString() + { + + } + + public function testGenerateReportPolygon() + { + + } + + public function testGenerateReportNoCoordinates() + { + $volume = VolumeTest::create(); + + $al = ImageAnnotationLabelTest::create(); + $al->annotation->image->volume_id = $volume->id; + $al->annotation->image->save(); + + $mock = Mockery::mock(); + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(File::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile')->once(); + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new AnnotationLocationReportGenerator; + $generator->setSource($volume); + $generator->generateReport('my/path'); + } + + public function testGenerateReportSeparateLabelTrees() + { + $tree1 = LabelTreeTest::create(['name' => 'tree1']); + $tree2 = LabelTreeTest::create(['name' => 'tree2']); + + $label1 = LabelTest::create(['label_tree_id' => $tree1->id]); + $label2 = LabelTest::create(['label_tree_id' => $tree2->id]); + + $image = ImageTest::create([ + 'lat' => 51.0, + 'lng' => 0.0, + 'attrs' => [ + 'width' => 100, + 'height' => 100, + 'metadata' => [ + 'yaw' => 90, + 'distance_to_ground' => 10, + ], + ], + ]); + + $annotation = ImageAnnotationTest::create([ + 'points' => [10, 10], + 'image_id' => $image->id, + ]); + + $al1 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'label_id' => $label1->id, + ]); + $al2 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'label_id' => $label2->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $jsonContent = [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'Point', + 'coordinates' => [0.000114194969290087, 51.00007186522273], + ], + 'properties' => [ + '_id' => $al1->id, + '_image_id' => $image->id, + '_image_filename' => 'test-image.jpg', + '_image_latitude' => $image->lat, + '_image_longitude' => $image->lng, + '_label_name' => $label1->name, + '_label_id' => $label1->id, + ], + ]; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $jsonContent['properties']['_id'] = $al2->id; + $jsonContent['properties']['_label_name'] = $label2->name; + $jsonContent['properties']['_label_id'] = $label2->id; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(File::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$tree1->id}-{$tree1->name}.ndjson"); + + $mock->shouldReceive('addFile') + ->once() + ->with('def', "{$tree2->id}-{$tree2->name}.ndjson"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new AnnotationLocationReportGenerator([ + 'separateLabelTrees' => true, + ]); + $generator->setSource($image->volume); + $generator->generateReport('my/path'); + } +} From ecb576ff0bad4152f79057684eeec915fda26522 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Jan 2021 09:15:27 +0100 Subject: [PATCH 244/407] Update laravel-mix to fix vulnerability --- package-lock.json | 1832 +++++++++++++++++++++++++-------------------- package.json | 2 +- 2 files changed, 1025 insertions(+), 809 deletions(-) diff --git a/package-lock.json b/package-lock.json index b40e86b44..d2fac5e4c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,53 +14,47 @@ } }, "@babel/compat-data": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.11.0.tgz", - "integrity": "sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ==", - "dev": true, - "requires": { - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "semver": "^5.5.0" - } + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", + "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==", + "dev": true }, "@babel/core": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", - "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", + "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.6", - "@babel/helper-module-transforms": "^7.11.0", - "@babel/helpers": "^7.10.4", - "@babel/parser": "^7.11.5", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.11.5", - "@babel/types": "^7.11.5", + "@babel/generator": "^7.12.10", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", "lodash": "^4.17.19", - "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "requires": { "@babel/highlight": "^7.10.4" } }, "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", "dev": true }, "@babel/highlight": { @@ -77,23 +71,23 @@ } }, "@babel/generator": { - "version": "7.11.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.11.6.tgz", - "integrity": "sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", + "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", "dev": true, "requires": { - "@babel/types": "^7.11.5", + "@babel/types": "^7.12.11", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", - "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz", + "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.10" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -107,41 +101,38 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz", - "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", + "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", "dev": true, "requires": { - "@babel/compat-data": "^7.10.4", - "browserslist": "^4.12.0", - "invariant": "^2.2.4", - "levenary": "^1.1.1", + "@babel/compat-data": "^7.12.5", + "@babel/helper-validator-option": "^7.12.1", + "browserslist": "^4.14.5", "semver": "^5.5.0" } }, "@babel/helper-create-class-features-plugin": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz", - "integrity": "sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", "dev": true, "requires": { "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.10.5", + "@babel/helper-member-expression-to-functions": "^7.12.1", "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", "@babel/helper-split-export-declaration": "^7.10.4" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz", - "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", + "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-regex": "^7.10.4", - "regexpu-core": "^4.7.0" + "regexpu-core": "^4.7.1" } }, "@babel/helper-define-map": { @@ -156,32 +147,32 @@ } }, "@babel/helper-explode-assignable-expression": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.11.4.tgz", - "integrity": "sha512-ux9hm3zR4WV1Y3xXxXkdG/0gxF9nvI0YVmKVhvK9AfMoaQkemL3sJpXw+Xbz65azo8qJiEz2XVDUpK3KYhH3ZQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.1" } }, "@babel/helper-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", - "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", + "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-get-function-arity": "^7.12.10", + "@babel/template": "^7.12.7", + "@babel/types": "^7.12.11" } }, "@babel/helper-get-function-arity": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", - "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", + "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.10" } }, "@babel/helper-hoist-variables": { @@ -194,45 +185,55 @@ } }, "@babel/helper-member-expression-to-functions": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz", - "integrity": "sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", + "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", "dev": true, "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.12.7" } }, "@babel/helper-module-imports": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz", - "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", + "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.5" } }, "@babel/helper-module-transforms": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz", - "integrity": "sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-module-imports": "^7.12.1", + "@babel/helper-replace-supers": "^7.12.1", + "@babel/helper-simple-access": "^7.12.1", "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/helper-validator-identifier": "^7.10.4", "@babel/template": "^7.10.4", - "@babel/types": "^7.11.0", + "@babel/traverse": "^7.12.1", + "@babel/types": "^7.12.1", "lodash": "^4.17.19" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + } } }, "@babel/helper-optimise-call-expression": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", - "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", + "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", "dev": true, "requires": { - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.10" } }, "@babel/helper-plugin-utils": { @@ -241,65 +242,54 @@ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", "dev": true }, - "@babel/helper-regex": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", - "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", - "dev": true, - "requires": { - "lodash": "^4.17.19" - } - }, "@babel/helper-remap-async-to-generator": { - "version": "7.11.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.11.4.tgz", - "integrity": "sha512-tR5vJ/vBa9wFy3m5LLv2faapJLnDFxNWff2SAYkSE4rLUdbp7CdObYFgI7wK4T/Mj4UzpjPwzR8Pzmr5m7MHGA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-wrap-function": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.1" } }, "@babel/helper-replace-supers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz", - "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", + "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/helper-member-expression-to-functions": "^7.12.7", + "@babel/helper-optimise-call-expression": "^7.12.10", + "@babel/traverse": "^7.12.10", + "@babel/types": "^7.12.11" } }, "@babel/helper-simple-access": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz", - "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", "dev": true, "requires": { - "@babel/template": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/types": "^7.12.1" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz", - "integrity": "sha512-0XIdiQln4Elglgjbwo9wuJpL/K7AGCY26kmEt0+pRP0TAj4jjyNq1MjoRvikrTVqKcx4Gysxt4cXvVFXP/JO2Q==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", "dev": true, "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.12.1" } }, "@babel/helper-split-export-declaration": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", - "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", + "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", "dev": true, "requires": { - "@babel/types": "^7.11.0" + "@babel/types": "^7.12.11" } }, "@babel/helper-validator-identifier": { @@ -308,10 +298,16 @@ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==", "dev": true }, + "@babel/helper-validator-option": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz", + "integrity": "sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw==", + "dev": true + }, "@babel/helper-wrap-function": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz", - "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==", + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", "dev": true, "requires": { "@babel/helper-function-name": "^7.10.4", @@ -321,14 +317,14 @@ } }, "@babel/helpers": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz", - "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", + "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", "dev": true, "requires": { "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/traverse": "^7.12.5", + "@babel/types": "^7.12.5" } }, "@babel/highlight": { @@ -343,36 +339,36 @@ } }, "@babel/parser": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.11.5.tgz", - "integrity": "sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", + "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz", - "integrity": "sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz", + "integrity": "sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4", + "@babel/helper-remap-async-to-generator": "^7.12.1", "@babel/plugin-syntax-async-generators": "^7.8.0" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz", - "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-create-class-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz", - "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -380,9 +376,9 @@ } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz", - "integrity": "sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -390,9 +386,9 @@ } }, "@babel/plugin-proposal-json-strings": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz", - "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -400,9 +396,9 @@ } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz", - "integrity": "sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -410,9 +406,9 @@ } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz", - "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -420,9 +416,9 @@ } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz", - "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", + "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -430,20 +426,20 @@ } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", - "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.10.4" + "@babel/plugin-transform-parameters": "^7.12.1" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz", - "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", @@ -451,33 +447,33 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz", - "integrity": "sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", + "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz", - "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.10.4", + "@babel/helper-create-class-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz", - "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-create-regexp-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, @@ -491,9 +487,9 @@ } }, "@babel/plugin-syntax-class-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz", - "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" @@ -581,56 +577,56 @@ } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz", - "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz", - "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz", - "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-module-imports": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.10.4" + "@babel/helper-remap-async-to-generator": "^7.12.1" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz", - "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz", - "integrity": "sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz", + "integrity": "sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-classes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz", - "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.10.4", @@ -638,52 +634,52 @@ "@babel/helper-function-name": "^7.10.4", "@babel/helper-optimise-call-expression": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4", + "@babel/helper-replace-supers": "^7.12.1", "@babel/helper-split-export-declaration": "^7.10.4", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz", - "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-destructuring": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz", - "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz", - "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-create-regexp-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz", - "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz", - "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", "dev": true, "requires": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", @@ -691,18 +687,18 @@ } }, "@babel/plugin-transform-for-of": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz", - "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-function-name": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz", - "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", "dev": true, "requires": { "@babel/helper-function-name": "^7.10.4", @@ -710,237 +706,243 @@ } }, "@babel/plugin-transform-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz", - "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz", - "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz", - "integrity": "sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz", - "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.10.4", + "@babel/helper-simple-access": "^7.12.1", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz", - "integrity": "sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", + "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", "dev": true, "requires": { "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.10.5", + "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4", + "@babel/helper-validator-identifier": "^7.10.4", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "dependencies": { + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + } } }, "@babel/plugin-transform-modules-umd": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz", - "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", + "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.10.4", + "@babel/helper-module-transforms": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz", - "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", + "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4" + "@babel/helper-create-regexp-features-plugin": "^7.12.1" } }, "@babel/plugin-transform-new-target": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz", - "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", + "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-object-super": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz", - "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", + "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.10.4" + "@babel/helper-replace-supers": "^7.12.1" } }, "@babel/plugin-transform-parameters": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz", - "integrity": "sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-property-literals": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz", - "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", + "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-regenerator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz", - "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", + "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", "dev": true, "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz", - "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", + "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-runtime": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.5.tgz", - "integrity": "sha512-9aIoee+EhjySZ6vY5hnLjigHzunBlscx9ANKutkeWTJTx6m5Rbq6Ic01tLvO54lSusR+BxV7u4UDdCmXv5aagg==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.10.tgz", + "integrity": "sha512-xOrUfzPxw7+WDm9igMgQCbO3cJKymX7dFdsgRr1eu9n3KjjyU4pptIXbXPseQDquw+W+RuJEJMHKHNsPNNm3CA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.10.4", + "@babel/helper-module-imports": "^7.12.5", "@babel/helper-plugin-utils": "^7.10.4", - "resolve": "^1.8.1", "semver": "^5.5.1" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz", - "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", + "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-spread": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz", - "integrity": "sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.11.0" + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz", - "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", + "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-regex": "^7.10.4" + "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-template-literals": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz", - "integrity": "sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", + "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz", - "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==", + "version": "7.12.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz", + "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz", - "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", + "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz", - "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==", + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", + "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.10.4", + "@babel/helper-create-regexp-features-plugin": "^7.12.1", "@babel/helper-plugin-utils": "^7.10.4" } }, "@babel/preset-env": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.11.5.tgz", - "integrity": "sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz", + "integrity": "sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw==", "dev": true, "requires": { - "@babel/compat-data": "^7.11.0", - "@babel/helper-compilation-targets": "^7.10.4", - "@babel/helper-module-imports": "^7.10.4", + "@babel/compat-data": "^7.12.7", + "@babel/helper-compilation-targets": "^7.12.5", + "@babel/helper-module-imports": "^7.12.5", "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-proposal-async-generator-functions": "^7.10.4", - "@babel/plugin-proposal-class-properties": "^7.10.4", - "@babel/plugin-proposal-dynamic-import": "^7.10.4", - "@babel/plugin-proposal-export-namespace-from": "^7.10.4", - "@babel/plugin-proposal-json-strings": "^7.10.4", - "@babel/plugin-proposal-logical-assignment-operators": "^7.11.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4", - "@babel/plugin-proposal-numeric-separator": "^7.10.4", - "@babel/plugin-proposal-object-rest-spread": "^7.11.0", - "@babel/plugin-proposal-optional-catch-binding": "^7.10.4", - "@babel/plugin-proposal-optional-chaining": "^7.11.0", - "@babel/plugin-proposal-private-methods": "^7.10.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.10.4", + "@babel/helper-validator-option": "^7.12.11", + "@babel/plugin-proposal-async-generator-functions": "^7.12.1", + "@babel/plugin-proposal-class-properties": "^7.12.1", + "@babel/plugin-proposal-dynamic-import": "^7.12.1", + "@babel/plugin-proposal-export-namespace-from": "^7.12.1", + "@babel/plugin-proposal-json-strings": "^7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", + "@babel/plugin-proposal-numeric-separator": "^7.12.7", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.12.7", + "@babel/plugin-proposal-private-methods": "^7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.10.4", + "@babel/plugin-syntax-class-properties": "^7.12.1", "@babel/plugin-syntax-dynamic-import": "^7.8.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.0", @@ -950,45 +952,42 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.0", "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.10.4", - "@babel/plugin-transform-arrow-functions": "^7.10.4", - "@babel/plugin-transform-async-to-generator": "^7.10.4", - "@babel/plugin-transform-block-scoped-functions": "^7.10.4", - "@babel/plugin-transform-block-scoping": "^7.10.4", - "@babel/plugin-transform-classes": "^7.10.4", - "@babel/plugin-transform-computed-properties": "^7.10.4", - "@babel/plugin-transform-destructuring": "^7.10.4", - "@babel/plugin-transform-dotall-regex": "^7.10.4", - "@babel/plugin-transform-duplicate-keys": "^7.10.4", - "@babel/plugin-transform-exponentiation-operator": "^7.10.4", - "@babel/plugin-transform-for-of": "^7.10.4", - "@babel/plugin-transform-function-name": "^7.10.4", - "@babel/plugin-transform-literals": "^7.10.4", - "@babel/plugin-transform-member-expression-literals": "^7.10.4", - "@babel/plugin-transform-modules-amd": "^7.10.4", - "@babel/plugin-transform-modules-commonjs": "^7.10.4", - "@babel/plugin-transform-modules-systemjs": "^7.10.4", - "@babel/plugin-transform-modules-umd": "^7.10.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4", - "@babel/plugin-transform-new-target": "^7.10.4", - "@babel/plugin-transform-object-super": "^7.10.4", - "@babel/plugin-transform-parameters": "^7.10.4", - "@babel/plugin-transform-property-literals": "^7.10.4", - "@babel/plugin-transform-regenerator": "^7.10.4", - "@babel/plugin-transform-reserved-words": "^7.10.4", - "@babel/plugin-transform-shorthand-properties": "^7.10.4", - "@babel/plugin-transform-spread": "^7.11.0", - "@babel/plugin-transform-sticky-regex": "^7.10.4", - "@babel/plugin-transform-template-literals": "^7.10.4", - "@babel/plugin-transform-typeof-symbol": "^7.10.4", - "@babel/plugin-transform-unicode-escapes": "^7.10.4", - "@babel/plugin-transform-unicode-regex": "^7.10.4", + "@babel/plugin-syntax-top-level-await": "^7.12.1", + "@babel/plugin-transform-arrow-functions": "^7.12.1", + "@babel/plugin-transform-async-to-generator": "^7.12.1", + "@babel/plugin-transform-block-scoped-functions": "^7.12.1", + "@babel/plugin-transform-block-scoping": "^7.12.11", + "@babel/plugin-transform-classes": "^7.12.1", + "@babel/plugin-transform-computed-properties": "^7.12.1", + "@babel/plugin-transform-destructuring": "^7.12.1", + "@babel/plugin-transform-dotall-regex": "^7.12.1", + "@babel/plugin-transform-duplicate-keys": "^7.12.1", + "@babel/plugin-transform-exponentiation-operator": "^7.12.1", + "@babel/plugin-transform-for-of": "^7.12.1", + "@babel/plugin-transform-function-name": "^7.12.1", + "@babel/plugin-transform-literals": "^7.12.1", + "@babel/plugin-transform-member-expression-literals": "^7.12.1", + "@babel/plugin-transform-modules-amd": "^7.12.1", + "@babel/plugin-transform-modules-commonjs": "^7.12.1", + "@babel/plugin-transform-modules-systemjs": "^7.12.1", + "@babel/plugin-transform-modules-umd": "^7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", + "@babel/plugin-transform-new-target": "^7.12.1", + "@babel/plugin-transform-object-super": "^7.12.1", + "@babel/plugin-transform-parameters": "^7.12.1", + "@babel/plugin-transform-property-literals": "^7.12.1", + "@babel/plugin-transform-regenerator": "^7.12.1", + "@babel/plugin-transform-reserved-words": "^7.12.1", + "@babel/plugin-transform-shorthand-properties": "^7.12.1", + "@babel/plugin-transform-spread": "^7.12.1", + "@babel/plugin-transform-sticky-regex": "^7.12.7", + "@babel/plugin-transform-template-literals": "^7.12.1", + "@babel/plugin-transform-typeof-symbol": "^7.12.10", + "@babel/plugin-transform-unicode-escapes": "^7.12.1", + "@babel/plugin-transform-unicode-regex": "^7.12.1", "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.11.5", - "browserslist": "^4.12.0", - "core-js-compat": "^3.6.2", - "invariant": "^2.2.2", - "levenary": "^1.1.1", + "@babel/types": "^7.12.11", + "core-js-compat": "^3.8.0", "semver": "^5.5.0" } }, @@ -1006,38 +1005,38 @@ } }, "@babel/runtime": { - "version": "7.11.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.11.2.tgz", - "integrity": "sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw==", + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", + "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", - "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", "dev": true, "requires": { "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.10.4", - "@babel/types": "^7.10.4" + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" }, "dependencies": { "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "requires": { "@babel/highlight": "^7.10.4" } }, "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", "dev": true }, "@babel/highlight": { @@ -1054,35 +1053,35 @@ } }, "@babel/traverse": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.11.5.tgz", - "integrity": "sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", + "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", "dev": true, "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.11.5", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/parser": "^7.11.5", - "@babel/types": "^7.11.5", + "@babel/code-frame": "^7.12.11", + "@babel/generator": "^7.12.11", + "@babel/helper-function-name": "^7.12.11", + "@babel/helper-split-export-declaration": "^7.12.11", + "@babel/parser": "^7.12.11", + "@babel/types": "^7.12.12", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.19" }, "dependencies": { "@babel/code-frame": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", - "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, "requires": { "@babel/highlight": "^7.10.4" } }, "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", "dev": true }, "@babel/highlight": { @@ -1099,20 +1098,20 @@ } }, "@babel/types": { - "version": "7.11.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.11.5.tgz", - "integrity": "sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q==", + "version": "7.12.12", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", + "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.12.11", "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" }, "dependencies": { "@babel/helper-validator-identifier": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", - "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", "dev": true } } @@ -1370,9 +1369,9 @@ "dev": true }, "@types/node": { - "version": "14.11.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.1.tgz", - "integrity": "sha512-oTQgnd0hblfLsJ6BvJzzSL+Inogp3lq9fGgqRkMB/ziKMgEUaFl801OncOzUmalfzt14N0oPHMK47ipl+wbTIw==", + "version": "14.14.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", + "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==", "dev": true }, "@types/q": { @@ -1620,9 +1619,9 @@ } }, "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, "acorn-jsx": { @@ -1966,15 +1965,14 @@ } }, "babel-loader": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", - "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", "dev": true, "requires": { - "find-cache-dir": "^2.1.0", + "find-cache-dir": "^3.3.1", "loader-utils": "^1.4.0", - "mkdirp": "^0.5.3", - "pify": "^4.0.1", + "make-dir": "^3.1.0", "schema-utils": "^2.6.5" } }, @@ -2060,9 +2058,9 @@ } }, "base64-js": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true }, "batch": { @@ -2255,21 +2253,13 @@ } }, "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, "requires": { - "bn.js": "^4.1.0", + "bn.js": "^5.0.0", "randombytes": "^2.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } } }, "browserify-sign": { @@ -2318,15 +2308,16 @@ } }, "browserslist": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.3.tgz", - "integrity": "sha512-GcZPC5+YqyPO4SFnz48/B0YaCwS47Q9iPChRGi6t7HhflKBcINzFrJvRfC+jp30sRMKxF+d4EHGs27Z0XP1NaQ==", + "version": "4.16.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.0.tgz", + "integrity": "sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001131", - "electron-to-chromium": "^1.3.570", - "escalade": "^3.1.0", - "node-releases": "^1.1.61" + "caniuse-lite": "^1.0.30001165", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.621", + "escalade": "^3.1.1", + "node-releases": "^1.1.67" } }, "buffer": { @@ -2413,6 +2404,16 @@ "unset-value": "^1.0.0" } }, + "call-bind": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", + "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.0" + } + }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -2472,9 +2473,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001133", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001133.tgz", - "integrity": "sha512-s3XAUFaC/ntDb1O3lcw9K8MPeOW7KO3z9+GzAoBxfz1B0VdacXPMKgFUtG4KIsgmnbexmi013s9miVu4h+qMHw==", + "version": "1.0.30001173", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001173.tgz", + "integrity": "sha512-R3aqmjrICdGCTAnSXtNyvWYMK3YtV5jwudbq0T7nN9k4kmE4CBuwPqyJ+KBzepSTh0huivV2gLbSMEzTTmfeYw==", "dev": true }, "chalk": { @@ -2647,9 +2648,9 @@ } }, "collect.js": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.28.2.tgz", - "integrity": "sha512-Ok2z0kuyywWJ4AtkeUI61pbSxCmaN5XYr/fkUYJP4bYk6Dz3NKH2FA8RhF7i3Do9Iq80MLRFWasSOpyE9X7hDA==", + "version": "4.28.6", + "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.28.6.tgz", + "integrity": "sha512-NAyuk1DnCotRaDZIS5kJ4sptgkwOeYqElird10yziN5JBuwYOGkOTguhNcPn5g344IfylZecxNYZAVXgv19p5Q==", "dev": true }, "collection-visit": { @@ -2663,13 +2664,13 @@ } }, "color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", - "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", "dev": true, "requires": { "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "color-string": "^1.5.4" } }, "color-convert": { @@ -2688,9 +2689,9 @@ "dev": true }, "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", + "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", "dev": true, "requires": { "color-name": "^1.0.0", @@ -2882,12 +2883,12 @@ "dev": true }, "core-js-compat": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", - "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.2.tgz", + "integrity": "sha512-LO8uL9lOIyRRrQmZxHZFl1RV+ZbcsAkFWTktn5SmH40WgLtSNYN4m4W2v9ONT147PxBY/XrRhrWq8TlvObyUjQ==", "dev": true, "requires": { - "browserslist": "^4.8.5", + "browserslist": "^4.16.0", "semver": "7.0.0" }, "dependencies": { @@ -3137,9 +3138,9 @@ } }, "css-what": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.3.0.tgz", - "integrity": "sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", "dev": true }, "cssesc": { @@ -3226,28 +3227,28 @@ "dev": true }, "csso": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", - "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, "requires": { - "css-tree": "1.0.0-alpha.39" + "css-tree": "^1.1.2" }, "dependencies": { "css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz", + "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==", "dev": true, "requires": { - "mdn-data": "2.0.6", + "mdn-data": "2.0.14", "source-map": "^0.6.1" } }, "mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, "source-map": { @@ -3537,9 +3538,9 @@ }, "dependencies": { "domelementtype": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.2.tgz", - "integrity": "sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", "dev": true } } @@ -3606,9 +3607,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.570", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.570.tgz", - "integrity": "sha512-Y6OCoVQgFQBP5py6A/06+yWxUZHDlNr/gNDGatjH8AZqXl8X0tE4LfjLJsXGz/JmWJz8a6K7bR1k+QzZ+k//fg==", + "version": "1.3.634", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.634.tgz", + "integrity": "sha512-QPrWNYeE/A0xRvl/QP3E0nkaEvYUvH3gM04ZWYtIa6QlSpEetRlRI1xvQ7hiMIySHHEV+mwDSX8Kj4YZY6ZQAw==", "dev": true }, "elliptic": { @@ -3694,15 +3695,15 @@ } }, "entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true }, "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, "requires": { "prr": "~1.0.1" @@ -3797,9 +3798,9 @@ } }, "escalade": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.0.tgz", - "integrity": "sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true }, "escape-html": { @@ -4460,9 +4461,9 @@ "dev": true }, "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -4581,23 +4582,24 @@ } }, "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, "requires": { "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, "findup-sync": { @@ -4651,9 +4653,9 @@ } }, "follow-redirects": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", - "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", + "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==", "dev": true }, "for-in": { @@ -4792,9 +4794,9 @@ "dev": true }, "gensync": { - "version": "1.0.0-beta.1", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", - "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, "geojson-equality": { @@ -4822,6 +4824,17 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-intrinsic": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", + "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -5129,9 +5142,9 @@ "dev": true }, "html-entities": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", - "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", "dev": true }, "html-loader": { @@ -5197,6 +5210,12 @@ } } }, + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, "http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", @@ -5364,6 +5383,51 @@ "requires": { "pkg-dir": "^3.0.0", "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } } }, "imurmurhash": { @@ -5428,15 +5492,6 @@ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", @@ -5576,6 +5631,12 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "dev": true + }, "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", @@ -5606,6 +5667,12 @@ "is-extglob": "^2.1.1" } }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -5844,9 +5911,9 @@ "dev": true }, "laravel-mix": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-5.0.5.tgz", - "integrity": "sha512-ruogwsrTsmUpZU9x1Whgxh+gcEB/6IFJlL+ZTSrYt1SXfOsi8BgMI2R9RWvQpOyR+40VYl7n7Gsr+sHjfFb90Q==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-5.0.9.tgz", + "integrity": "sha512-1WCJiHimTRW3KlxcabRTco0q+bo4uKPaFTkc6cJ/bLEq4JT1aPkojoauUK7+PyiIlDJncw0Nt2MtDrv5C6j5IQ==", "dev": true, "requires": { "@babel/core": "^7.2.0", @@ -5907,21 +5974,6 @@ "webpack-sources": "^1.1.0" } }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levenary": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", - "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", - "dev": true, - "requires": { - "leven": "^3.1.0" - } - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -5961,13 +6013,12 @@ } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" } }, "lodash": { @@ -5989,20 +6040,11 @@ "dev": true }, "loglevel": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", - "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", + "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", "dev": true }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, "lower-case": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", @@ -6027,13 +6069,20 @@ } }, "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "map-cache": { @@ -6192,18 +6241,18 @@ "dev": true }, "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", "dev": true }, "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", "dev": true, "requires": { - "mime-db": "1.44.0" + "mime-db": "1.45.0" } }, "minimalistic-assert": { @@ -6459,35 +6508,80 @@ } }, "node-notifier": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.3.tgz", - "integrity": "sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", + "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", "dev": true, "requires": { "growly": "^1.3.0", - "is-wsl": "^1.1.0", - "semver": "^5.5.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", "shellwords": "^0.1.1", - "which": "^1.3.0" - } - }, - "node-releases": { - "version": "1.1.61", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.61.tgz", - "integrity": "sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true + "uuid": "^8.3.0", + "which": "^2.0.2" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "node-releases": { + "version": "1.1.69", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.69.tgz", + "integrity": "sha512-DGIjo79VDEyAnRlfSqYTsy+yoHd2IOjJiKUozD2MV2D85Vso6Bug56mb9tT/fY5Urt0iqk01H7x+llAruDR2zA==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true }, "normalize-url": { "version": "3.3.0", @@ -6596,13 +6690,63 @@ } }, "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz", + "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "es-abstract": "^1.18.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } } }, "object.omit": { @@ -6624,15 +6768,64 @@ } }, "object.values": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", - "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", + "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", "dev": true, "requires": { + "call-bind": "^1.0.0", "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", + "es-abstract": "^1.18.0-next.1", "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } } }, "obuf": { @@ -6729,12 +6922,12 @@ } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" } }, "p-map": { @@ -6864,9 +7057,9 @@ "dev": true }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "path-is-absolute": { @@ -6887,12 +7080,6 @@ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -6972,12 +7159,12 @@ "integrity": "sha1-Hwla1I3Ki/ihyCWOAJIDGkTyLKU=" }, "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "^4.0.0" } }, "portfinder": { @@ -6992,9 +7179,9 @@ }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -7009,9 +7196,9 @@ "dev": true }, "postcss": { - "version": "7.0.34", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.34.tgz", - "integrity": "sha512-H/7V2VeNScX9KE83GDrDZNiGT1m2H+UTnlinIzhjlLX9hfMUn1mHNnGeX81a1c8JSBdBvqk7c2ZOG6ZPn5itGw==", + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -7037,9 +7224,9 @@ } }, "postcss-calc": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.4.tgz", - "integrity": "sha512-0I79VRAd1UTkaHzY9w83P39YGO/M3bG7/tNLrHGEunBolfoGM0hSjrGvjoeaj0JE/zIw5GsI2KZ0UwDJqv5hjw==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", "dev": true, "requires": { "postcss": "^7.0.27", @@ -7123,9 +7310,9 @@ } }, "postcss-load-config": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.1.tgz", - "integrity": "sha512-D2ENobdoZsW0+BHy4x1CAkXtbXtYWYRIxL/JbtRBqrRGOPtJ2zoga/bEZWhV/ShWB5saVxJMzbMdSyA/vv4tXw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", "dev": true, "requires": { "cosmiconfig": "^5.0.0", @@ -7619,14 +7806,15 @@ } }, "postcss-selector-parser": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz", - "integrity": "sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", + "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", "dev": true, "requires": { "cssesc": "^3.0.0", "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "uniq": "^1.0.1", + "util-deprecate": "^1.0.2" } }, "postcss-svgo": { @@ -7924,9 +8112,9 @@ } }, "regenerate": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", - "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "regenerate-unicode-properties": { @@ -8069,15 +8257,6 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, "resolve-cwd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", @@ -8751,47 +8930,38 @@ } }, "sockjs": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", - "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", "dev": true, "requires": { - "faye-websocket": "^0.10.0", + "faye-websocket": "^0.11.3", "uuid": "^3.4.0", - "websocket-driver": "0.6.5" + "websocket-driver": "^0.7.4" } }, "sockjs-client": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", - "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.0.tgz", + "integrity": "sha512-8Dt3BDi4FYNrCFGTL/HtwVzkARrENdwOUf1ZoW/9p3M8lZdFT35jVdrHza+qgxuG9H3/shR4cuX/X9umUrjP8Q==", "dev": true, "requires": { - "debug": "^3.2.5", + "debug": "^3.2.6", "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.4.7" }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } } } }, @@ -9226,75 +9396,6 @@ "webpack-sources": "^1.4.3" }, "dependencies": { - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -9343,9 +9444,9 @@ "dev": true }, "timers-browserify": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", - "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, "requires": { "setimmediate": "^1.0.4" @@ -9423,9 +9524,9 @@ "dev": true }, "tslib": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "tty-browserify": { @@ -9813,9 +9914,9 @@ "dev": true }, "vue-loader": { - "version": "15.9.3", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.3.tgz", - "integrity": "sha512-Y67VnGGgVLH5Voostx8JBZgPQTlDQeOVBLOEsjc2cXbCYBKexSKEpOA56x0YZofoDOTszrLnIShyOX1p9uCEHA==", + "version": "15.9.6", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.6.tgz", + "integrity": "sha512-j0cqiLzwbeImIC6nVIby2o/ABAWhlppyL/m5oJ67R5MloP0hj/DtFgb0Zmq3J9CG7AJ+AXIvHVnJAPBvrLyuDg==", "dev": true, "requires": { "@vue/component-compiler-utils": "^3.1.0", @@ -9852,15 +9953,15 @@ "dev": true }, "watchpack": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", - "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", "dev": true, "requires": { "chokidar": "^3.4.1", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.0" + "watchpack-chokidar2": "^2.0.1" }, "dependencies": { "anymatch": { @@ -9892,9 +9993,9 @@ } }, "chokidar": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.2.tgz", - "integrity": "sha512-IZHaDeBeI+sZJRX7lGcXsdzgvZqKv6sECqsbErJA4mHWfpRrD8B97kSFN4cQz6nGBGiuFia1MKR4d6c1o8Cv7A==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", "dev": true, "optional": true, "requires": { @@ -9905,7 +10006,7 @@ "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.4.0" + "readdirp": "~3.5.0" } }, "fill-range": { @@ -9953,9 +10054,9 @@ "optional": true }, "readdirp": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz", - "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "dev": true, "optional": true, "requires": { @@ -9975,9 +10076,9 @@ } }, "watchpack-chokidar2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", - "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", "dev": true, "optional": true, "requires": { @@ -10047,6 +10148,70 @@ "y18n": "^4.0.0" } }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -10128,6 +10293,40 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -10178,9 +10377,9 @@ } }, "webpack-dev-middleware": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", - "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", "dev": true, "requires": { "memory-fs": "^0.4.1", @@ -10191,17 +10390,17 @@ }, "dependencies": { "mime": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", - "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==", + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz", + "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==", "dev": true } } }, "webpack-dev-server": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", - "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "version": "3.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz", + "integrity": "sha512-u4R3mRzZkbxQVa+MBWi2uVpB5W59H3ekZAJsQlKUTdl7Elcah2EhygTPLmeFXybQkf9i2+L0kn7ik9SnXa6ihQ==", "dev": true, "requires": { "ansi-html": "0.0.7", @@ -10224,11 +10423,11 @@ "p-retry": "^3.0.1", "portfinder": "^1.0.26", "schema-utils": "^1.0.0", - "selfsigned": "^1.10.7", + "selfsigned": "^1.10.8", "semver": "^6.3.0", "serve-index": "^1.9.1", - "sockjs": "0.3.20", - "sockjs-client": "1.4.0", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", "spdy": "^4.0.2", "strip-ansi": "^3.0.1", "supports-color": "^6.1.0", @@ -10245,12 +10444,46 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, "is-absolute-url": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "dev": true }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -10339,14 +10572,30 @@ } }, "webpack-notifier": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.8.0.tgz", - "integrity": "sha512-I6t76NoPe5DZCCm5geELmDV2wlJ89LbU425uN6T2FG8Ywrrt1ZcUMz6g8yWGNg4pttqTPFQJYUPjWAlzUEQ+cQ==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.12.0.tgz", + "integrity": "sha512-urRnbKupMQHUplsiwsOajp1F1DCJgJ+yyT4HIxAP+TfMF+ZtsKW+kVt2UcDm1E88xutOst+VChJZMDAD3aec5w==", "dev": true, "requires": { - "node-notifier": "^5.1.2", - "object-assign": "^4.1.0", - "strip-ansi": "^3.0.1" + "node-notifier": "^8.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } } }, "webpack-sources": { @@ -10368,11 +10617,13 @@ } }, "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, @@ -10482,9 +10733,9 @@ "dev": true }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true }, "yallist": { @@ -10519,12 +10770,11 @@ "dev": true }, "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "@types/color-name": "^1.1.1", "color-convert": "^2.0.1" } }, @@ -10560,46 +10810,12 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", diff --git a/package.json b/package.json index 51aec8582..b849f9033 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "cross-env": "^5.1", "eslint": "^7.3.1", "eslint-plugin-vue": "^6.2.2", - "laravel-mix": "^5.0.5", + "laravel-mix": "^5.0.9", "laravel-mix-artisan-publish": "git://github.com/mzur/laravel-mix-artisan-publish.git", "resolve-url-loader": "^3.1.2", "sass": "^1.15.2", From aac60192fcbee2211091950cfa005d379a703404 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Jan 2021 10:06:43 +0100 Subject: [PATCH 245/407] Add support for all image annotation shapes to AnnotationLocationReport --- .../AnnotationLocationReportGenerator.php | 93 ++++-- .../AnnotationLocationReportGeneratorTest.php | 265 +++++++++++++++++- 2 files changed, 337 insertions(+), 21 deletions(-) diff --git a/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php index ac359f50c..7d6fc5099 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php @@ -6,15 +6,25 @@ use Biigle\LabelTree; use Biigle\Modules\Reports\Support\File; use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; +use Biigle\Shape; use DB; use GeoJson\Feature\Feature; use GeoJson\Feature\FeatureCollection; +use GeoJson\Geometry\LineString; use GeoJson\Geometry\Point; +use GeoJson\Geometry\Polygon; class AnnotationLocationReportGenerator extends AnnotationReportGenerator { use MakesZipArchives; + /** + * Earth radius in cm. + * + * @var int + */ + const EARTH_RADIUS = 6378137; + /** * Name of the report for use in text. * @@ -76,6 +86,7 @@ public function query() 'image_annotation_labels.id as annotation_label_id', 'image_annotation_labels.label_id', 'image_annotations.image_id', + 'image_annotations.shape_id', 'images.filename', 'images.attrs->metadata->yaw as yaw', 'images.attrs->metadata->distance_to_ground as distance_to_ground', @@ -139,15 +150,28 @@ protected function estimateAnnotationPosition($item) // First calculate the offset of the annotation from the image center in pixels. $imageCenter = [$item->width / 2, $item->height / 2]; - $points = json_decode($item->points); + $flatPoints = json_decode($item->points); + + // GeoJSON does no support circles so we treat them as points. + if ($item->shape_id === Shape::circleId()) { + unset($flatPoints[2]); + } + + $points = []; + $limit = count($flatPoints) - 1; + for ($i = 0; $i < $limit; $i += 2) { + $points[] = [$flatPoints[$i], $flatPoints[$i + 1]]; + } // Annotation position relative to the image center. Also, change the y axis from // going top down to going bottom up. This is required for the correct rotation // and shift calculation below. - $pointsOffsetInPx = [ - $points[0] - $imageCenter[0], - ($item->height - $points[1]) - $imageCenter[1], - ]; + $pointsOffsetInPx = array_map(function ($point) use ($item, $imageCenter) { + return [ + $point[0] - $imageCenter[0], + ($item->height - $point[1]) - $imageCenter[1], + ]; + }, $points); // Now rotate the annotation position around the image center according to the // yaw. This assumes that 0° yaw is north and 90° yaw is east. @@ -160,10 +184,12 @@ protected function estimateAnnotationPosition($item) // We don't need to shift the rotated coordinates back by adding $imageCenter, // as we assume that latitude and longitude describe the image center point and // not [0, 0], so the center is the "origin" here. - $rotatedOffsetInPx = [ - $pointsOffsetInPx[0] * cos($angle) - $pointsOffsetInPx[1] * sin($angle), - $pointsOffsetInPx[0] * sin($angle) + $pointsOffsetInPx[1] * cos($angle), - ]; + $rotatedOffsetInPx = array_map(function ($point) use ($angle) { + return [ + $point[0] * cos($angle) - $point[1] * sin($angle), + $point[0] * sin($angle) + $point[1] * cos($angle), + ]; + }, $pointsOffsetInPx); // Then convert the pixel offset to meters. @@ -185,24 +211,51 @@ protected function estimateAnnotationPosition($item) $scalingFactor = $imageWidthInM / $item->width; $rotatedOffsetInM = array_map(function($point) use ($scalingFactor) { - return $point * $scalingFactor; + return [ + $point[0] * $scalingFactor, + $point[1] * $scalingFactor, + ]; }, $rotatedOffsetInPx); // Finally, shift the image coordinates by the offset in meters to estimate the // annotation position. // See: https://gis.stackexchange.com/a/2980/50820 - $R = 6378137; + $rotatedOffsetInRadians = array_map(function ($point) use ($item) { + return [ + $point[0] / (self::EARTH_RADIUS * cos(M_PI * $item->lat / 180)), + $point[1] / self::EARTH_RADIUS, + ]; + }, $rotatedOffsetInM); - $rotatedOffsetInRadians = [ - $rotatedOffsetInM[0] / ($R * cos(M_PI * $item->lat / 180)), - $rotatedOffsetInM[1] / $R, - ]; + $coordinates = array_map(function ($point) use ($item) { + // Shifted image center position. + return [ + $item->lng + $point[0] * 180 / M_PI, + $item->lat + $point[1] * 180 / M_PI, + ]; + }, $rotatedOffsetInRadians); + + switch ($item->shape_id) { + case Shape::pointId(): + case Shape::circleId(): + return new Point($coordinates[0]); + case Shape::lineId(): + return new LineString($coordinates); + } + + // The last polygon coordinate must equal the first. + $last = count($coordinates) - 1; + if ($coordinates[0][0] !== $coordinates[$last][0] || $coordinates[0][1] !== $coordinates[$last][1]) { + $coordinates[] = $coordinates[0]; + } + + // Catch some edge cases where a polygon does not have at least three unique + // coordinates (triangle). + while (count($coordinates) < 4) { + $coordinates[] = $coordinates[0]; + } - // Shifted image center position. - return new Point([ - $item->lng + $rotatedOffsetInRadians[0] * 180 / M_PI, - $item->lat + $rotatedOffsetInRadians[1] * 180 / M_PI, - ]); + return new Polygon([$coordinates]); } } diff --git a/tests/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGeneratorTest.php index c54a43280..8a2a33887 100644 --- a/tests/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGeneratorTest.php @@ -5,6 +5,7 @@ use App; use Biigle\Modules\Reports\Support\File; use Biigle\Modules\Reports\Support\Reports\Volumes\ImageAnnotations\AnnotationLocationReportGenerator; +use Biigle\Shape; use Biigle\Tests\ImageAnnotationLabelTest; use Biigle\Tests\ImageAnnotationTest; use Biigle\Tests\ImageTest; @@ -25,7 +26,7 @@ public function testProperties() $this->assertStringEndsWith('.zip', $generator->getFullFilename()); } - public function testGenerateReportPoint() + public function testGenerateReport() { $volume = VolumeTest::create([ 'name' => 'My Cool Volume', @@ -52,6 +53,7 @@ public function testGenerateReportPoint() ]); $a = ImageAnnotationTest::create([ + 'shape_id' => Shape::pointId(), 'points' => [10, 10], 'image_id' => $image->id, ]); @@ -118,17 +120,277 @@ public function testGenerateReportPoint() public function testGenerateReportCircle() { + $volume = VolumeTest::create(); + + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + + $image = ImageTest::create([ + 'volume_id' => $volume->id, + 'lat' => 51.0, + 'lng' => 0.0, + 'attrs' => [ + 'width' => 100, + 'height' => 100, + 'metadata' => [ + 'yaw' => 90, + 'distance_to_ground' => 10, + ], + ], + ]); + + $a = ImageAnnotationTest::create([ + 'shape_id' => Shape::circleId(), + 'points' => [10, 10, 10], + 'image_id' => $image->id, + ]); + + $al = ImageAnnotationLabelTest::create([ + 'label_id' => $child->id, + 'annotation_id' => $a->id, + ]); + + $mock = Mockery::mock(); + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); + + $jsonContent = [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'Point', + 'coordinates' => [0.000114194969290087, 51.00007186522273], + ], + 'properties' => [ + '_id' => $al->id, + '_image_id' => $image->id, + '_image_filename' => 'test-image.jpg', + '_image_latitude' => $image->lat, + '_image_longitude' => $image->lng, + '_label_name' => $child->name, + '_label_id' => $child->id, + ], + ]; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(File::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once(); + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new AnnotationLocationReportGenerator; + $generator->setSource($volume); + $generator->generateReport('my/path'); } public function testGenerateReportLineString() { + $volume = VolumeTest::create(); + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + + $image = ImageTest::create([ + 'volume_id' => $volume->id, + 'lat' => 51.0, + 'lng' => 0.0, + 'attrs' => [ + 'width' => 100, + 'height' => 100, + 'metadata' => [ + 'yaw' => 90, + 'distance_to_ground' => 10, + ], + ], + ]); + + $a = ImageAnnotationTest::create([ + 'shape_id' => Shape::lineId(), + 'points' => [10, 10, 20, 20], + 'image_id' => $image->id, + ]); + + $al = ImageAnnotationLabelTest::create([ + 'label_id' => $child->id, + 'annotation_id' => $a->id, + ]); + + $mock = Mockery::mock(); + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); + + $jsonContent = [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'LineString', + 'coordinates' => [ + [0.000114194969290087, 51.00007186522273], + [8.564622696756525e-5, 51.000053898917045], + ], + ], + 'properties' => [ + '_id' => $al->id, + '_image_id' => $image->id, + '_image_filename' => 'test-image.jpg', + '_image_latitude' => $image->lat, + '_image_longitude' => $image->lng, + '_label_name' => $child->name, + '_label_id' => $child->id, + ], + ]; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(File::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once(); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new AnnotationLocationReportGenerator; + $generator->setSource($volume); + $generator->generateReport('my/path'); } public function testGenerateReportPolygon() { + $volume = VolumeTest::create(); + + $root = LabelTest::create(); + $child = LabelTest::create([ + 'parent_id' => $root->id, + 'label_tree_id' => $root->label_tree_id, + ]); + $image = ImageTest::create([ + 'volume_id' => $volume->id, + 'lat' => 51.0, + 'lng' => 0.0, + 'attrs' => [ + 'width' => 100, + 'height' => 100, + 'metadata' => [ + 'yaw' => 90, + 'distance_to_ground' => 10, + ], + ], + ]); + + $a = ImageAnnotationTest::create([ + 'shape_id' => Shape::polygonId(), + 'points' => [10, 10, 20, 20, 30, 30], + 'image_id' => $image->id, + ]); + + $al = ImageAnnotationLabelTest::create([ + 'label_id' => $child->id, + 'annotation_id' => $a->id, + ]); + + $mock = Mockery::mock(); + + $mock->shouldReceive('getPath') + ->once() + ->andReturn('abc'); + + $jsonContent = [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'Polygon', + 'coordinates' => [[ + [0.000114194969290087, 51.00007186522273], + [8.564622696756525e-5, 51.000053898917045], + [5.70974846450435e-5, 51.00003593261137], + [0.000114194969290087, 51.00007186522273], + ]], + ], + 'properties' => [ + '_id' => $al->id, + '_image_id' => $image->id, + '_image_filename' => 'test-image.jpg', + '_image_latitude' => $image->lat, + '_image_longitude' => $image->lng, + '_label_name' => $child->name, + '_label_id' => $child->id, + ], + ]; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $mock->shouldReceive('close') + ->once(); + + App::singleton(File::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once(); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new AnnotationLocationReportGenerator; + $generator->setSource($volume); + $generator->generateReport('my/path'); } public function testGenerateReportNoCoordinates() @@ -192,6 +454,7 @@ public function testGenerateReportSeparateLabelTrees() ]); $annotation = ImageAnnotationTest::create([ + 'shape_id' => Shape::pointId(), 'points' => [10, 10], 'image_id' => $image->id, ]); From 9c83893040120af58c25aa445424797e157cc3fd Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Jan 2021 10:10:49 +0100 Subject: [PATCH 246/407] Fix image annotation location report request validation --- src/Http/Requests/StoreVolumeReport.php | 2 +- .../Controllers/Api/Volumes/VolumeReportControllerTest.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Http/Requests/StoreVolumeReport.php b/src/Http/Requests/StoreVolumeReport.php index 1c5cefcb6..8caea3cb9 100644 --- a/src/Http/Requests/StoreVolumeReport.php +++ b/src/Http/Requests/StoreVolumeReport.php @@ -80,7 +80,7 @@ public function withValidator($validator) $validator->errors()->add('id', 'The volume images have no geo coordinates.'); } - if ($typeId === ReportType::imageAnnotationsImageLocationId()) { + if ($typeId === ReportType::imageAnnotationsAnnotationLocationId()) { $hasImagesWithMetadata = $this->volume->images() ->whereNotNull('attrs->metadata->yaw') ->whereNotNull('attrs->metadata->distance_to_ground') diff --git a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php index f6e58b4ac..1b5c9893d 100644 --- a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php +++ b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php @@ -197,7 +197,7 @@ public function testStoreImageAnnotationAnnotationLocationWithoutLatLngYawDistan $image = ImageTest::create(['volume_id' => $volumeId]); $this->postJson("api/v1/volumes/{$volumeId}/reports", [ - 'type_id' => ReportType::imageAnnotationsImageLocationId(), + 'type_id' => ReportType::imageAnnotationsAnnotationLocationId(), ]) // Metadata missing. ->assertStatus(422); @@ -212,7 +212,7 @@ public function testStoreImageAnnotationAnnotationLocationWithoutLatLngYawDistan $this->volume()->flushGeoInfoCache(); $this->postJson("api/v1/volumes/{$volumeId}/reports", [ - 'type_id' => ReportType::imageAnnotationsImageLocationId(), + 'type_id' => ReportType::imageAnnotationsAnnotationLocationId(), ]) // Width/height missing. ->assertStatus(422); From aacdf2b183fcb499703e3841ade2800023fd4af9 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Jan 2021 15:02:25 +0100 Subject: [PATCH 247/407] Implement AnnotationLocationReport for projects --- .../AnnotationLocationReportGenerator.php | 29 +++++++++++++++++++ .../AnnotationLocationReportGeneratorTest.php | 16 ++++++++++ 2 files changed, 45 insertions(+) create mode 100644 src/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGenerator.php create mode 100644 tests/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGeneratorTest.php diff --git a/src/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGenerator.php b/src/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGenerator.php new file mode 100644 index 000000000..206741430 --- /dev/null +++ b/src/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGenerator.php @@ -0,0 +1,29 @@ +assertEquals('annotation location image annotation report', $generator->getName()); + $this->assertEquals('annotation_location_image_annotation_report', $generator->getFilename()); + } +} From f3a8834f97dc6b6dca9d2d9d955a07c0090c0194 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Jan 2021 15:06:01 +0100 Subject: [PATCH 248/407] Fix validation for reports that require metadata --- src/Http/Requests/StoreProjectReport.php | 116 ++++++++++--- src/Http/Requests/StoreReport.php | 10 +- src/Http/Requests/StoreVolumeReport.php | 8 +- .../Projects/ProjectReportControllerTest.php | 154 +++++++++++++++--- .../Volumes/VolumeReportControllerTest.php | 48 +++++- 5 files changed, 287 insertions(+), 49 deletions(-) diff --git a/src/Http/Requests/StoreProjectReport.php b/src/Http/Requests/StoreProjectReport.php index 01f272b35..7d6efb9ea 100644 --- a/src/Http/Requests/StoreProjectReport.php +++ b/src/Http/Requests/StoreProjectReport.php @@ -3,6 +3,7 @@ namespace Biigle\Modules\Reports\Http\Requests; use Biigle\Modules\Reports\ReportType; +use Biigle\Image; use Biigle\Project; use Illuminate\Validation\Rule; @@ -50,27 +51,100 @@ public function withValidator($validator) parent::withValidator($validator); $validator->after(function ($validator) { - $imageReports = [ - ReportType::imageAnnotationsAreaId(), - ReportType::imageAnnotationsBasicId(), - ReportType::imageAnnotationsCsvId(), - ReportType::imageAnnotationsExtendedId(), - ReportType::imageAnnotationsFullId(), - ReportType::imageAnnotationsAbundanceId(), - ReportType::imageLabelsBasicId(), - ReportType::imageLabelsCsvId(), - ]; - - $videoReports = [ - ReportType::videoAnnotationsCsvId(), - ReportType::videoLabelsCsvId(), - ]; - - if ($this->isType($imageReports) && !$this->project->imageVolumes()->exists()) { - $validator->errors()->add('type_id', 'The project does not contain any image volumes.'); - } elseif ($this->isType($videoReports) && !$this->project->videoVolumes()->exists()) { - $validator->errors()->add('type_id', 'The project does not contain any video volumes.'); - } + $this->validateReportType($validator); + $this->validateGeoInfo($validator); + $this->validateImageMetadata($validator); }); } + + /** + * Validate the report types. + * + * @param \Illuminate\Validator\Validator $validator + */ + protected function validateReportType($validator) + { + $imageReports = [ + ReportType::imageAnnotationsAreaId(), + ReportType::imageAnnotationsBasicId(), + ReportType::imageAnnotationsCsvId(), + ReportType::imageAnnotationsExtendedId(), + ReportType::imageAnnotationsFullId(), + ReportType::imageAnnotationsAbundanceId(), + ReportType::imageAnnotationsImageLocationId(), + ReportType::imageAnnotationsAnnotationLocationId(), + ReportType::imageLabelsBasicId(), + ReportType::imageLabelsCsvId(), + ReportType::imageLabelsImageLocationId(), + ]; + + $videoReports = [ + ReportType::videoAnnotationsCsvId(), + ReportType::videoLabelsCsvId(), + ]; + + if ($this->isType($imageReports) && !$this->project->imageVolumes()->exists()) { + $validator->errors()->add('type_id', 'The project does not contain any image volumes.'); + } elseif ($this->isType($videoReports) && !$this->project->videoVolumes()->exists()) { + $validator->errors()->add('type_id', 'The project does not contain any video volumes.'); + } + } + + /** + * Validate the geo info for certain types. + * + * @param \Illuminate\Validator\Validator $validator + */ + protected function validateGeoInfo($validator) + { + $needsGeoInfo = [ + ReportType::imageAnnotationsAnnotationLocationId(), + ReportType::imageAnnotationsImageLocationId(), + ReportType::imageLabelsImageLocationId(), + ]; + + if ($this->isType($needsGeoInfo)) { + $hasGeoInfo = $this->project->imageVolumes() + ->select('id') + ->get() + ->reduce(function ($carry, $volume) { + return $carry && $volume->hasGeoInfo(); + }, true); + + if (!$hasGeoInfo) { + $validator->errors()->add('id', 'No volume has images with geo coordinates.'); + } + } + } + + /** + * Validate image metadata for certain types. + * + * @param \Illuminate\Validator\Validator $validator + */ + protected function validateImageMetadata($validator) + { + if ($this->isType(ReportType::imageAnnotationsAnnotationLocationId())) { + $query = Image::join('project_volume', 'project_volume.volume_id', '=', 'images.volume_id') + ->where('project_volume.project_id', $this->project->id); + + $hasImagesWithMetadata = (clone $query) + ->whereNotNull('attrs->metadata->yaw') + ->whereNotNull('attrs->metadata->distance_to_ground') + ->exists(); + + if (!$hasImagesWithMetadata) { + $validator->errors()->add('id', 'No volume has images with yaw and/or distance to ground metadata.'); + } + + $hasImagesWithDimensions = (clone $query) + ->whereNotNull('attrs->width') + ->whereNotNull('attrs->height') + ->exists(); + + if (!$hasImagesWithDimensions) { + $validator->errors()->add('id', 'No volume has images with dimension information. Try again later if the images are new and still being processed.'); + } + } + } } diff --git a/src/Http/Requests/StoreReport.php b/src/Http/Requests/StoreReport.php index abcdd4c9d..55fadca44 100644 --- a/src/Http/Requests/StoreReport.php +++ b/src/Http/Requests/StoreReport.php @@ -76,13 +76,19 @@ public function getOptions() /** * Check if the requested reporty type ID is in the supplied array. * - * @param array $allowed + * @param array|int $allowed * * @return boolean */ protected function isType($allowed) { - return in_array(intval($this->input('type_id')), $allowed); + $id = intval($this->input('type_id')); + + if (is_array($allowed)) { + return in_array($id, $allowed); + } + + return $id === $allowed; } /** diff --git a/src/Http/Requests/StoreVolumeReport.php b/src/Http/Requests/StoreVolumeReport.php index 8caea3cb9..040eaa2a6 100644 --- a/src/Http/Requests/StoreVolumeReport.php +++ b/src/Http/Requests/StoreVolumeReport.php @@ -43,6 +43,7 @@ public function rules() ReportType::imageAnnotationsFullId(), ReportType::imageAnnotationsAbundanceId(), ReportType::imageAnnotationsImageLocationId(), + ReportType::imageAnnotationsAnnotationLocationId(), ReportType::imageLabelsBasicId(), ReportType::imageLabelsCsvId(), ReportType::imageLabelsImageLocationId(), @@ -50,6 +51,7 @@ public function rules() } else { $types = [ ReportType::videoAnnotationsCsvId(), + ReportType::videoLabelsCsvId(), ]; } @@ -70,17 +72,17 @@ public function withValidator($validator) parent::withValidator($validator); $validator->after(function ($validator) { - $typeId = intval($this->input('type_id')); $needsGeoInfo = [ + ReportType::imageAnnotationsAnnotationLocationId(), ReportType::imageAnnotationsImageLocationId(), ReportType::imageLabelsImageLocationId(), ]; - if (in_array($typeId, $needsGeoInfo) && !$this->volume->hasGeoInfo()) { + if ($this->isType($needsGeoInfo) && !$this->volume->hasGeoInfo()) { $validator->errors()->add('id', 'The volume images have no geo coordinates.'); } - if ($typeId === ReportType::imageAnnotationsAnnotationLocationId()) { + if ($this->isType(ReportType::imageAnnotationsAnnotationLocationId())) { $hasImagesWithMetadata = $this->volume->images() ->whereNotNull('attrs->metadata->yaw') ->whereNotNull('attrs->metadata->distance_to_ground') diff --git a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php index 1d3d851e8..8a7ded749 100644 --- a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php @@ -6,6 +6,7 @@ use Biigle\MediaType; use Biigle\Modules\Reports\Jobs\GenerateReportJob; use Biigle\Modules\Reports\ReportType; +use Biigle\Tests\ImageTest; use Biigle\Tests\LabelTest; class ProjectReportControllerTest extends ApiTestCase @@ -57,28 +58,6 @@ public function testStore() $this->assertEquals(true, $report->options['newestLabel']); } - public function testStoreNoImageVolumes() - { - $projectId = $this->project()->id; - $this->volume(['media_type_id' => MediaType::videoId()]); - $this->beGuest(); - $this->postJson("api/v1/projects/{$projectId}/reports", [ - 'type_id' => ReportType::imageAnnotationsBasicId(), - ]) - ->assertStatus(422); - } - - public function testStoreNoVideoVolumes() - { - $projectId = $this->project()->id; - $this->volume(); - $this->beGuest(); - $this->postJson("api/v1/projects/{$projectId}/reports", [ - 'type_id' => ReportType::videoAnnotationsCsvId(), - ]) - ->assertStatus(422); - } - public function testStoreVideoVolume() { $projectId = $this->project()->id; @@ -99,6 +78,53 @@ public function testStoreVideoVolume() $this->assertArrayNotHasKey('aggregateChildLabels', $report->options); } + public function testStoreNoVideoVolumes() + { + $projectId = $this->project()->id; + $this->volume(['media_type_id' => MediaType::imageId()]); + + $types = [ + ReportType::videoAnnotationsCsvId(), + ReportType::videoLabelsCsvId(), + ]; + + $this->beGuest(); + foreach ($types as $typeId) { + $this->json('POST', "api/v1/projects/{$projectId}/reports", [ + 'type_id' => $typeId, + ]) + ->assertStatus(422); + } + } + + public function testStoreNoImageVolumes() + { + $projectId = $this->project()->id; + $this->volume(['media_type_id' => MediaType::videoId()]); + + $types = [ + ReportType::imageAnnotationsAreaId(), + ReportType::imageAnnotationsBasicId(), + ReportType::imageAnnotationsCsvId(), + ReportType::imageAnnotationsExtendedId(), + ReportType::imageAnnotationsFullId(), + ReportType::imageAnnotationsAbundanceId(), + ReportType::imageAnnotationsImageLocationId(), + ReportType::imageAnnotationsAnnotationLocationId(), + ReportType::imageLabelsBasicId(), + ReportType::imageLabelsCsvId(), + ReportType::imageLabelsImageLocationId(), + ]; + + $this->beGuest(); + foreach ($types as $typeId) { + $this->json('POST', "api/v1/projects/{$projectId}/reports", [ + 'type_id' => $typeId, + ]) + ->assertStatus(422); + } + } + public function testStoreOnlyLabels() { $this->beGuest(); @@ -119,4 +145,88 @@ public function testStoreOnlyLabels() ]) ->assertStatus(200); } + + public function testStoreImageLabelImageLocationWithoutLatLng() + { + $this->beGuest(); + $label = LabelTest::create(); + $projectId = $this->project()->id; + $image = ImageTest::create(['volume_id' => $this->volume()->id]); + + $this->postJson("api/v1/projects/{$projectId}/reports", [ + 'type_id' => ReportType::imageLabelsImageLocationId(), + ]) + ->assertStatus(422); + + $image->lat = 1; + $image->lng = 1; + $image->save(); + $this->volume()->flushGeoInfoCache(); + + $this->postJson("api/v1/projects/{$projectId}/reports", [ + 'type_id' => ReportType::imageLabelsImageLocationId(), + ]) + ->assertStatus(200); + } + + public function testStoreImageAnnotationImageLocationWithoutLatLng() + { + $this->beGuest(); + $label = LabelTest::create(); + $projectId = $this->project()->id; + $image = ImageTest::create(['volume_id' => $this->volume()->id]); + + $this->postJson("api/v1/projects/{$projectId}/reports", [ + 'type_id' => ReportType::imageAnnotationsImageLocationId(), + ]) + ->assertStatus(422); + + $image->lat = 1; + $image->lng = 1; + $image->save(); + $this->volume()->flushGeoInfoCache(); + + $this->postJson("api/v1/projects/{$projectId}/reports", [ + 'type_id' => ReportType::imageAnnotationsImageLocationId(), + ]) + ->assertStatus(200); + } + + public function testStoreImageAnnotationAnnotationLocationWithoutLatLngYawDistance() + { + $this->beGuest(); + $label = LabelTest::create(); + $projectId = $this->project()->id; + $image = ImageTest::create(['volume_id' => $this->volume()->id]); + + $this->postJson("api/v1/projects/{$projectId}/reports", [ + 'type_id' => ReportType::imageAnnotationsAnnotationLocationId(), + ]) + // Metadata missing. + ->assertStatus(422); + + $image->lat = 1; + $image->lng = 1; + $image->metadata = [ + 'yaw' => 90, + 'distance_to_ground' => 10, + ]; + $image->save(); + $this->volume()->flushGeoInfoCache(); + + $this->postJson("api/v1/projects/{$projectId}/reports", [ + 'type_id' => ReportType::imageAnnotationsAnnotationLocationId(), + ]) + // Width/height missing. + ->assertStatus(422); + + $image->width = 1; + $image->height = 1; + $image->save(); + + $this->postJson("api/v1/projects/{$projectId}/reports", [ + 'type_id' => ReportType::imageAnnotationsAnnotationLocationId(), + ]) + ->assertStatus(200); + } } diff --git a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php index 1b5c9893d..f71278318 100644 --- a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php +++ b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php @@ -56,6 +56,33 @@ public function testStore() $this->assertEquals(true, $report->options['newestLabel']); } + public function testStoreImageVolumeTypes() + { + $volumeId = $this->volume(['media_type_id' => MediaType::imageId()])->id; + + $types = [ + ReportType::imageAnnotationsAreaId(), + ReportType::imageAnnotationsBasicId(), + ReportType::imageAnnotationsCsvId(), + ReportType::imageAnnotationsExtendedId(), + ReportType::imageAnnotationsFullId(), + ReportType::imageAnnotationsAbundanceId(), + ReportType::imageLabelsBasicId(), + ReportType::imageLabelsCsvId(), + // imageAnnotationImageLocation is tested below + // imageAnnotationAnnotationLocation is tested below + // imageLabelImageLocation is tested below + ]; + + $this->beGuest(); + foreach ($types as $typeId) { + $this->json('POST', "api/v1/volumes/{$volumeId}/reports", [ + 'type_id' => $typeId, + ]) + ->assertStatus(200); + } + } + public function testStoreInvalidVideoAnnotations() { $volumeId = $this->volume()->id; @@ -104,6 +131,25 @@ public function testStoreVideoVolume() ->assertStatus(200); } + + public function testStoreVideoVolumeTypes() + { + $volumeId = $this->volume(['media_type_id' => MediaType::videoId()])->id; + + $types = [ + ReportType::videoAnnotationsCsvId(), + ReportType::videoLabelsCsvId(), + ]; + + $this->beGuest(); + foreach ($types as $typeId) { + $this->json('POST', "api/v1/volumes/{$volumeId}/reports", [ + 'type_id' => $typeId, + ]) + ->assertStatus(200); + } + } + public function testStoreInvalidImageAnnotations() { $volumeId = $this->volume(['media_type_id' => MediaType::videoId()])->id; @@ -222,7 +268,7 @@ public function testStoreImageAnnotationAnnotationLocationWithoutLatLngYawDistan $image->save(); $this->postJson("api/v1/volumes/{$volumeId}/reports", [ - 'type_id' => ReportType::imageAnnotationsImageLocationId(), + 'type_id' => ReportType::imageAnnotationsAnnotationLocationId(), ]) ->assertStatus(200); } From e6096e7f6b6671577978435894393eb6ae532db6 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Jan 2021 15:20:59 +0100 Subject: [PATCH 249/407] Include only valid volumes in project location reports --- .../AnnotationLocationReportGenerator.php | 23 +++++++++++++ .../ImageLocationReportGenerator.php | 19 +++++++++++ .../ImageLocationReportGenerator.php | 19 +++++++++++ .../Projects/ProjectImageReportGenerator.php | 2 +- .../Projects/ProjectReportGenerator.php | 13 ++++---- .../Projects/ProjectVideoReportGenerator.php | 2 +- .../AnnotationLocationReportGeneratorTest.php | 32 +++++++++++++++++++ .../ImageLocationReportGeneratorTest.php | 24 ++++++++++++++ .../ImageLocationReportGeneratorTest.php | 24 ++++++++++++++ .../Projects/ProjectReportGeneratorTest.php | 2 +- 10 files changed, 151 insertions(+), 9 deletions(-) diff --git a/src/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGenerator.php b/src/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGenerator.php index 206741430..627a51479 100644 --- a/src/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGenerator.php +++ b/src/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGenerator.php @@ -3,6 +3,7 @@ namespace Biigle\Modules\Reports\Support\Reports\Projects\ImageAnnotations; use Biigle\Modules\Reports\Support\Reports\Volumes\ImageAnnotations\AnnotationLocationReportGenerator as ReportGenerator; +use DB; class AnnotationLocationReportGenerator extends AnnotationReportGenerator { @@ -26,4 +27,26 @@ class AnnotationLocationReportGenerator extends AnnotationReportGenerator * @var string */ protected $filename = 'annotation_location_image_annotation_report'; + + /** + * Get sources for the sub-reports that should be generated for this project. + * + * @return mixed + */ + public function getProjectSources() + { + return $this->source->imageVolumes() + ->whereExists(function ($query) { + $query->select(DB::raw(1)) + ->from('images') + ->whereColumn('images.volume_id', 'volumes.id') + ->whereNotNull('images.lat') + ->whereNotNull('images.lng') + ->whereNotNull('images.attrs->width') + ->whereNotNull('images.attrs->height') + ->whereNotNull('images.attrs->metadata->yaw') + ->whereNotNull('images.attrs->metadata->distance_to_ground'); + }) + ->get(); + } } diff --git a/src/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGenerator.php b/src/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGenerator.php index 62be593e3..d27d7ee37 100644 --- a/src/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGenerator.php +++ b/src/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGenerator.php @@ -3,6 +3,7 @@ namespace Biigle\Modules\Reports\Support\Reports\Projects\ImageAnnotations; use Biigle\Modules\Reports\Support\Reports\Volumes\ImageAnnotations\ImageLocationReportGenerator as ReportGenerator; +use DB; class ImageLocationReportGenerator extends AnnotationReportGenerator { @@ -26,4 +27,22 @@ class ImageLocationReportGenerator extends AnnotationReportGenerator * @var string */ protected $filename = 'image_location_image_annotation_report'; + + /** + * Get sources for the sub-reports that should be generated for this project. + * + * @return mixed + */ + public function getProjectSources() + { + return $this->source->imageVolumes() + ->whereExists(function ($query) { + $query->select(DB::raw(1)) + ->from('images') + ->whereColumn('images.volume_id', 'volumes.id') + ->whereNotNull('images.lat') + ->whereNotNull('images.lng'); + }) + ->get(); + } } diff --git a/src/Support/Reports/Projects/ImageLabels/ImageLocationReportGenerator.php b/src/Support/Reports/Projects/ImageLabels/ImageLocationReportGenerator.php index 23d838d9d..63e72d067 100644 --- a/src/Support/Reports/Projects/ImageLabels/ImageLocationReportGenerator.php +++ b/src/Support/Reports/Projects/ImageLabels/ImageLocationReportGenerator.php @@ -4,6 +4,7 @@ use Biigle\Modules\Reports\Support\Reports\Projects\ProjectImageReportGenerator; use Biigle\Modules\Reports\Support\Reports\Volumes\ImageLabels\ImageLocationReportGenerator as ReportGenerator; +use DB; class ImageLocationReportGenerator extends ProjectImageReportGenerator { @@ -27,4 +28,22 @@ class ImageLocationReportGenerator extends ProjectImageReportGenerator * @var string */ protected $filename = 'image_location_image_label_report'; + + /** + * Get sources for the sub-reports that should be generated for this project. + * + * @return mixed + */ + public function getProjectSources() + { + return $this->source->imageVolumes() + ->whereExists(function ($query) { + $query->select(DB::raw(1)) + ->from('images') + ->whereColumn('images.volume_id', 'volumes.id') + ->whereNotNull('images.lat') + ->whereNotNull('images.lng'); + }) + ->get(); + } } diff --git a/src/Support/Reports/Projects/ProjectImageReportGenerator.php b/src/Support/Reports/Projects/ProjectImageReportGenerator.php index 881dc24b5..acbdbcb27 100644 --- a/src/Support/Reports/Projects/ProjectImageReportGenerator.php +++ b/src/Support/Reports/Projects/ProjectImageReportGenerator.php @@ -7,7 +7,7 @@ class ProjectImageReportGenerator extends ProjectReportGenerator /** * {@inheritdoc} */ - protected function getProjectSources() + public function getProjectSources() { return $this->source->imageVolumes; } diff --git a/src/Support/Reports/Projects/ProjectReportGenerator.php b/src/Support/Reports/Projects/ProjectReportGenerator.php index 4589be064..0044436d8 100644 --- a/src/Support/Reports/Projects/ProjectReportGenerator.php +++ b/src/Support/Reports/Projects/ProjectReportGenerator.php @@ -44,6 +44,13 @@ public function generateReport($path) $this->makeZip($filesForZip, $path); } + /** + * Get sources for the sub-reports that should be generated for this project. + * + * @return mixed + */ + abstract public function getProjectSources(); + /** * Get the report generator. * @@ -54,10 +61,4 @@ protected function getReportGenerator() return new $this->reportClass($this->options); } - /** - * Get sources for the sub-reports that should be generated for this project. - * - * @return mixed - */ - abstract protected function getProjectSources(); } diff --git a/src/Support/Reports/Projects/ProjectVideoReportGenerator.php b/src/Support/Reports/Projects/ProjectVideoReportGenerator.php index 0a70bf0af..1118276df 100644 --- a/src/Support/Reports/Projects/ProjectVideoReportGenerator.php +++ b/src/Support/Reports/Projects/ProjectVideoReportGenerator.php @@ -7,7 +7,7 @@ class ProjectVideoReportGenerator extends ProjectReportGenerator /** * {@inheritdoc} */ - protected function getProjectSources() + public function getProjectSources() { return $this->source->videoVolumes; } diff --git a/tests/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGeneratorTest.php b/tests/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGeneratorTest.php index 126dc5f7b..060f2580b 100644 --- a/tests/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGeneratorTest.php @@ -4,6 +4,9 @@ use Biigle\Modules\Reports\Support\Reports\Projects\ImageAnnotations\AnnotationLocationReportGenerator; use TestCase; +use Biigle\Tests\ImageTest; +use Biigle\Tests\ProjectTest; +use Biigle\Tests\VolumeTest; class AnnotationLocationReportGeneratorTest extends TestCase { @@ -13,4 +16,33 @@ public function testProperties() $this->assertEquals('annotation location image annotation report', $generator->getName()); $this->assertEquals('annotation_location_image_annotation_report', $generator->getFilename()); } + + public function testSources() + { + $generator = new AnnotationLocationReportGenerator; + $project = ProjectTest::create(); + $generator->setSource($project); + + $volume1 = VolumeTest::create(); + $volume2 = VolumeTest::create(); + + $project->addVolumeId($volume1->id); + $project->addVolumeId($volume2->id); + + ImageTest::create([ + 'volume_id' => $volume1->id, + 'lat' => 1, + 'lng' => 1, + 'attrs' => [ + 'width' => 100, + 'height' => 100, + 'metadata' => [ + 'yaw' => 90, + 'distance_to_ground' => 10, + ], + ], + ]); + + $this->assertEquals([$volume1->id], $generator->getProjectSources()->pluck('id')->all()); + } } diff --git a/tests/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGeneratorTest.php b/tests/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGeneratorTest.php index 7e5cc8578..37fb7125b 100644 --- a/tests/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGeneratorTest.php @@ -4,6 +4,9 @@ use Biigle\Modules\Reports\Support\Reports\Projects\ImageAnnotations\ImageLocationReportGenerator; use TestCase; +use Biigle\Tests\ImageTest; +use Biigle\Tests\ProjectTest; +use Biigle\Tests\VolumeTest; class ImageLocationReportGeneratorTest extends TestCase { @@ -13,4 +16,25 @@ public function testProperties() $this->assertEquals('image location image annotation report', $generator->getName()); $this->assertEquals('image_location_image_annotation_report', $generator->getFilename()); } + + public function testSources() + { + $generator = new ImageLocationReportGenerator; + $project = ProjectTest::create(); + $generator->setSource($project); + + $volume1 = VolumeTest::create(); + $volume2 = VolumeTest::create(); + + $project->addVolumeId($volume1->id); + $project->addVolumeId($volume2->id); + + ImageTest::create([ + 'volume_id' => $volume1->id, + 'lat' => 1, + 'lng' => 1, + ]); + + $this->assertEquals([$volume1->id], $generator->getProjectSources()->pluck('id')->all()); + } } diff --git a/tests/Support/Reports/Projects/ImageLabels/ImageLocationReportGeneratorTest.php b/tests/Support/Reports/Projects/ImageLabels/ImageLocationReportGeneratorTest.php index ddc05b42a..19dc0380c 100644 --- a/tests/Support/Reports/Projects/ImageLabels/ImageLocationReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/ImageLabels/ImageLocationReportGeneratorTest.php @@ -4,6 +4,9 @@ use Biigle\Modules\Reports\Support\Reports\Projects\ImageLabels\ImageLocationReportGenerator; use TestCase; +use Biigle\Tests\ImageTest; +use Biigle\Tests\ProjectTest; +use Biigle\Tests\VolumeTest; class ImageLocationReportGeneratorTest extends TestCase { @@ -13,4 +16,25 @@ public function testProperties() $this->assertEquals('image location image label report', $generator->getName()); $this->assertEquals('image_location_image_label_report', $generator->getFilename()); } + + public function testSources() + { + $generator = new ImageLocationReportGenerator; + $project = ProjectTest::create(); + $generator->setSource($project); + + $volume1 = VolumeTest::create(); + $volume2 = VolumeTest::create(); + + $project->addVolumeId($volume1->id); + $project->addVolumeId($volume2->id); + + ImageTest::create([ + 'volume_id' => $volume1->id, + 'lat' => 1, + 'lng' => 1, + ]); + + $this->assertEquals([$volume1->id], $generator->getProjectSources()->pluck('id')->all()); + } } diff --git a/tests/Support/Reports/Projects/ProjectReportGeneratorTest.php b/tests/Support/Reports/Projects/ProjectReportGeneratorTest.php index 6b2505073..de46bbb12 100644 --- a/tests/Support/Reports/Projects/ProjectReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/ProjectReportGeneratorTest.php @@ -79,7 +79,7 @@ protected function getReportGenerator() return $this->mock; } - protected function getProjectSources() + public function getProjectSources() { return $this->source->imageVolumes; } From 2de09d8254a6dec293945cc54d29a2785b5df8d7 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 5 Jan 2021 15:34:28 +0100 Subject: [PATCH 250/407] Add location report descriptions to the forms --- src/resources/views/partials/reportTypeInfo.blade.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/resources/views/partials/reportTypeInfo.blade.php b/src/resources/views/partials/reportTypeInfo.blade.php index 71dd140f1..e6086bdfa 100644 --- a/src/resources/views/partials/reportTypeInfo.blade.php +++ b/src/resources/views/partials/reportTypeInfo.blade.php @@ -16,12 +16,21 @@
    The image annotation area report lists all rectangle, circle, ellipse or polygon annotations with their dimensions and area in pixels (as XLSX). If a laser point detection was performed, the dimensions in m and area in m² is included, too. See the manual for the report schema.
    +
    + The image annotation annotation location report returns the estimated annotation positions on a world map in the newline delimited GeoJSON format. See the manual for the report schema. +
    +
    + The image annotation image location report returns the image positions as points on a world map in the newline delimited GeoJSON format. See the manual for the report schema. +
    The basic image label report lists the image labels of all images (as XLSX). See the manual for the report schema.
    The CSV image label report is intended for subsequent processing and lists the image labels at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema.
    +
    + The image label image location report returns the image positions as points on a world map in the newline delimited GeoJSON format. See the manual for the report schema. +
    The CSV video annotation report is intended for subsequent processing and lists the video annotation labels at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema.
    From 4dba36d55eb60d9ce70579f8c57502dc01c8dcce Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 6 Jan 2021 07:25:40 +0100 Subject: [PATCH 251/407] Fix form validation error handling --- src/public/assets/scripts/main.js | 2 +- src/public/mix-manifest.json | 2 +- src/resources/assets/js/reports/mixins/reportForm.vue | 6 +++++- src/resources/views/projectReports.blade.php | 3 ++- src/resources/views/volumeReports.blade.php | 3 ++- 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index b0e1a8e32..57eaebc01 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,n),s.l=!0,s.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)n.d(r,s,function(t){return e[t]}.bind(null,s));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=0)}({0:function(e,t,n){n("Or9D"),e.exports=n("zcrr")},"KHd+":function(e,t,n){"use strict";function r(e,t,n,r,s,i,a,o){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),s&&s.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):s&&(l=o?function(){s.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:s),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var d=u.beforeCreate;u.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},Or9D:function(e,t,n){"use strict";n.r(t);var r=biigle.$require("messages").handleErrorResponse,s=biigle.$require("labelTrees.components.labelTrees"),i={mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:s},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var n=t.name.split("\\");e.hasOwnProperty(n[0])||(e[n[0]]=[]),e[n[0]].push(n[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(n){t[n]=e.options[n]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?this.errors=e.data:r(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0];var e=biigle.$require("reports.labelTrees");e.forEach((function(e){e.labels.forEach((function(e){e.selected=!1}))})),this.labelTrees=e}},a=n("KHd+"),o=Object(a.a)(i,void 0,void 0,!1,null,null,null).exports,l=Vue.resource("/api/v1/projects{/id}/reports"),u={mixins:[o],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,l)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},c=Object(a.a)(u,void 0,void 0,!1,null,null,null).exports,d=Vue.resource("/api/v1/volumes{/id}/reports"),p={mixins:[o],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","annotation_session_id","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","annotation_session_id","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,d)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},f=Object(a.a)(p,void 0,void 0,!1,null,null,null).exports;biigle.$mount("project-report-form",c),biigle.$mount("volume-report-form",f)},zcrr:function(e,t){}}); \ No newline at end of file +!function(e){var t={};function n(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,n),s.l=!0,s.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)n.d(r,s,function(t){return e[t]}.bind(null,s));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=0)}({0:function(e,t,n){n("Or9D"),e.exports=n("zcrr")},"KHd+":function(e,t,n){"use strict";function r(e,t,n,r,s,i,a,o){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),s&&s.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):s&&(l=o?function(){s.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:s),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var d=u.beforeCreate;u.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},Or9D:function(e,t,n){"use strict";n.r(t);var r=biigle.$require("messages").handleErrorResponse,s=biigle.$require("labelTrees.components.labelTrees"),i={mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:s},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var n=t.name.split("\\");e.hasOwnProperty(n[0])||(e[n[0]]=[]),e[n[0]].push(n[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(n){t[n]=e.options[n]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?e.data.hasOwnProperty("errors")?this.errors=e.data.errors:this.errors=e.data:r(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0];var e=biigle.$require("reports.labelTrees");e.forEach((function(e){e.labels.forEach((function(e){e.selected=!1}))})),this.labelTrees=e}},a=n("KHd+"),o=Object(a.a)(i,void 0,void 0,!1,null,null,null).exports,l=Vue.resource("/api/v1/projects{/id}/reports"),u={mixins:[o],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,l)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},c=Object(a.a)(u,void 0,void 0,!1,null,null,null).exports,d=Vue.resource("/api/v1/volumes{/id}/reports"),p={mixins:[o],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","annotation_session_id","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","annotation_session_id","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,d)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},f=Object(a.a)(p,void 0,void 0,!1,null,null,null).exports;biigle.$mount("project-report-form",c),biigle.$mount("volume-report-form",f)},zcrr:function(e,t){}}); \ No newline at end of file diff --git a/src/public/mix-manifest.json b/src/public/mix-manifest.json index 440a9e46c..e01244e5a 100644 --- a/src/public/mix-manifest.json +++ b/src/public/mix-manifest.json @@ -1,5 +1,5 @@ { "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=30a9a1a72b6179458798", - "/assets/scripts/main.js": "/assets/scripts/main.js?id=7289a2449844f3f6494e", + "/assets/scripts/main.js": "/assets/scripts/main.js?id=5a19b912077c76234108", "/assets/styles/main.css": "/assets/styles/main.css?id=9d45536e01d0a0b3c70b" } diff --git a/src/resources/assets/js/reports/mixins/reportForm.vue b/src/resources/assets/js/reports/mixins/reportForm.vue index 094ed85bd..97da4028f 100644 --- a/src/resources/assets/js/reports/mixins/reportForm.vue +++ b/src/resources/assets/js/reports/mixins/reportForm.vue @@ -102,7 +102,11 @@ export default { }, handleError(response) { if (response.status === 422) { - this.errors = response.data; + if (response.data.hasOwnProperty('errors')) { + this.errors = response.data.errors; + } else { + this.errors = response.data; + } } else { handleErrorResponse(response); } diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index 26230bfe3..68d85368e 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -50,12 +50,13 @@
    @endif
    -
    +
    @include('reports::partials.reportTypeInfo') +
    The requested report will be prepared. You will get notified when it is ready. diff --git a/src/resources/views/volumeReports.blade.php b/src/resources/views/volumeReports.blade.php index 67f23440b..c757c12ba 100644 --- a/src/resources/views/volumeReports.blade.php +++ b/src/resources/views/volumeReports.blade.php @@ -50,12 +50,13 @@ @endif
    -
    +
    @include('reports::partials.reportTypeInfo') +
    @if ($annotationSessions->count() > 0)
    From baf79a0f519fcad6e049fcbe1b023225dac44320 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 6 Jan 2021 11:15:26 +0100 Subject: [PATCH 252/407] Extent reports schema manual article for location reports --- .../manual/tutorials/reports-schema.blade.php | 76 +++++++++++++++++-- src/resources/views/manualTutorial.blade.php | 21 ++++- .../views/partials/reportTypeInfo.blade.php | 2 +- 3 files changed, 89 insertions(+), 10 deletions(-) diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index 82cfe0352..7a6de0dc6 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -20,16 +20,19 @@ Image annotation reports Image label reports
    @@ -65,20 +68,49 @@ If "aggregate child labels" was enabled for this report, the abundances of all child labels will be added to the abundance of the highest parent label and the child labels will be excluded from the report.

    +

    AnnotationLocation

    + +

    + The image annotation annotation location report is a newline delimited GeoJSON file that contains the estimated positions of image annotations on a world map. This report can be used to import annotations in a GIS software such as QGIS. You can find a description of how to import and use a GeoJSON report in QGIS here. +

    + +

    + The annotation position estimation is based on several assumptions. You can find a detailed description here. +

    + +

    + The report contains one GeoJSON feature for each annotation label. This means that there may be multiple features for a single annotation if the annotation has multiple labels attached. The following properties are included for each feature: +

    +
      +
    • _id
      The annotation label ID (unique for a GeoJSON feature).
    • +
    • _image_id
      The ID of the image to which the annotation belongs.
    • +
    • _image_filename
      The filename of the image to which the annotation belongs.
    • +
    • _image_latitude
      The latitude coordinate of the image to which the annotation belongs.
    • +
    • _image_longitude
      The longitude coordinate of the image to which the annotation belongs.
    • +
    • _label_name
      The name of the label that belongs to the annotation label.
    • +
    • _label_id
      The ID of the label that belongs to the annotation label.
    • +
    + +
    +
    + The GeoJSON format does not support circle features. Circle annotations are converted to point features in this report. +
    +
    +

    Area

    The image annotation area report is an XLSX spreadsheet of all area annotations (rectangle, circle, ellipse and polygon) with their width and height in pixels (px) and their area in px². Line string annotations are included, too, with the "width" set to the total length of the line string. If a laser point detection was performed, the width and height in m and the area in m² is included as well.

    -
    -
    +
    +
    The computed area of self-intersecting polygons like these will not be correct! - - - - - + + + + +
    @@ -220,6 +252,21 @@ +

    ImageLocation

    + +

    + The image annotation image location report is a newline delimited GeoJSON file that contains image positions as points on a world map. This report can be used to import image positions in a GIS software such as QGIS. You can find a description of how to import and use a GeoJSON report in QGIS here. +

    + +

    + The report contains one GeoJSON feature for each image. The following properties are included for each feature: +

    +
      +
    • _id
      The image ID (unique for a GeoJSON feature).
    • +
    • _filename
      The filename of the image.
    • +
    • Additional properties list the number of annotations with a certain label for each image. The format of the property title is "label_name (#label_id)"
    • +
    +

    Image label reports

    Basic

    @@ -252,6 +299,21 @@

  • Label hierarchy (see the extended annotation report on how to interpret a label hierarchy)
  • +

    ImageLocation

    + +

    + The image label image location report is a newline delimited GeoJSON file that contains image positions as points on a world map. This report can be used to import image positions in a GIS software such as QGIS. You can find a description of how to import and use a GeoJSON report in QGIS here. +

    + +

    + The report contains one GeoJSON feature for each image. The following properties are included for each feature: +

    +
      +
    • _id
      The image ID (unique for a GeoJSON feature).
    • +
    • _filename
      The filename of the image.
    • +
    • Additional properties list the image labels that have been used in the volume and whether a label was attached to an image (1) or not (0). The format of the property title is "label_name (#label_id)"
    • +
    +

    Video annotation reports

    CSV

    diff --git a/src/resources/views/manualTutorial.blade.php b/src/resources/views/manualTutorial.blade.php index 6bbd4e9b3..e3b8cf484 100644 --- a/src/resources/views/manualTutorial.blade.php +++ b/src/resources/views/manualTutorial.blade.php @@ -1,7 +1,24 @@ -

    +

    Reports

    +

    Reports schema -

    +

    A description of the file formats of the different available reports.

    + +

    + Image location reports +

    + +

    + A detailed description of image location reports with a short introduction to QGIS. +

    + +

    + Annotation location reports +

    + +

    + A detailed description of the annotation position estimation of the annotation location report. +

    diff --git a/src/resources/views/partials/reportTypeInfo.blade.php b/src/resources/views/partials/reportTypeInfo.blade.php index e6086bdfa..8f39a3fb5 100644 --- a/src/resources/views/partials/reportTypeInfo.blade.php +++ b/src/resources/views/partials/reportTypeInfo.blade.php @@ -20,7 +20,7 @@ The image annotation annotation location report returns the estimated annotation positions on a world map in the newline delimited GeoJSON format. See the manual for the report schema.
    - The image annotation image location report returns the image positions as points on a world map in the newline delimited GeoJSON format. See the manual for the report schema. + The image annotation image location report returns the image positions as points on a world map in the newline delimited GeoJSON format. See the manual for the report schema.
    The basic image label report lists the image labels of all images (as XLSX). See the manual for the report schema. From 0ec1e995e62fbeac6e705073ed6066a59c0ae872 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 6 Jan 2021 11:15:57 +0100 Subject: [PATCH 253/407] Add manual article for image location reports --- .../image-location-reports.blade.php | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 src/resources/views/manual/tutorials/image-location-reports.blade.php diff --git a/src/resources/views/manual/tutorials/image-location-reports.blade.php b/src/resources/views/manual/tutorials/image-location-reports.blade.php new file mode 100644 index 000000000..10d83a5d5 --- /dev/null +++ b/src/resources/views/manual/tutorials/image-location-reports.blade.php @@ -0,0 +1,82 @@ +@extends('manual.base') + +@section('manual-title') Image location reports @stop + +@section('manual-content') +
    +

    + A detailed description of image location reports with a short introduction to QGIS. +

    +

    + Image location reports contain image positions as points on a world map. The report file format is newline delimited GeoJSON which can be imported in a GIS software such as QGIS. +

    + +

    + The image location reports require image metadata for latitude and longitude coordinates which are either automatically obtained by BIIGLE or manually provided. BIIGLE expects these coordinates to be provided in the EPSG:4326 coordinate reference system. Read more on image metadata here. +

    + +

    + Each report includes information on annotation or image labels for each image as properties of a GeoJSON feature. These properties can be used to filter or style the feature display in a GIS. Below you can find some examples using QGIS version 3.10. +

    + +

    Import GeoJSON in QGIS

    + +

    + To import an image location report in QGIS, add it as a new vector layer. Press Ctrl+Shift+V to open the data source manager for a new vector layer. There, select "File" as source type, "Automatic" as encoding and choose the .ndjson report file as source below. Finally, click on the "Add" button. +

    + +

    + Now the image locations appear as a new layer in the layers list. Next, you have to make sure that the vector features are displayed with the correct coordinate reference system. Right click on the layer and select "Set CRS" > "Set Layer CRS". There, choose the EPSG:4326 CRS. +

    + +

    + Image location reports contain additional properties or attributes for each image. To view these attributes, select "Open Attribute Table" in the right click menu of the vector layer. +

    + +

    Filter an annotation image location report

    + +

    + The annotation image location report contains information on the number of annotations with a certain label that belong to a certain image. This information can be used to filter the vector features that represent the images in the GIS. Here is how to enable a filtering for the following example query: "Show all positions for images that contain at least one annotations with the label Sponge". +

    + +

    + To create a new filtering, right click on the vector layer and select "Filter...", which will open the Query Builder window. There you can see the list of available fields on the left. In this case, the fields will include a list of the labels that have been used throughout the volume. in our example, this list should also include the "Sponge" label, which we select with a double click. Now we choose the ">" operator from the list of available operators below. Finally, we add "0" to the existing query, which should now look similar to this: +

    +
    "Sponge (#6427)" > 0
    +

    + You can test if your filter query is correct with a click on the "Test" button. If everything is well, click "OK" to enable the new filtering. +

    +

    + If you apply one ore more filter rules like in the example above, you can reproduce the behavior of the image volume map in the GIS. However, the GIS query builder is much more powerful. +

    + +

    Style an annotation image location report

    + +

    + The annotation count information of the annotation image location report can also be used to adjust the style of the vector features that represent the image positions. By default, the features are displayed as circle markers. Here is how you can adjust the size and/or color of the markers based on the annotation count. +

    + +

    Adjust the size

    + +

    + To adjust the size of the circle markers, select "Properties..." in the right click menu of the vector layer. This will open the Layer Properties dialog. There, choose "Symbology" in the sidebar on the left. Here, select the "Simple marker" at the top. Now you can edit the style of the marker. To enable a dynamic size, click on the context menu icon at the right of the "Size" form field and choose "Assistant...". +

    + +

    + In the marker size assistant window, choose the label on which the marker size should be based from the "Source" dropdown input (e.g. "Sponge (#6427)" from the example above). Now click on the "Fetch value range from layer" button at the right of the "Values from ... to" input fields to automatically determine the value range. Finally, click "OK" and then "Apply" to apply the new style. +

    + +

    Adjust the color

    + +

    + Adjusting the color of the circle markers is very similar to adjusting the size. Instead of the marker size assistant, you open the marker fill color assistant in the layer properties dialog. There, choose the source and value range in the same way than described above. Finally, click "OK" and then "Apply" to apply the new style. +

    + +

    Filter an image label image location report

    + +

    + Filtering of an image label image location report is done in the same way than filtering of an image annotation image location report. However, the image label report contains different properties for each image. In this report the properties of an image specify whether a certain label is attached to the image or not. A property is 1 if a label is attached and 0 of it is not attached. This can be used to filter the vector features to display only those positions of images that have (or don't have) a specific label attached. For example, a query to show only positions of images that do not have the "Unusable" label attached may look like this: +

    +
    "Unusable (#1337)" != 1
    +
    +@endsection From fa1f6ad43906c970ba18d42ebe83319990358a6f Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 6 Jan 2021 15:43:58 +0100 Subject: [PATCH 254/407] Add manual article for annotation location report --- .../annotation-location-reports.blade.php | 121 ++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 src/resources/views/manual/tutorials/annotation-location-reports.blade.php diff --git a/src/resources/views/manual/tutorials/annotation-location-reports.blade.php b/src/resources/views/manual/tutorials/annotation-location-reports.blade.php new file mode 100644 index 000000000..385a69853 --- /dev/null +++ b/src/resources/views/manual/tutorials/annotation-location-reports.blade.php @@ -0,0 +1,121 @@ +@extends('manual.base') + +@section('manual-title') Annotation location reports @stop + +@section('manual-content') +
    +

    + A detailed description of the annotation position estimation of the annotation location report. +

    +

    + The annotation location report contains estimated annotation positions on a world map. The report file format is newline delimited GeoJSON which can be imported in a GIS software such as QGIS. +

    +

    + The annotation location report requires several fields for image metadata to compute the estimated annotation positions. In addition, the positions are computed based on a number of assumptions which are described below. +

    + +
    +
    + The annotation positions are only an estimate and will likely not reflect the actual real-world positions! +
    +
    + +

    Required metadata

    + +

    + The annotation location report requires the following image metadata fields. Images or volumes where this information is not available will be ignored for the report. +

    + +
      +
    • latitude and longitude
    • +
    • distance to ground
    • +
    • yaw
    • +
    • width and height1
    • +
    + +

    + 1The image width and height is determined automatically by BIIGLE when a new volume is created. It may take a few minutes for all images to be processed. +

    + +

    Assumptions

    + +

    + The estimated annotation positions are calculated based on the following assumptions. Please bear in mind that these assumptions are never 100% met in a real environment and therefore the annotation positions are just estimates. +

    + +
      +
    1. + Image coordinates: The image latitude and longitude is assumed to specify the position of the image center. +
    2. +
    3. + Camera opening angle: The camera opening angle is assumed to be 90°. +
    4. +
    5. + Camera orientation: The camera is assumed to point straight down to the ground. +
    6. +
    7. + Yaw: A yaw of 0° is assumed to point north, 90° to point east. +
    8. +
    9. + Pixel shape: A pixel of the image is assumed to have a square shape. +
    10. +
    + +

    Position estimation

    + +

    + The annotation position estimation is performed in multiple steps: +

    + +
      +
    1. +

      + The annotation position relative to the image center is calculated (annotation offset) and then rotated according to the yaw around the image center. +

      +
    2. +
    3. +

      + The annotation offset in pixels is transformed to the offset in meters. For this, the assumptions about the camera opening angle and orientation are used. If the opening angle is 90° and the camera points straight down, the width of the image content can be assumed to be twice the distance of the camera to the sea floor (as the camera viewport is a right-angled triangle). The image width in meters determines the width of a single pixel (which is assumed to be a square) in meters, which in turn is used to transform the annotation offset to meters. +

      +
    4. +
    5. +

      + The final annotation position on the world map is determined by shifting the image center latitude/longitude coordinates by the previously calculated offset of the annotation in meters. The coordinate shift is calculated using the following simplified flat earth calculation in pseudo code (reference): +

      +
      +// Position, decimal degrees.
      +lat
      +lon
      +
      +// Offsets in meters (north, east).
      +dn
      +de
      +
      +// Earth's radius, sphere.
      +R = 6378137
      +
      +// Coordinate offsets in radians.
      +dLat = dn / R
      +dLon = de / (R * COS( PI * lat / 180 ))
      +
      +// Offset position, decimal degrees.
      +latO = lat + dLat * 180 / PI
      +lonO = lon + dLon * 180 / PI
      +
      +

      + If the previously mentioned assumptions are met, the displacement error introduced by this calculation should be quite small, as the offset from the image center position should be very small as well. +

      +
    6. +
    + +

    Filtering in QGIS

    + +

    + Filtering of an annotation location report is done in the same way than filtering of an image annotation image location report. However, the annotation location report contains a different and fixed set of properties for each annotation. The most important properties are probably "_label_name" and "_label_id", which allow you to filter the annotation positions based on the label that is attached to the annotation. For example, a query to show only positions of annotations that have the "Sponge" label attached may look like this: +

    +
    "_label_name" = 'Sponge'
    +

    + Please note the different use of "" to enclose a field identifier and '' to enclose a fixed string. +

    +
    +@endsection From f6ec97115636998b11333e76cfa16151c7167e73 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 6 Jan 2021 16:28:09 +0100 Subject: [PATCH 255/407] Fix composer.json --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 7e52aab13..8f23c90df 100644 --- a/composer.json +++ b/composer.json @@ -16,7 +16,7 @@ ], "require": { "ext-zip": "*", - "jmikola/geojson=^1.0" + "jmikola/geojson":"^1.0" }, "autoload": { "psr-4": { From dec73f15577c7065d7f345a9ea25407f30d08ea0 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 13 Jan 2021 13:11:13 +0100 Subject: [PATCH 256/407] Update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d12f73295..f26b856a7 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Test status](https://github.com/biigle/reports/workflows/Tests/badge.svg)](https://github.com/biigle/reports/actions?query=workflow%3ATests) -This is the BIIGLE module to generate reports for projects, volumes and videos. +This is the BIIGLE module to generate reports for projects and volumes. ## Installation From dfeff8356ee5b944d2c6d7f51c050ec26e3c3210 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 15 Jan 2021 09:36:34 +0100 Subject: [PATCH 257/407] Fix reports search query Resolves #74 --- .../Mixins/Views/SearchControllerMixin.php | 40 ++++++++++--------- .../Views/SearchControllerMixinTest.php | 20 ++++++++++ 2 files changed, 41 insertions(+), 19 deletions(-) diff --git a/src/Http/Controllers/Mixins/Views/SearchControllerMixin.php b/src/Http/Controllers/Mixins/Views/SearchControllerMixin.php index ba2ae1429..4169f7b3b 100644 --- a/src/Http/Controllers/Mixins/Views/SearchControllerMixin.php +++ b/src/Http/Controllers/Mixins/Views/SearchControllerMixin.php @@ -26,25 +26,27 @@ public function index(User $user, $query, $type) if ($query) { $queryBuilder = $queryBuilder ->where(function ($q) use ($query) { - $q->where('reports.source_type', Volume::class) - ->whereExists(function ($q) use ($query) { - $q->select(DB::raw(1)) - ->from('reports') - ->join('volumes', 'reports.source_id', '=', 'volumes.id') - ->where('volumes.name', 'ilike', "%{$query}%"); - }); - }) - ->orWhere(function ($q) use ($query) { - $q->where('reports.source_type', Project::class) - ->whereExists(function ($q) use ($query) { - $q->select(DB::raw(1)) - ->from('reports') - ->join('projects', 'reports.source_id', '=', 'projects.id') - ->where('projects.name', 'ilike', "%{$query}%"); - }); - }) - // Kept for backwards compatibility of single video reports. - ->orWhere('reports.source_name', 'ilike', "%{$query}%"); + $q->where(function ($q) use ($query) { + $q->where('reports.source_type', Volume::class) + ->whereExists(function ($q) use ($query) { + $q->select(DB::raw(1)) + ->from('volumes') + ->whereRaw('reports.source_id = volumes.id') + ->where('volumes.name', 'ilike', "%{$query}%"); + }); + }) + ->orWhere(function ($q) use ($query) { + $q->where('reports.source_type', Project::class) + ->whereExists(function ($q) use ($query) { + $q->select(DB::raw(1)) + ->from('projects') + ->whereRaw('reports.source_id = projects.id') + ->where('projects.name', 'ilike', "%{$query}%"); + }); + }) + // Kept for backwards compatibility of single video reports. + ->orWhere('reports.source_name', 'ilike', "%{$query}%"); + }); } $values = []; diff --git a/tests/Http/Controllers/Mixins/Views/SearchControllerMixinTest.php b/tests/Http/Controllers/Mixins/Views/SearchControllerMixinTest.php index 6148fae7d..e718409d6 100644 --- a/tests/Http/Controllers/Mixins/Views/SearchControllerMixinTest.php +++ b/tests/Http/Controllers/Mixins/Views/SearchControllerMixinTest.php @@ -69,4 +69,24 @@ public function testIndexDeleted() $this->be($r1->user); $this->get('search?t=reports')->assertSeeText('my volume'); } + + public function testIndexWhereExists() + { + $r1 = ReportTest::create([ + 'type_id' => ReportType::imageAnnotationsCsvId(), + 'source_id' => VolumeTest::create(['name' => 'my volume'])->id, + 'source_type' => Volume::class, + ]); + $r2 = ReportTest::create([ + 'type_id' => ReportType::imageAnnotationsCsvId(), + 'source_id' => ProjectTest::create(['name' => 'my project'])->id, + 'source_type' => Project::class, + ]); + + $this->be($r1->user); + $this->get('search?t=reports&q=my') + ->assertStatus(200) + ->assertSeeText('my volume') + ->assertDontSeeText('my project'); + } } From 8f017ccbb137404ffa7221ff666ef43f5fca5ffb Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 29 Jan 2021 15:15:47 +0100 Subject: [PATCH 258/407] Fix update schema action --- .github/workflows/update-schema.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-schema.yml b/.github/workflows/update-schema.yml index 46ea35c70..16cfdfdc8 100644 --- a/.github/workflows/update-schema.yml +++ b/.github/workflows/update-schema.yml @@ -5,7 +5,7 @@ on: branches: - master paths: - - 'database/migrations/**' + - 'src/database/migrations/**' jobs: update-schema: From 1cf613a2e404bd89bd58d14c371820c7805ae385 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 29 Jan 2021 15:15:51 +0100 Subject: [PATCH 259/407] Update test action --- .github/workflows/test.yml | 43 ++++++++++++-------------------------- 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3d13ea471..2e2a3037a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -7,11 +7,13 @@ on: pull_request: jobs: - test-module: runs-on: ubuntu-latest + env: + MODULE_NAME: Reports + steps: - uses: actions/checkout@v1 with: @@ -20,7 +22,7 @@ jobs: - uses: actions/checkout@v1 with: repository: biigle/core - ref: dev-modules + ref: master fetch-depth: 1 path: core @@ -32,36 +34,17 @@ jobs: run: php -r "file_exists('.env') || copy('.env.example', '.env');" working-directory: ../core - - name: Get Composer Cache Directory - id: composer-cache - run: | - echo "::set-output name=dir::$(composer config cache-files-dir)" - - - uses: actions/cache@v1 - with: - path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer - restore-keys: | - ${{ runner.os }}-composer - - name: Install Dependencies - run: composer install --no-ansi --no-interaction --no-scripts --no-suggest --prefer-dist --ignore-platform-reqs + run: composer install --no-ansi --no-interaction --no-scripts --prefer-dist --ignore-platform-reqs working-directory: ../core - - name: Remove BIIGLE modules - run: rm -r vendor/biigle - working-directory: ../core - - - name: Update BIIGLE modules from source - run: composer update --no-ansi --no-interaction --no-scripts --no-suggest --prefer-source --ignore-platform-reqs biigle/* - working-directory: ../core - - - name: Remove installed package - run: rm -r vendor/${GITHUB_REPOSITORY} - working-directory: ../core - - - name: Copy current repository - run: cp -r ${GITHUB_WORKSPACE} vendor/biigle + - name: Install current repository + run: | + composer config repositories.module --json '{"type": "path", "url": "'${GITHUB_WORKSPACE}'", "options": {"symlink": false}}' + composer require --no-ansi --no-interaction --no-scripts --ignore-platform-reqs ${GITHUB_REPOSITORY} + sed -i "/Insert Biigle module service providers/i Biigle\\\\Modules\\\\${MODULE_NAME}\\\\${MODULE_NAME}ServiceProvider::class," config/app.php + mkdir -p tests/php/Modules + ln -sf ../../../vendor/${GITHUB_REPOSITORY}/tests tests/php/Modules/${MODULE_NAME} working-directory: ../core - name: Generate key @@ -78,5 +61,5 @@ jobs: working-directory: ../core - name: Run tests - run: docker-compose run --rm -u 1001 worker php -d memory_limit=1G vendor/bin/phpunit --random-order --filter 'Biigle\\Tests\\Modules\\'${GITHUB_REPOSITORY##*/} + run: docker-compose run --rm -u 1001 worker php -d memory_limit=1G vendor/bin/phpunit --random-order --filter 'Biigle\\Tests\\Modules\\'${MODULE_NAME} working-directory: ../core From 6330ca7358caf4cb47c940228c29446dddd375ce Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 1 Feb 2021 16:28:38 +0100 Subject: [PATCH 260/407] Use default storage disk for tests The reports storage disk is not configured in the testing environment. --- tests/Http/Controllers/Api/ReportsControllerTest.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/Http/Controllers/Api/ReportsControllerTest.php b/tests/Http/Controllers/Api/ReportsControllerTest.php index 35b773b04..3f3c24ebb 100644 --- a/tests/Http/Controllers/Api/ReportsControllerTest.php +++ b/tests/Http/Controllers/Api/ReportsControllerTest.php @@ -11,6 +11,7 @@ class ReportsControllerTest extends ApiTestCase { public function testGet() { + config(['reports.storage_disk' => null]); $report = ReportTest::create(); $this->doTestApiRoute('GET', "api/v1/reports/{$report->id}"); @@ -23,14 +24,15 @@ public function testGet() $this->json('GET', "api/v1/reports/{$report->id}") ->assertStatus(404); - Storage::fake(config('reports.storage_disk')); - Storage::disk(config('reports.storage_disk'))->put($report->id, 'content'); + Storage::fake(); + Storage::disk()->put($report->id, 'content'); $this->json('GET', "api/v1/reports/{$report->id}") ->assertStatus(200); } public function testDestroy() { + config(['reports.storage_disk' => null]); $report = ReportTest::create(); $this->doTestApiRoute('DELETE', "api/v1/reports/{$report->id}"); From be68a3f8f5471535626e5d4d972acd40465f8cd2 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 1 Feb 2021 16:38:19 +0100 Subject: [PATCH 261/407] Skip test if biigle/laserpoints is not installed --- .../Volumes/ImageAnnotations/AreaReportGeneratorTest.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/Support/Reports/Volumes/ImageAnnotations/AreaReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageAnnotations/AreaReportGeneratorTest.php index 2f1996327..7be4a935c 100644 --- a/tests/Support/Reports/Volumes/ImageAnnotations/AreaReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageAnnotations/AreaReportGeneratorTest.php @@ -3,6 +3,7 @@ namespace Biigle\Tests\Modules\Reports\Support\Reports\Volumes\ImageAnnotations; use App; +use Biigle\Modules\Laserpoints\Image as LImage; use Biigle\Modules\Reports\Support\CsvFile; use Biigle\Modules\Reports\Support\Reports\Volumes\ImageAnnotations\AreaReportGenerator; use Biigle\Shape; @@ -313,6 +314,10 @@ public function testGenerateReportEllipse() public function testGenerateReportSqm() { + if (!class_exists(LImage::class)) { + $this->markTestSkipped('Reqires the biigle/laserpoints module.'); + } + $volume = VolumeTest::create([ 'name' => 'My Cool Volume', ]); From 43d03fffc4cb6f4ffca60ff4a56ffd4891b94bea Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 1 Feb 2021 16:40:26 +0100 Subject: [PATCH 262/407] Install biigle/laserpoints in test environment THis is required to run all tests. --- .github/workflows/test.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2e2a3037a..bd46d0e33 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -47,6 +47,12 @@ jobs: ln -sf ../../../vendor/${GITHUB_REPOSITORY}/tests tests/php/Modules/${MODULE_NAME} working-directory: ../core + - name: Install biigle/laserpoints module + run: | + composer require --no-ansi --no-interaction --no-scripts --ignore-platform-reqs biigle/laserpoints:dev-master + sed -i "/Insert Biigle module service providers/i Biigle\\\\Modules\\\\Laserpoints\\\\LaserpointsServiceProvider::class," config/app.php + working-directory: ../core + - name: Generate key run: php artisan key:generate working-directory: ../core From 0aded909c0ba84f86bc0abf1ee6684d117c3981e Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 12 Feb 2021 11:35:50 +0100 Subject: [PATCH 263/407] Implement separate by user for abundance report --- .../AbundanceReportGenerator.php | 15 +++++ .../AbundanceReportGeneratorTest.php | 59 +++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/src/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGenerator.php index d861b2685..b7b62f4fd 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGenerator.php @@ -5,6 +5,7 @@ use Biigle\Label; use Biigle\LabelTree; use Biigle\Modules\Reports\Support\CsvFile; +use Biigle\User; use DB; class AbundanceReportGenerator extends AnnotationReportGenerator @@ -48,6 +49,17 @@ public function generateReport($path) $labels = Label::whereIn('id', $rowGroup->pluck('label_id')->unique())->get(); $this->tmpFiles[] = $this->createCsv($rowGroup, $name, $labels); } + } elseif ($this->shouldSeparateUsers() && $rows->isNotEmpty()) { + $labels = Label::whereIn('id', $rows->pluck('label_id')->unique())->get(); + $rows = $rows->groupBy('user_id'); + $users = User::whereIn('id', $rows->keys()) + ->selectRaw("id, concat(firstname, ' ', lastname) as name") + ->pluck('name', 'id'); + + foreach ($users as $id => $name) { + $rowGroup = $rows->get($id); + $this->tmpFiles[] = $this->createCsv($rowGroup, $name, $labels); + } } else { $labels = Label::whereIn('id', $rows->pluck('label_id')->unique())->get(); $this->tmpFiles[] = $this->createCsv($rows, $this->source->name, $labels); @@ -71,6 +83,9 @@ protected function query() if ($this->shouldSeparateLabelTrees()) { $query->addSelect('labels.label_tree_id') ->groupBy('image_annotation_labels.label_id', 'images.id', 'labels.label_tree_id'); + } elseif ($this->shouldSeparateUsers()) { + $query->addSelect('image_annotation_labels.user_id') + ->groupBy('image_annotation_labels.label_id', 'images.id', 'image_annotation_labels.user_id'); } return $query; diff --git a/tests/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGeneratorTest.php index 99fc07eeb..8bd5d18e5 100644 --- a/tests/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGeneratorTest.php @@ -148,6 +148,65 @@ public function testGenerateReportSeparateLabelTrees() $generator->generateReport('my/path'); } + public function testGenerateReportSeparateUsers() + { + $image = ImageTest::create(); + + $annotation = ImageAnnotationTest::create([ + 'image_id' => $image->id, + ]); + + $al1 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + ]); + + $al2 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + ]); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->once() + ->with(["{$al1->user->firstname} {$al1->user->lastname}"]); + + $mock->shouldReceive('put') + ->once() + ->with(["{$al2->user->firstname} {$al2->user->lastname}"]); + + $mock->shouldReceive('put') + ->once() + ->with(['image_filename', $al1->label->name, $al2->label->name]); + + $mock->shouldReceive('put') + ->once() + ->with(['image_filename', $al1->label->name, $al2->label->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$image->filename, 1, 0]); + + $mock->shouldReceive('put') + ->once() + ->with([$image->filename, 0, 1]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $generator = new AbundanceReportGenerator([ + 'separateUsers' => true, + ]); + $generator->setSource($image->volume); + $mock = Mockery::mock(); + $mock->shouldReceive('run')->once(); + $generator->setPythonScriptRunner($mock); + $generator->generateReport('my/path'); + } + public function testGenerateReportAggregateChildLabels() { $volume = VolumeTest::create(); From f91be3cdada63fc413fb067442684810241abb88 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 12 Feb 2021 11:36:57 +0100 Subject: [PATCH 264/407] Implement separate by user for annotation location report --- src/Support/Reports/ReportGenerator.php | 10 ++ .../AnnotationLocationReportGenerator.php | 13 +++ .../AnnotationReportGenerator.php | 2 + .../AnnotationLocationReportGeneratorTest.php | 109 ++++++++++++++++++ 4 files changed, 134 insertions(+) diff --git a/src/Support/Reports/ReportGenerator.php b/src/Support/Reports/ReportGenerator.php index 012d1151e..b11732338 100644 --- a/src/Support/Reports/ReportGenerator.php +++ b/src/Support/Reports/ReportGenerator.php @@ -255,6 +255,16 @@ protected function shouldSeparateLabelTrees() return $this->options->get('separateLabelTrees', false); } + /** + * Should this report separate the output files for different user? + * + * @return bool + */ + protected function shouldSeparateUsers() + { + return $this->options->get('separateUsers', false); + } + /** * Returns the array of label ids to which this report should be restricted. * diff --git a/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php index 7d6fc5099..98864ebcf 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php @@ -7,6 +7,7 @@ use Biigle\Modules\Reports\Support\File; use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; use Biigle\Shape; +use Biigle\User; use DB; use GeoJson\Feature\Feature; use GeoJson\Feature\FeatureCollection; @@ -66,6 +67,18 @@ public function generateReport($path) $this->tmpFiles[] = $file; $toZip[$file->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'ndjson'); } + } elseif ($this->shouldSeparateUsers() && $items->isNotEmpty()) { + $items = $items->groupBy('user_id'); + $users = User::whereIn('id', $items->keys()) + ->selectRaw("id, concat(firstname, ' ', lastname) as name") + ->pluck('name', 'id'); + + foreach ($users as $id => $name) { + $tmpItems = $items->get($id); + $file = $this->createNdJSON($tmpItems); + $this->tmpFiles[] = $file; + $toZip[$file->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'ndjson'); + } } else { $file = $this->createNdJSON($items); $this->tmpFiles[] = $file; diff --git a/src/Support/Reports/Volumes/ImageAnnotations/AnnotationReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/AnnotationReportGenerator.php index f4e689d41..f9c003a84 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/AnnotationReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/AnnotationReportGenerator.php @@ -217,6 +217,8 @@ public function initQuery($columns = []) if ($this->shouldSeparateLabelTrees()) { $query->addSelect('labels.label_tree_id'); + } elseif ($this->shouldSeparateUsers()) { + $query->addSelect('image_annotation_labels.user_id'); } return $query; diff --git a/tests/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGeneratorTest.php index 8a2a33887..7e675b097 100644 --- a/tests/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGeneratorTest.php @@ -11,6 +11,7 @@ use Biigle\Tests\ImageTest; use Biigle\Tests\LabelTest; use Biigle\Tests\LabelTreeTest; +use Biigle\Tests\UserTest; use Biigle\Tests\VolumeTest; use Mockery; use TestCase; @@ -535,4 +536,112 @@ public function testGenerateReportSeparateLabelTrees() $generator->setSource($image->volume); $generator->generateReport('my/path'); } + + public function testGenerateReportSeparateUsers() + { + $user1 = UserTest::create([ + 'firstname' => 'John Jack', + 'lastname' => 'User', + ]); + + $user2 = UserTest::create([ + 'firstname' => 'Jane', + 'lastname' => 'User', + ]); + + $image = ImageTest::create([ + 'lat' => 51.0, + 'lng' => 0.0, + 'attrs' => [ + 'width' => 100, + 'height' => 100, + 'metadata' => [ + 'yaw' => 90, + 'distance_to_ground' => 10, + ], + ], + ]); + + $annotation = ImageAnnotationTest::create([ + 'shape_id' => Shape::pointId(), + 'points' => [10, 10], + 'image_id' => $image->id, + ]); + + $al1 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'user_id' => $user1->id, + ]); + $al2 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'user_id' => $user2->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $jsonContent = [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'Point', + 'coordinates' => [0.000114194969290087, 51.00007186522273], + ], + 'properties' => [ + '_id' => $al1->id, + '_image_id' => $image->id, + '_image_filename' => 'test-image.jpg', + '_image_latitude' => $image->lat, + '_image_longitude' => $image->lng, + '_label_name' => $al1->label->name, + '_label_id' => $al1->label->id, + ], + ]; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $jsonContent['properties']['_id'] = $al2->id; + $jsonContent['properties']['_label_name'] = $al2->label->name; + $jsonContent['properties']['_label_id'] = $al2->label->id; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(File::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$al1->user->id}-john-jack-user.ndjson"); + + $mock->shouldReceive('addFile') + ->once() + ->with('def', "{$al2->user->id}-jane-user.ndjson"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new AnnotationLocationReportGenerator([ + 'separateUsers' => true, + ]); + $generator->setSource($image->volume); + $generator->generateReport('my/path'); + } } From 73e5bdc5ea774d22410251b4d451ea39f3bd0260 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 12 Feb 2021 13:07:48 +0100 Subject: [PATCH 265/407] Implement separate by user for area report --- .../ImageAnnotations/AreaReportGenerator.php | 10 +++ .../AreaReportGeneratorTest.php | 69 +++++++++++++++++++ 2 files changed, 79 insertions(+) diff --git a/src/Support/Reports/Volumes/ImageAnnotations/AreaReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/AreaReportGenerator.php index fb0641cd2..e7ef3c14f 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/AreaReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/AreaReportGenerator.php @@ -7,6 +7,7 @@ use Biigle\Modules\Laserpoints\Image as LImage; use Biigle\Modules\Reports\Support\CsvFile; use Biigle\Shape; +use Biigle\User; use DB; use StdClass; @@ -61,6 +62,15 @@ public function generateReport($path) foreach ($trees as $id => $name) { $this->tmpFiles[] = $this->createCsv($rows->get($id), $name); } + } elseif ($this->shouldSeparateUsers() && $rows->isNotEmpty()) { + $rows = $rows->groupBy('user_id'); + $users = User::whereIn('id', $rows->keys()) + ->selectRaw("id, concat(firstname, ' ', lastname) as name") + ->pluck('name', 'id'); + + foreach ($users as $id => $name) { + $this->tmpFiles[] = $this->createCsv($rows->get($id), $name); + } } else { $this->tmpFiles[] = $this->createCsv($rows, $this->source->name); } diff --git a/tests/Support/Reports/Volumes/ImageAnnotations/AreaReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageAnnotations/AreaReportGeneratorTest.php index 7be4a935c..5f868d845 100644 --- a/tests/Support/Reports/Volumes/ImageAnnotations/AreaReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageAnnotations/AreaReportGeneratorTest.php @@ -446,6 +446,75 @@ public function testGenerateReportSeparateLabelTrees() $generator->generateReport('my/path'); } + public function testGenerateReportSeparateUsers() + { + $image = ImageTest::create(); + + $annotation = ImageAnnotationTest::create([ + 'shape_id' => Shape::rectangleId(), + 'image_id' => $image->id, + 'points' => [100, 100, 100, 300, 200, 300, 200, 100], + ]); + + $al1 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + ]); + $al2 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('put') + ->once() + ->with(["{$al1->user->firstname} {$al1->user->lastname}"]); + + $mock->shouldReceive('put') + ->once() + ->with(["{$al2->user->firstname} {$al2->user->lastname}"]); + + $mock->shouldReceive('put') + ->twice() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([ + $annotation->id, + Shape::rectangleId(), 'Rectangle', + $al1->label_id, $al1->label->name, + $image->id, $image->filename, + '', '', '', + 200, 100, 20000, + ]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $annotation->id, + Shape::rectangleId(), 'Rectangle', + $al2->label_id, $al2->label->name, + $image->id, $image->filename, + '', '', '', + 200, 100, 20000, + ]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $generator = new AreaReportGenerator([ + 'separateUsers' => true, + ]); + $generator->setSource($image->volume); + $mock = Mockery::mock(); + $mock->shouldReceive('run')->once(); + $generator->setPythonScriptRunner($mock); + $generator->generateReport('my/path'); + } + public function testGenerateReportLineString() { $volume = VolumeTest::create([ From 0c73da78ea9e0743e8581bb7f0b22e930156e3e5 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 12 Feb 2021 16:44:19 +0100 Subject: [PATCH 266/407] Implement separate by users for remaining reports --- .../ImageAnnotations/BasicReportGenerator.php | 19 ++- .../ImageAnnotations/CsvReportGenerator.php | 12 ++ .../ExtendedReportGenerator.php | 18 ++- .../ImageAnnotations/FullReportGenerator.php | 10 ++ .../ImageLocationReportGenerator.php | 15 +++ .../ImageLabels/BasicReportGenerator.php | 12 ++ .../ImageLabels/CsvReportGenerator.php | 12 ++ .../ImageLocationReportGenerator.php | 17 +++ .../VideoAnnotations/CsvReportGenerator.php | 14 +++ .../VideoLabels/CsvReportGenerator.php | 14 +++ .../BasicReportGeneratorTest.php | 56 +++++++++ .../CsvReportGeneratorTest.php | 113 ++++++++++++++++++ .../ExtendedReportGeneratorTest.php | 54 +++++++++ .../FullReportGeneratorTest.php | 70 +++++++++++ .../ImageLocationReportGeneratorTest.php | 106 ++++++++++++++++ .../ImageLabels/BasicReportGeneratorTest.php | 49 ++++++++ .../ImageLabels/CsvReportGeneratorTest.php | 99 +++++++++++++++ .../ImageLocationReportGeneratorTest.php | 102 ++++++++++++++++ .../CsvReportGeneratorTest.php | 106 ++++++++++++++++ .../VideoLabels/CsvReportGeneratorTest.php | 95 +++++++++++++++ 20 files changed, 989 insertions(+), 4 deletions(-) diff --git a/src/Support/Reports/Volumes/ImageAnnotations/BasicReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/BasicReportGenerator.php index 1ae410dfb..059169cdf 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/BasicReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/BasicReportGenerator.php @@ -3,6 +3,7 @@ namespace Biigle\Modules\Reports\Support\Reports\Volumes\ImageAnnotations; use Biigle\LabelTree; +use Biigle\User; use Biigle\Modules\Reports\Support\CsvFile; use DB; @@ -45,6 +46,15 @@ public function generateReport($path) foreach ($trees as $id => $name) { $this->tmpFiles[] = $this->createCsv($labels->get($id), $name); } + } elseif ($this->shouldSeparateUsers() && $labels->isNotEmpty()) { + $labels = $labels->groupBy('user_id'); + $users = User::whereIn('id', $labels->keys()) + ->selectRaw("id, concat(firstname, ' ', lastname) as name") + ->pluck('name', 'id'); + + foreach ($users as $id => $name) { + $this->tmpFiles[] = $this->createCsv($labels->get($id), $name); + } } else { $this->tmpFiles[] = $this->createCsv($labels); } @@ -59,10 +69,17 @@ public function generateReport($path) */ protected function query() { - $query = $this->initQuery(DB::raw('labels.name, labels.label_tree_id, labels.color, count(labels.id) as count')) + $query = $this->initQuery(DB::raw('labels.name, labels.color, count(labels.id) as count')) ->groupBy('labels.id') ->orderBy('labels.id'); + if ($this->shouldSeparateLabelTrees()) { + $query->addSelect('labels.label_tree_id'); + } elseif ($this->shouldSeparateUsers()) { + $query->addSelect('image_annotation_labels.user_id') + ->groupBy('user_id', 'labels.id'); + } + return $query; } diff --git a/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php index 2909cb6ba..efcb48277 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php @@ -3,6 +3,7 @@ namespace Biigle\Modules\Reports\Support\Reports\Volumes\ImageAnnotations; use Biigle\LabelTree; +use Biigle\User; use Biigle\Modules\Reports\Support\CsvFile; use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; use DB; @@ -51,6 +52,17 @@ public function generateReport($path) $this->tmpFiles[] = $csv; $toZip[$csv->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'csv'); } + } elseif ($this->shouldSeparateUsers() && $rows->isNotEmpty()) { + $rows = $rows->groupBy('user_id'); + $users = User::whereIn('id', $rows->keys()) + ->selectRaw("id, concat(firstname, ' ', lastname) as name") + ->pluck('name', 'id'); + + foreach ($users as $id => $name) { + $csv = $this->createCsv($rows->get($id)); + $this->tmpFiles[] = $csv; + $toZip[$csv->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'csv'); + } } else { $csv = $this->createCsv($rows); $this->tmpFiles[] = $csv; diff --git a/src/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGenerator.php index eb141601d..273991d4e 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGenerator.php @@ -3,8 +3,8 @@ namespace Biigle\Modules\Reports\Support\Reports\Volumes\ImageAnnotations; use Biigle\LabelTree; +use Biigle\User; use Biigle\Modules\Reports\Support\CsvFile; -use DB; class ExtendedReportGenerator extends AnnotationReportGenerator { @@ -45,6 +45,15 @@ public function generateReport($path) foreach ($trees as $id => $name) { $this->tmpFiles[] = $this->createCsv($rows->get($id), $name); } + } elseif ($this->shouldSeparateUsers() && $rows->isNotEmpty()) { + $rows = $rows->groupBy('user_id'); + $users = User::whereIn('id', $rows->keys()) + ->selectRaw("id, concat(firstname, ' ', lastname) as name") + ->pluck('name', 'id'); + + foreach ($users as $id => $name) { + $this->tmpFiles[] = $this->createCsv($rows->get($id), $name); + } } else { $this->tmpFiles[] = $this->createCsv($rows, $this->source->name); } @@ -63,10 +72,13 @@ protected function query() ->orderBy('images.filename'); if ($this->shouldSeparateLabelTrees()) { - $query->select(DB::raw('images.filename, image_annotation_labels.label_id, count(image_annotation_labels.label_id) as count, labels.label_tree_id')) + $query->selectRaw('images.filename, image_annotation_labels.label_id, count(image_annotation_labels.label_id) as count, labels.label_tree_id') ->groupBy('image_annotation_labels.label_id', 'images.id', 'labels.label_tree_id'); + } elseif ($this->shouldSeparateUsers()) { + $query->selectRaw('images.filename, image_annotation_labels.label_id, count(image_annotation_labels.label_id) as count, image_annotation_labels.user_id') + ->groupBy('image_annotation_labels.label_id', 'images.id', 'image_annotation_labels.user_id'); } else { - $query->select(DB::raw('images.filename, image_annotation_labels.label_id, count(image_annotation_labels.label_id) as count')) + $query->selectRaw('images.filename, image_annotation_labels.label_id, count(image_annotation_labels.label_id) as count') ->groupBy('image_annotation_labels.label_id', 'images.id'); } diff --git a/src/Support/Reports/Volumes/ImageAnnotations/FullReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/FullReportGenerator.php index c50bdc223..b462af115 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/FullReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/FullReportGenerator.php @@ -4,6 +4,7 @@ use Arr; use Biigle\LabelTree; +use Biigle\User; use Biigle\Modules\Reports\Support\CsvFile; use DB; @@ -46,6 +47,15 @@ public function generateReport($path) foreach ($trees as $id => $name) { $this->tmpFiles[] = $this->createCsv($rows->get($id), $name); } + } elseif ($this->shouldSeparateUsers() && $rows->isNotEmpty()) { + $rows = $rows->groupBy('user_id'); + $users = User::whereIn('id', $rows->keys()) + ->selectRaw("id, concat(firstname, ' ', lastname) as name") + ->pluck('name', 'id'); + + foreach ($users as $id => $name) { + $this->tmpFiles[] = $this->createCsv($rows->get($id), $name); + } } else { $this->tmpFiles[] = $this->createCsv($rows, $this->source->name); } diff --git a/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php index dbca0aad0..c17d45637 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php @@ -4,6 +4,7 @@ use Biigle\ImageAnnotationLabel; use Biigle\LabelTree; +use Biigle\User; use Biigle\Modules\Reports\Support\File; use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; use DB; @@ -49,6 +50,7 @@ public function generateReport($path) ->join('labels', 'image_annotation_labels.label_id', '=', 'labels.id') ->where('images.volume_id', $this->source->id) ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']) + ->orderBy('labels.id') ->distinct(); $labels = $this->query()->get(); @@ -66,6 +68,19 @@ public function generateReport($path) ->where('labels.label_tree_id', $id) ->pluck('labels.name', 'labels.id'); + $tmpLabels = $labels->get($id)->groupBy('image_id'); + $file = $this->createNdJSON($images, $usedLabels, $tmpLabels); + $this->tmpFiles[] = $file; + $toZip[$file->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'ndjson'); + } + } elseif ($this->shouldSeparateUsers() && $labels->isNotEmpty()) { + $usedLabels = $usedLabelsQuery->pluck('labels.name', 'labels.id'); + $labels = $labels->groupBy('user_id'); + $users = User::whereIn('id', $labels->keys()) + ->selectRaw("id, concat(firstname, ' ', lastname) as name") + ->pluck('name', 'id'); + + foreach ($users as $id => $name) { $tmpLabels = $labels->get($id)->groupBy('image_id'); $file = $this->createNdJSON($images, $usedLabels, $tmpLabels); $this->tmpFiles[] = $file; diff --git a/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php index 26da4763c..0f123707a 100644 --- a/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php @@ -3,6 +3,7 @@ namespace Biigle\Modules\Reports\Support\Reports\Volumes\ImageLabels; use Biigle\LabelTree; +use Biigle\User; use Biigle\Modules\Reports\Support\CsvFile; use Biigle\Modules\Reports\Support\Reports\Volumes\VolumeReportGenerator; use DB; @@ -46,6 +47,15 @@ public function generateReport($path) foreach ($trees as $id => $name) { $this->tmpFiles[] = $this->createCsv($rows->get($id), $name); } + } elseif ($this->shouldSeparateUsers() && $rows->isNotEmpty()) { + $rows = $rows->groupBy('user_id'); + $users = User::whereIn('id', $rows->keys()) + ->selectRaw("id, concat(firstname, ' ', lastname) as name") + ->pluck('name', 'id'); + + foreach ($users as $id => $name) { + $this->tmpFiles[] = $this->createCsv($rows->get($id), $name); + } } else { $this->tmpFiles[] = $this->createCsv($rows, $this->source->name); } @@ -81,6 +91,8 @@ public function query() if ($this->shouldSeparateLabelTrees()) { $query->join('labels', 'labels.id', '=', 'image_labels.label_id') ->addSelect('labels.label_tree_id'); + } elseif ($this->shouldSeparateusers()) { + $query->addSelect('image_labels.user_id'); } return $query; diff --git a/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php index 361cc3466..6d0806788 100644 --- a/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php @@ -3,6 +3,7 @@ namespace Biigle\Modules\Reports\Support\Reports\Volumes\ImageLabels; use Biigle\LabelTree; +use Biigle\User; use Biigle\Modules\Reports\Support\CsvFile; use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; use Biigle\Modules\Reports\Support\Reports\Volumes\VolumeReportGenerator; @@ -52,6 +53,17 @@ public function generateReport($path) $this->tmpFiles[] = $csv; $toZip[$csv->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'csv'); } + } elseif ($this->shouldSeparateUsers() && $rows->isNotEmpty()) { + $rows = $rows->groupBy('user_id'); + $users = User::whereIn('id', $rows->keys()) + ->selectRaw("id, concat(firstname, ' ', lastname) as name") + ->pluck('name', 'id'); + + foreach ($users as $id => $name) { + $csv = $this->createCsv($rows->get($id)); + $this->tmpFiles[] = $csv; + $toZip[$csv->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'csv'); + } } else { $csv = $this->createCsv($rows); $this->tmpFiles[] = $csv; diff --git a/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php index 720dac054..98ca6b229 100644 --- a/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php @@ -4,6 +4,7 @@ use Biigle\ImageLabel; use Biigle\LabelTree; +use Biigle\User; use Biigle\Modules\Reports\Support\File; use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; use Biigle\Modules\Reports\Support\Reports\Volumes\VolumeReportGenerator; @@ -49,6 +50,7 @@ public function generateReport($path) ->join('labels', 'image_labels.label_id', '=', 'labels.id') ->where('images.volume_id', $this->source->id) ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']) + ->orderBy('labels.id') ->distinct(); $imageLabels = $this->query()->get(); @@ -66,6 +68,19 @@ public function generateReport($path) ->where('labels.label_tree_id', $id) ->pluck('labels.name', 'labels.id'); + $tmpImageLabels = $imageLabels->get($id)->groupBy('image_id'); + $file = $this->createNdJSON($images, $usedImageLabels, $tmpImageLabels); + $this->tmpFiles[] = $file; + $toZip[$file->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'ndjson'); + } + } elseif ($this->shouldSeparateUsers() && $imageLabels->isNotEmpty()) { + $usedImageLabels = $usedImageLabelsQuery->pluck('labels.name', 'labels.id'); + $imageLabels = $imageLabels->groupBy('user_id'); + $users = User::whereIn('id', $imageLabels->keys()) + ->selectRaw("id, concat(firstname, ' ', lastname) as name") + ->pluck('name', 'id'); + + foreach ($users as $id => $name) { $tmpImageLabels = $imageLabels->get($id)->groupBy('image_id'); $file = $this->createNdJSON($images, $usedImageLabels, $tmpImageLabels); $this->tmpFiles[] = $file; @@ -112,6 +127,8 @@ public function query() if ($this->shouldSeparateLabelTrees()) { $query->join('labels', 'labels.id', '=', 'image_labels.label_id') ->addSelect('labels.label_tree_id'); + } elseif ($this->shouldSeparateUsers()) { + $query->addSelect('image_labels.user_id'); } return $query; diff --git a/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php b/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php index b7d7a00b6..5d75ffcc4 100644 --- a/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php @@ -4,6 +4,7 @@ use Biigle\Label; use Biigle\LabelTree; +use Biigle\User; use Biigle\Modules\Reports\Support\CsvFile; use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; use Biigle\Modules\Reports\Support\Reports\Volumes\VolumeReportGenerator; @@ -108,6 +109,17 @@ public function generateReport($path) $this->tmpFiles[] = $csv; $toZip[$csv->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'csv'); } + } elseif ($this->shouldSeparateUsers() && $rows->isNotEmpty()) { + $rows = $rows->groupBy('user_id'); + $users = User::whereIn('id', $rows->keys()) + ->selectRaw("id, concat(firstname, ' ', lastname) as name") + ->pluck('name', 'id'); + + foreach ($users as $id => $name) { + $csv = $this->createCsv($rows->get($id)); + $this->tmpFiles[] = $csv; + $toZip[$csv->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'csv'); + } } else { $csv = $this->createCsv($rows); $this->tmpFiles[] = $csv; @@ -148,6 +160,8 @@ public function initQuery($columns = []) if ($this->shouldSeparateLabelTrees()) { $query->addSelect('labels.label_tree_id'); + } elseif ($this->shouldSeparateUsers()) { + $query->addSelect('video_annotation_labels.user_id'); } return $query; diff --git a/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php b/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php index dbae455b0..bf043d47d 100644 --- a/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php @@ -3,6 +3,7 @@ namespace Biigle\Modules\Reports\Support\Reports\Volumes\VideoLabels; use Biigle\LabelTree; +use Biigle\User; use Biigle\Modules\Reports\Support\CsvFile; use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; use Biigle\Modules\Reports\Support\Reports\Volumes\VolumeReportGenerator; @@ -52,6 +53,17 @@ public function generateReport($path) $this->tmpFiles[] = $csv; $toZip[$csv->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'csv'); } + } elseif ($this->shouldSeparateUsers() && $rows->isNotEmpty()) { + $rows = $rows->groupBy('user_id'); + $users = User::whereIn('id', $rows->keys()) + ->selectRaw("id, concat(firstname, ' ', lastname) as name") + ->pluck('name', 'id'); + + foreach ($users as $id => $name) { + $csv = $this->createCsv($rows->get($id)); + $this->tmpFiles[] = $csv; + $toZip[$csv->getPath()] = $this->sanitizeFilename("{$id}-{$name}", 'csv'); + } } else { $csv = $this->createCsv($rows); $this->tmpFiles[] = $csv; @@ -99,6 +111,8 @@ public function query() if ($this->shouldSeparateLabelTrees()) { $query->addSelect('labels.label_tree_id'); + } elseif ($this->shouldSeparateUsers()) { + $query->addSelect('video_labels.user_id'); } return $query; diff --git a/tests/Support/Reports/Volumes/ImageAnnotations/BasicReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageAnnotations/BasicReportGeneratorTest.php index 3bcf5d3ea..301ea20fc 100644 --- a/tests/Support/Reports/Volumes/ImageAnnotations/BasicReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageAnnotations/BasicReportGeneratorTest.php @@ -128,4 +128,60 @@ public function testGenerateReportSeparateLabelTrees() $generator->setPythonScriptRunner($mock); $generator->generateReport('my/path'); } + + public function testGenerateReportSeparateUsers() + { + $image = ImageTest::create(); + + $annotation = ImageAnnotationTest::create([ + 'image_id' => $image->id, + ]); + + $al1 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + ]); + $al2 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + ]); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->once() + ->with(["{$al1->user->firstname} {$al1->user->lastname}"]); + + $mock->shouldReceive('put') + ->once() + ->with([$al1->label->name, $al1->label->color, 1]); + + $mock->shouldReceive('put') + ->once() + ->with(["{$al2->user->firstname} {$al2->user->lastname}"]); + + $mock->shouldReceive('put') + ->once() + ->with([$al2->label->name, $al2->label->color, 1]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + $mock->code = 0; + App::singleton(Exec::class, function () use ($mock) { + return $mock; + }); + + $generator = new BasicReportGenerator([ + 'separateUsers' => true, + ]); + $generator->setSource($image->volume); + $mock = Mockery::mock(); + $mock->shouldReceive('run')->once(); + $generator->setPythonScriptRunner($mock); + $generator->generateReport('my/path'); + } } diff --git a/tests/Support/Reports/Volumes/ImageAnnotations/CsvReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageAnnotations/CsvReportGeneratorTest.php index 51cce9a61..573303f70 100644 --- a/tests/Support/Reports/Volumes/ImageAnnotations/CsvReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageAnnotations/CsvReportGeneratorTest.php @@ -10,6 +10,7 @@ use Biigle\Tests\ImageTest; use Biigle\Tests\LabelTest; use Biigle\Tests\LabelTreeTest; +use Biigle\Tests\UserTest; use Biigle\Tests\VolumeTest; use Mockery; use TestCase; @@ -229,4 +230,116 @@ public function testGenerateReportSeparateLabelTrees() $generator->setSource($image->volume); $generator->generateReport('my/path'); } + + public function testGenerateReportSeparateUsers() + { + $user1 = UserTest::create([ + 'firstname' => 'Joe Jack', + 'lastname' => 'User', + ]); + + $user2 = UserTest::create([ + 'firstname' => 'Jane', + 'lastname' => 'User', + ]); + + $image = ImageTest::create(); + + $annotation = ImageAnnotationTest::create([ + 'image_id' => $image->id, + ]); + + $al1 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'user_id' => $user1->id, + ]); + $al2 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'user_id' => $user2->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $mock->shouldReceive('put') + ->twice() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([ + $al1->id, + $al1->label->id, + $al1->label->name, + $al1->label->name, + $al1->user_id, + $al1->user->firstname, + $al1->user->lastname, + $annotation->image_id, + $annotation->image->filename, + null, + null, + $annotation->shape->id, + $annotation->shape->name, + json_encode($annotation->points), + null, + $annotation->id, + ]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $al2->id, + $al2->label->id, + $al2->label->name, + $al2->label->name, + $al2->user_id, + $al2->user->firstname, + $al2->user->lastname, + $annotation->image_id, + $annotation->image->filename, + null, + null, + $annotation->shape->id, + $annotation->shape->name, + json_encode($annotation->points), + null, + $annotation->id, + ]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$user1->id}-joe-jack-user.csv"); + + $mock->shouldReceive('addFile') + ->once() + ->with('def', "{$user2->id}-jane-user.csv"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new CsvReportGenerator([ + 'separateUsers' => true, + ]); + $generator->setSource($image->volume); + $generator->generateReport('my/path'); + } } diff --git a/tests/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGeneratorTest.php index 18050c734..67d8b5f9f 100644 --- a/tests/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGeneratorTest.php @@ -140,4 +140,58 @@ public function testGenerateReportSeparateLabelTrees() $generator->setPythonScriptRunner($mock); $generator->generateReport('my/path'); } + + public function testGenerateReportSeparateUsers() + { + $image = ImageTest::create(); + + $annotation = ImageAnnotationTest::create([ + 'image_id' => $image->id, + ]); + + $al1 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + ]); + $al2 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + ]); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->once() + ->with(["{$al1->user->firstname} {$al1->user->lastname}"]); + + $mock->shouldReceive('put') + ->once() + ->with(["{$al2->user->firstname} {$al2->user->lastname}"]); + + $mock->shouldReceive('put') + ->twice() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([$image->filename, $al1->label->name, 1]); + + $mock->shouldReceive('put') + ->once() + ->with([$image->filename, $al2->label->name, 1]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $generator = new ExtendedReportGenerator([ + 'separateUsers' => true, + ]); + $generator->setSource($image->volume); + $mock = Mockery::mock(); + $mock->shouldReceive('run')->once(); + $generator->setPythonScriptRunner($mock); + $generator->generateReport('my/path'); + } } diff --git a/tests/Support/Reports/Volumes/ImageAnnotations/FullReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageAnnotations/FullReportGeneratorTest.php index ff20bec92..d7bc93a87 100644 --- a/tests/Support/Reports/Volumes/ImageAnnotations/FullReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageAnnotations/FullReportGeneratorTest.php @@ -152,4 +152,74 @@ public function testGenerateReportSeparateLabelTrees() $generator->setPythonScriptRunner($mock); $generator->generateReport('my/path'); } + + public function testGenerateReportSeparateUsers() + { + $image = ImageTest::create([ + 'attrs' => ['some' => 'attrs'], + ]); + + $annotation = ImageAnnotationTest::create([ + 'image_id' => $image->id, + ]); + + $al1 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + ]); + $al2 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + ]); + + $mock = Mockery::mock(); + + $mock->shouldReceive('put') + ->once() + ->with(["{$al1->user->firstname} {$al1->user->lastname}"]); + + $mock->shouldReceive('put') + ->once() + ->with(["{$al2->user->firstname} {$al2->user->lastname}"]); + + $mock->shouldReceive('put') + ->twice() + ->with(['image filename', 'annotation id', 'annotation shape', 'x/radius', 'y', 'labels', 'image area in m²']); + + $mock->shouldReceive('put') + ->once() + ->with([ + $image->filename, + $annotation->id, + $al1->label->name, + $annotation->shape->name, + json_encode($annotation->points), + null, + ]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $image->filename, + $annotation->id, + $al2->label->name, + $annotation->shape->name, + json_encode($annotation->points), + null, + ]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $generator = new FullReportGenerator([ + 'separateUsers' => true, + ]); + $generator->setSource($image->volume); + $mock = Mockery::mock(); + $mock->shouldReceive('run')->once(); + $generator->setPythonScriptRunner($mock); + $generator->generateReport('my/path'); + } } diff --git a/tests/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGeneratorTest.php index 4866fa47d..270a3d7a7 100644 --- a/tests/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGeneratorTest.php @@ -10,6 +10,7 @@ use Biigle\Tests\ImageTest; use Biigle\Tests\LabelTest; use Biigle\Tests\LabelTreeTest; +use Biigle\Tests\UserTest; use Biigle\Tests\VolumeTest; use Mockery; use TestCase; @@ -239,4 +240,109 @@ public function testGenerateReportSeparateLabelTrees() $generator->setSource($image->volume); $generator->generateReport('my/path'); } + + public function testGenerateReportSeparateUsers() + { + $user1 = UserTest::create([ + 'firstname' => 'Joe Jack', + 'lastname' => 'User', + ]); + + $user2 = UserTest::create([ + 'firstname' => 'Jane', + 'lastname' => 'User', + ]); + + $image = ImageTest::create([ + 'lng' => 80.2, + 'lat' => 52.5, + ]); + + $annotation = ImageAnnotationTest::create([ + 'image_id' => $image->id, + ]); + + $al1 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'user_id' => $user1->id, + ]); + $al2 = ImageAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'user_id' => $user2->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $jsonContent = [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'Point', + 'coordinates' => [80.2, 52.5], + ], + 'properties' => [ + '_id' => $image->id, + '_filename' => $image->filename, + "{$al1->label->name} (#{$al1->label->id})" => 1, + "{$al2->label->name} (#{$al2->label->id})" => 0, + ], + ]; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $jsonContent = [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'Point', + 'coordinates' => [80.2, 52.5], + ], + 'properties' => [ + '_id' => $image->id, + '_filename' => $image->filename, + "{$al1->label->name} (#{$al1->label->id})" => 0, + "{$al2->label->name} (#{$al2->label->id})" => 1, + ], + ]; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(File::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$user1->id}-joe-jack-user.ndjson"); + + $mock->shouldReceive('addFile') + ->once() + ->with('def', "{$user2->id}-jane-user.ndjson"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new ImageLocationReportGenerator([ + 'separateUsers' => true, + ]); + $generator->setSource($image->volume); + $generator->generateReport('my/path'); + } } diff --git a/tests/Support/Reports/Volumes/ImageLabels/BasicReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageLabels/BasicReportGeneratorTest.php index e78b668bf..e9460d8b6 100644 --- a/tests/Support/Reports/Volumes/ImageLabels/BasicReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageLabels/BasicReportGeneratorTest.php @@ -140,6 +140,55 @@ public function testGenerateReportSeparateLabelTrees() $generator->generateReport('my/path'); } + public function testGenerateReportSeparateUsers() + { + $image = ImageTest::create(); + + $il1 = ImageLabelTest::create([ + 'image_id' => $image->id, + ]); + $il2 = ImageLabelTest::create([ + 'image_id' => $image->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('put') + ->once() + ->with(["{$il1->user->firstname} {$il1->user->lastname}"]); + + $mock->shouldReceive('put') + ->once() + ->with(["{$il2->user->firstname} {$il2->user->lastname}"]); + + $mock->shouldReceive('put') + ->twice() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([$image->id, $image->filename, $il1->label->name]); + + $mock->shouldReceive('put') + ->once() + ->with([$image->id, $image->filename, $il2->label->name]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $generator = new BasicReportGenerator([ + 'separateUsers' => true, + ]); + $generator->setSource($image->volume); + $mock = Mockery::mock(); + $mock->shouldReceive('run')->once(); + $generator->setPythonScriptRunner($mock); + $generator->generateReport('my/path'); + } + public function testRestrictToLabels() { $image = ImageTest::create(); diff --git a/tests/Support/Reports/Volumes/ImageLabels/CsvReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageLabels/CsvReportGeneratorTest.php index b2f317e1c..a63f73b1b 100644 --- a/tests/Support/Reports/Volumes/ImageLabels/CsvReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageLabels/CsvReportGeneratorTest.php @@ -9,6 +9,7 @@ use Biigle\Tests\ImageTest; use Biigle\Tests\LabelTest; use Biigle\Tests\LabelTreeTest; +use Biigle\Tests\UserTest; use Biigle\Tests\VolumeTest; use Mockery; use TestCase; @@ -201,6 +202,104 @@ public function testGenerateReportSeparateLabelTrees() $generator->generateReport('my/path'); } + public function testGenerateReportSeparateUsers() + { + $user1 = UserTest::create([ + 'firstname' => 'Joe Jack', + 'lastname' => 'User', + ]); + + $user2 = UserTest::create([ + 'firstname' => 'Jane', + 'lastname' => 'User', + ]); + + $image = ImageTest::create(); + + $il1 = ImageLabelTest::create([ + 'image_id' => $image->id, + 'user_id' => $user1->id, + ]); + $il2 = ImageLabelTest::create([ + 'image_id' => $image->id, + 'user_id' => $user2->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $mock->shouldReceive('put') + ->twice() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([ + $il1->id, + $image->id, + $image->filename, + null, + null, + $il1->user_id, + $il1->user->firstname, + $il1->user->lastname, + $il1->label->id, + $il1->label->name, + $il1->label->name, + ]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $il2->id, + $image->id, + $image->filename, + null, + null, + $il2->user_id, + $il2->user->firstname, + $il2->user->lastname, + $il2->label->id, + $il2->label->name, + $il2->label->name, + ]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$user1->id}-joe-jack-user.csv"); + + $mock->shouldReceive('addFile') + ->once() + ->with('def', "{$user2->id}-jane-user.csv"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new CsvReportGenerator([ + 'separateUsers' => true, + ]); + $generator->setSource($image->volume); + $generator->generateReport('my/path'); + } + public function testRestrictToLabels() { $image = ImageTest::create(); diff --git a/tests/Support/Reports/Volumes/ImageLabels/ImageLocationReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageLabels/ImageLocationReportGeneratorTest.php index 713aa7830..37e6241ac 100644 --- a/tests/Support/Reports/Volumes/ImageLabels/ImageLocationReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageLabels/ImageLocationReportGeneratorTest.php @@ -9,6 +9,7 @@ use Biigle\Tests\ImageTest; use Biigle\Tests\LabelTest; use Biigle\Tests\LabelTreeTest; +use Biigle\Tests\UserTest; use Biigle\Tests\VolumeTest; use Mockery; use TestCase; @@ -231,6 +232,107 @@ public function testGenerateReportSeparateLabelTrees() $generator->generateReport('my/path'); } + public function testGenerateReportSeparateUsers() + { + $user1 = UserTest::create([ + 'firstname' => 'Joe Jack', + 'lastname' => 'User', + ]); + + $user2 = UserTest::create([ + 'firstname' => 'Jane', + 'lastname' => 'User', + ]); + + $image = ImageTest::create([ + 'lng' => 80.2, + 'lat' => 52.5, + ]); + + $il1 = ImageLabelTest::create([ + 'image_id' => $image->id, + 'user_id' => $user1->id, + ]); + $il2 = ImageLabelTest::create([ + 'image_id' => $image->id, + 'user_id' => $user2->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $jsonContent = [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'Point', + 'coordinates' => [80.2, 52.5], + ], + 'properties' => [ + '_id' => $image->id, + '_filename' => $image->filename, + "{$il1->label->name} (#{$il1->label->id})" => 1, + "{$il2->label->name} (#{$il2->label->id})" => 0, + ], + ]; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $jsonContent = [ + 'type' => 'Feature', + 'geometry' => [ + 'type' => 'Point', + 'coordinates' => [80.2, 52.5], + ], + 'properties' => [ + '_id' => $image->id, + '_filename' => $image->filename, + "{$il1->label->name} (#{$il1->label->id})" => 0, + "{$il2->label->name} (#{$il2->label->id})" => 1, + ], + ]; + + $mock->shouldReceive('put') + ->once() + ->with(json_encode($jsonContent)."\n"); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(File::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$user1->id}-joe-jack-user.ndjson"); + + $mock->shouldReceive('addFile') + ->once() + ->with('def', "{$user2->id}-jane-user.ndjson"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new ImageLocationReportGenerator([ + 'separateUsers' => true, + ]); + $generator->setSource($image->volume); + $generator->generateReport('my/path'); + } + public function testRestrictToLabels() { $image = ImageTest::create(); diff --git a/tests/Support/Reports/Volumes/VideoAnnotations/CsvReportGeneratorTest.php b/tests/Support/Reports/Volumes/VideoAnnotations/CsvReportGeneratorTest.php index 25b8d7727..0ddb557a1 100644 --- a/tests/Support/Reports/Volumes/VideoAnnotations/CsvReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/VideoAnnotations/CsvReportGeneratorTest.php @@ -225,6 +225,112 @@ public function testGenerateReportSeparateLabelTrees() $generator->generateReport('my/path'); } + public function testGenerateReportSeparateUsers() + { + $user1 = UserTest::create([ + 'firstname' => 'Joe Jack', + 'lastname' => 'User', + ]); + + $user2 = UserTest::create([ + 'firstname' => 'Jane', + 'lastname' => 'User', + ]); + + $video = VideoTest::create(); + + $annotation = VideoAnnotationTest::create(['video_id' => $video->id]); + + $al1 = VideoAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'user_id' => $user1->id, + ]); + $al2 = VideoAnnotationLabelTest::create([ + 'annotation_id' => $annotation->id, + 'user_id' => $user2->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $mock->shouldReceive('put') + ->twice() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([ + $al1->id, + $al1->label->id, + $al1->label->name, + $al1->label->name, + $al1->user_id, + $al1->user->firstname, + $al1->user->lastname, + $annotation->video_id, + $annotation->video->filename, + $annotation->shape->id, + $annotation->shape->name, + json_encode($annotation->points), + json_encode($annotation->frames), + $annotation->id, + ]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $al2->id, + $al2->label->id, + $al2->label->name, + $al2->label->name, + $al2->user_id, + $al2->user->firstname, + $al2->user->lastname, + $annotation->video_id, + $annotation->video->filename, + $annotation->shape->id, + $annotation->shape->name, + json_encode($annotation->points), + json_encode($annotation->frames), + $annotation->id, + ]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$user1->id}-joe-jack-user.csv"); + + $mock->shouldReceive('addFile') + ->once() + ->with('def', "{$user2->id}-jane-user.csv"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new CsvReportGenerator([ + 'separateUsers' => true, + ]); + $generator->setSource($video->volume); + $generator->generateReport('my/path'); + } + public function testRestrictToLabels() { $video = VideoTest::create(); diff --git a/tests/Support/Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php b/tests/Support/Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php index d59d4d590..ff3226f3c 100644 --- a/tests/Support/Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php @@ -9,6 +9,7 @@ use Biigle\Tests\VideoTest; use Biigle\Tests\LabelTest; use Biigle\Tests\LabelTreeTest; +use Biigle\Tests\UserTest; use Biigle\Tests\VolumeTest; use Mockery; use TestCase; @@ -193,6 +194,100 @@ public function testGenerateReportSeparateLabelTrees() $generator->generateReport('my/path'); } + public function testGenerateReportSeparateUsers() + { + $user1 = UserTest::create([ + 'firstname' => 'Joe Jack', + 'lastname' => 'User', + ]); + + $user2 = UserTest::create([ + 'firstname' => 'Jane', + 'lastname' => 'User', + ]); + + $video = VideoTest::create(); + + $il1 = VideoLabelTest::create([ + 'video_id' => $video->id, + 'user_id' => $user1->id, + ]); + $il2 = VideoLabelTest::create([ + 'video_id' => $video->id, + 'user_id' => $user2->id, + ]); + + $mock = Mockery::mock(); + $mock->shouldReceive('getPath') + ->twice() + ->andReturn('abc', 'def'); + + $mock->shouldReceive('put') + ->twice() + ->with($this->columns); + + $mock->shouldReceive('put') + ->once() + ->with([ + $il1->id, + $video->id, + $video->filename, + $il1->user_id, + $il1->user->firstname, + $il1->user->lastname, + $il1->label->id, + $il1->label->name, + $il1->label->name, + ]); + + $mock->shouldReceive('put') + ->once() + ->with([ + $il2->id, + $video->id, + $video->filename, + $il2->user_id, + $il2->user->firstname, + $il2->user->lastname, + $il2->label->id, + $il2->label->name, + $il2->label->name, + ]); + + $mock->shouldReceive('close') + ->twice(); + + App::singleton(CsvFile::class, function () use ($mock) { + return $mock; + }); + + $mock = Mockery::mock(); + + $mock->shouldReceive('open') + ->once() + ->andReturn(true); + + $mock->shouldReceive('addFile') + ->once() + ->with('abc', "{$user1->id}-joe-jack-user.csv"); + + $mock->shouldReceive('addFile') + ->once() + ->with('def', "{$user2->id}-jane-user.csv"); + + $mock->shouldReceive('close')->once(); + + App::singleton(ZipArchive::class, function () use ($mock) { + return $mock; + }); + + $generator = new CsvReportGenerator([ + 'separateUsers' => true, + ]); + $generator->setSource($video->volume); + $generator->generateReport('my/path'); + } + public function testRestrictToLabels() { $video = VideoTest::create(); From 08273ccdf259490972e0d59ebf0b01d213a46fe6 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 12 Feb 2021 16:59:18 +0100 Subject: [PATCH 267/407] Add validation for new separate_users API argument --- .../Api/Projects/ProjectReportController.php | 3 +- .../Api/Volumes/VolumeReportController.php | 3 +- src/Http/Requests/StoreReport.php | 6 ++++ .../Projects/ProjectReportControllerTest.php | 36 +++++++++++++++++++ .../Volumes/VolumeReportControllerTest.php | 34 ++++++++++++++++++ 5 files changed, 80 insertions(+), 2 deletions(-) diff --git a/src/Http/Controllers/Api/Projects/ProjectReportController.php b/src/Http/Controllers/Api/Projects/ProjectReportController.php index 0d1aa40b9..055227a9a 100644 --- a/src/Http/Controllers/Api/Projects/ProjectReportController.php +++ b/src/Http/Controllers/Api/Projects/ProjectReportController.php @@ -22,7 +22,8 @@ class ProjectReportController extends Controller * * @apiParam (Optional arguments) {Boolean} export_area If `true`, restrict the report to the export area of the project. Only available for image annotation reports. * @apiParam (Optional arguments) {Boolean} newest_label If `true`, restrict the report to the newest label of each annotation. - * @apiParam (Optional arguments) {Boolean} separate_label_trees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet. + * @apiParam (Optional arguments) {Boolean} separate_label_trees If `true`, separate annotations with labels of different label trees to different files or sheets of the spreadsheet. Cannot be used together with `separate_users`. + * @apiParam (Optional arguments) {Boolean} separate_users If `true`, separate annotations with labels of different users to different files or sheets of the spreadsheet. Cannot be used together with `separate_label_trees`. * @apiParam (Optional arguments) {Number[]} only_labels Array of label IDs to restrict the report to. Omit or leave empty to take all labels. * @apiParam (Optional arguments) {Boolean} aggregate_child_labels If `true`, add the abundance of child labels to the abundance of their parent labels and omit the child labels. This is only valid for the abundance report. Labels that are excluded with `only_labels` are not counted. * diff --git a/src/Http/Controllers/Api/Volumes/VolumeReportController.php b/src/Http/Controllers/Api/Volumes/VolumeReportController.php index 1428bf5af..334cf3c5c 100644 --- a/src/Http/Controllers/Api/Volumes/VolumeReportController.php +++ b/src/Http/Controllers/Api/Volumes/VolumeReportController.php @@ -23,7 +23,8 @@ class VolumeReportController extends Controller * * @apiParam (Optional arguments) {Boolean} export_area If `true`, restrict the report to the export area of the volume. Only available for image annotation reports. * @apiParam (Optional arguments) {Boolean} newest_label If `true`, restrict the report to the newest label of each annotation. - * @apiParam (Optional arguments) {Boolean} separate_label_trees If `true`, separate annotations with labels of different label trees to different sheets of the spreadsheet. + * @apiParam (Optional arguments) {Boolean} separate_label_trees If `true`, separate annotations with labels of different label trees to different files or sheets of the spreadsheet. Cannot be used together with `separate_users`. + * @apiParam (Optional arguments) {Boolean} separate_users If `true`, separate annotations with labels of different users to different files or sheets of the spreadsheet. Cannot be used together with `separate_label_trees`. * @apiParam (Optional arguments) {Number} annotation_session_id ID of an annotation session of the volume. If given, only annotations belonging to the annotation session are included in the report. * @apiParam (Optional arguments) {Number[]} only_labels Array of label IDs to restrict the report to. Omit or leave empty to take all labels. * @apiParam (Optional arguments) {Boolean} aggregate_child_labels If `true`, add the abundance of child labels to the abundance of their parent labels and omit the child labels. This is only valid for the abundance report. Labels that are excluded with `only_labels` are not counted. diff --git a/src/Http/Requests/StoreReport.php b/src/Http/Requests/StoreReport.php index 55fadca44..a60e0f583 100644 --- a/src/Http/Requests/StoreReport.php +++ b/src/Http/Requests/StoreReport.php @@ -19,6 +19,7 @@ public function rules() { return [ 'separate_label_trees' => 'nullable|boolean', + 'separate_users' => 'nullable|boolean', 'export_area' => 'nullable|boolean', 'newest_label' => 'nullable|boolean', 'only_labels' => 'nullable|array', @@ -46,6 +47,10 @@ public function withValidator($validator) if ($aggregate && !$this->isAllowedForAggregateChildLabels()) { $validator->errors()->add('aggregate_child_labels', 'Child labels can only be aggregated for basic, extended and abundance image annotation reports.'); } + + if ($this->input('separate_label_trees', false) && $this->input('separate_users', false)) { + $validator->errors()->add('separate_label_trees', 'Only one of separate_label_trees or separate_users may be specified.'); + } }); } @@ -58,6 +63,7 @@ public function getOptions() { $options = [ 'separateLabelTrees' => boolval($this->input('separate_label_trees', false)), + 'separateUsers' => boolval($this->input('separate_users', false)), 'newestLabel' => boolval($this->input('newest_label', false)), 'onlyLabels' => $this->input('only_labels', []), ]; diff --git a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php index 8a7ded749..ea0ba5b74 100644 --- a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php @@ -229,4 +229,40 @@ public function testStoreImageAnnotationAnnotationLocationWithoutLatLngYawDistan ]) ->assertStatus(200); } + + public function testStoreSeparateLabelTreesUsersConflict() + { + $projectId = $this->project()->id; + // Create volume. + $this->volume(); + $typeId = ReportType::imageAnnotationsBasicId(); + + $this->beGuest(); + + $this->postJson("api/v1/projects/{$projectId}/reports", [ + 'type_id' => $typeId, + 'separate_label_trees' => true, + 'separate_users' => true, + ]) + ->assertStatus(422); + + $this->expectsJobs(GenerateReportJob::class); + $this->postJson("api/v1/projects/{$projectId}/reports", [ + 'type_id' => $typeId, + 'separate_label_trees' => true, + ]) + ->assertStatus(200); + + $job = end($this->dispatchedJobs); + $this->assertTrue($job->report->options['separateLabelTrees']); + + $this->postJson("api/v1/projects/{$projectId}/reports", [ + 'type_id' => $typeId, + 'separate_users' => true, + ]) + ->assertStatus(200); + + $job = end($this->dispatchedJobs); + $this->assertTrue($job->report->options['separateUsers']); + } } diff --git a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php index f71278318..c70609671 100644 --- a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php +++ b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php @@ -272,4 +272,38 @@ public function testStoreImageAnnotationAnnotationLocationWithoutLatLngYawDistan ]) ->assertStatus(200); } + + public function testStoreSeparateLabelTreesUsersConflict() + { + $volumeId = $this->volume()->id; + $typeId = ReportType::imageAnnotationsBasicId(); + + $this->beGuest(); + + $this->postJson("api/v1/volumes/{$volumeId}/reports", [ + 'type_id' => $typeId, + 'separate_label_trees' => true, + 'separate_users' => true, + ]) + ->assertStatus(422); + + $this->expectsJobs(GenerateReportJob::class); + $this->postJson("api/v1/volumes/{$volumeId}/reports", [ + 'type_id' => $typeId, + 'separate_label_trees' => true, + ]) + ->assertStatus(200); + + $job = end($this->dispatchedJobs); + $this->assertTrue($job->report->options['separateLabelTrees']); + + $this->postJson("api/v1/volumes/{$volumeId}/reports", [ + 'type_id' => $typeId, + 'separate_users' => true, + ]) + ->assertStatus(200); + + $job = end($this->dispatchedJobs); + $this->assertTrue($job->report->options['separateUsers']); + } } From 9fa18e738fee4bb15b5248d6197112120f60b1bb Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 12 Feb 2021 16:59:40 +0100 Subject: [PATCH 268/407] Update manual article for new separate users option --- .../manual/tutorials/reports-schema.blade.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index 7a6de0dc6..0d32442a8 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -52,10 +52,10 @@

    Abundance

    - Similar to the extended report, this report is an XLSX spreadsheet that contains the abundances of each label and image. In this report, there is one row for each image and one column for each label. If the annotations should be separated by label tree, there will be one worksheet for each label tree that was used. + Similar to the extended report, this report is an XLSX spreadsheet that contains the abundances of each label and image. In this report, there is one row for each image and one column for each label. If the annotations should be separated by label tree or user, there will be one worksheet for each label tree or user that was used.

    - For a single worksheet (not separated by label tree) the first line contains the volume name. For multiple worksheets the first lines contain the name of the respective label tree. The second line always contains the column headers. The columns are as follows: + For a single worksheet (not separated by label tree or user) the first line contains the volume name. For multiple worksheets the first lines contain the name of the respective label tree or user. The second line always contains the column headers. The columns are as follows:

    1. Image filename
    2. @@ -115,7 +115,7 @@

    - For a single worksheet (not separated by label tree) the first line contains the volume name. For multiple worksheets the first lines contain the name of the respective label tree. The second line always contains the column headers. The columns are as follows: + For a single worksheet (not separated by label tree or user) the first line contains the volume name. For multiple worksheets the first lines contain the name of the respective label tree or user. The second line always contains the column headers. The columns are as follows:

    1. Annotation ID
    2. @@ -135,7 +135,7 @@

      Basic

      - The basic image annotation report contains a graphical plot of abundances of the different annotation labels (annotations can have multiple labels by different users). If the annotations should be separated by label tree, there will be one plot for each label tree that was used. + The basic image annotation report contains a graphical plot of abundances of the different annotation labels (annotations can have multiple labels by different users). If the annotations should be separated by label tree or user, there will be one plot for each label tree or user.

      Example plot: @@ -151,7 +151,7 @@

      CSV

      - The CSV report is intended for subsequent processing. If you want the data in a machine readable format, choose this report. The report is a ZIP archive, containing a CSV file. The CSV file name consists of the volume ID and the volume name (cleaned up so it can be a file name) separated by an underscore. If the image annotations should be separated by label tree, there will be one CSV file for each label tree and the CSV file name will consist of the label tree ID and name instead. + The CSV report is intended for subsequent processing. If you want the data in a machine readable format, choose this report. The report is a ZIP archive, containing a CSV file. The CSV file name consists of the volume ID and the volume name (cleaned up so it can be a file name) separated by an underscore. If the image annotations should be separated by label tree or user, there will be one CSV file for each label tree or user and the CSV file name will consist of the label tree or user ID and name instead.

      Each CSV file contains one row for each annotation label. Since an annotation can have multiple labels, there may be multiple rows for a single annotation. The first row always contains the column headers. The columns are as follows: @@ -188,10 +188,10 @@

      Extended

      - The extended image annotation report is an XLSX spreadsheet which contains a list of the abundances of each label and image. If the annotations should be separated by label tree, there will be one worksheet for each label tree that was used. + The extended image annotation report is an XLSX spreadsheet which contains a list of the abundances of each label and image. If the annotations should be separated by label tree or user, there will be one worksheet for each label tree or user.

      - For a single worksheet (not separated by label tree) the first line contains the volume name. For multiple worksheets the first lines contain the name of the respective label tree. The second line always contains the column headers. The columns are as follows: + For a single worksheet (not separated by label tree or user) the first line contains the volume name. For multiple worksheets the first lines contain the name of the respective label tree or user. The second line always contains the column headers. The columns are as follows:

      1. Image filename
      2. From 12bf140053f265e59e1eb8f927b4b3a71802bff4 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 15 Feb 2021 13:21:41 +0100 Subject: [PATCH 269/407] Add separate users checkbox to new report forms --- src/public/assets/scripts/main.js | 2 +- src/public/mix-manifest.json | 2 +- .../assets/js/reports/mixins/reportForm.vue | 11 +++++++++ .../assets/js/reports/projectForm.vue | 4 ++++ .../assets/js/reports/volumeForm.vue | 4 ++++ src/resources/views/projectReports.blade.php | 24 ++++++++++++++----- src/resources/views/volumeReports.blade.php | 24 ++++++++++++++----- 7 files changed, 57 insertions(+), 14 deletions(-) diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index 57eaebc01..d708bb4db 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -!function(e){var t={};function n(r){if(t[r])return t[r].exports;var s=t[r]={i:r,l:!1,exports:{}};return e[r].call(s.exports,s,s.exports,n),s.l=!0,s.exports}n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var s in e)n.d(r,s,function(t){return e[t]}.bind(null,s));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="/",n(n.s=0)}({0:function(e,t,n){n("Or9D"),e.exports=n("zcrr")},"KHd+":function(e,t,n){"use strict";function r(e,t,n,r,s,i,a,o){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),r&&(u.functional=!0),i&&(u._scopeId="data-v-"+i),a?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),s&&s.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},u._ssrRegister=l):s&&(l=o?function(){s.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:s),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var d=u.beforeCreate;u.beforeCreate=d?[].concat(d,l):[l]}return{exports:e,options:u}}n.d(t,"a",(function(){return r}))},Or9D:function(e,t,n){"use strict";n.r(t);var r=biigle.$require("messages").handleErrorResponse,s=biigle.$require("labelTrees.components.labelTrees"),i={mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:s},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var n=t.name.split("\\");e.hasOwnProperty(n[0])||(e[n[0]]=[]),e[n[0]].push(n[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(n){t[n]=e.options[n]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?e.data.hasOwnProperty("errors")?this.errors=e.data.errors:this.errors=e.data:r(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0];var e=biigle.$require("reports.labelTrees");e.forEach((function(e){e.labels.forEach((function(e){e.selected=!1}))})),this.labelTrees=e}},a=n("KHd+"),o=Object(a.a)(i,void 0,void 0,!1,null,null,null).exports,l=Vue.resource("/api/v1/projects{/id}/reports"),u={mixins:[o],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,l)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},c=Object(a.a)(u,void 0,void 0,!1,null,null,null).exports,d=Vue.resource("/api/v1/volumes{/id}/reports"),p={mixins:[o],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","annotation_session_id","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","annotation_session_id","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,d)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},f=Object(a.a)(p,void 0,void 0,!1,null,null,null).exports;biigle.$mount("project-report-form",c),biigle.$mount("volume-report-form",f)},zcrr:function(e,t){}}); \ No newline at end of file +!function(e){var t={};function r(s){if(t[s])return t[s].exports;var n=t[s]={i:s,l:!1,exports:{}};return e[s].call(n.exports,n,n.exports,r),n.l=!0,n.exports}r.m=e,r.c=t,r.d=function(e,t,s){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(r.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(s,n,function(t){return e[t]}.bind(null,n));return s},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/",r(r.s=0)}({0:function(e,t,r){r("Or9D"),e.exports=r("zcrr")},"KHd+":function(e,t,r){"use strict";function s(e,t,r,s,n,a,i,o){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=r,u._compiled=!0),s&&(u.functional=!0),a&&(u._scopeId="data-v-"+a),i?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),n&&n.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(i)},u._ssrRegister=l):n&&(l=o?function(){n.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:n),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var p=u.beforeCreate;u.beforeCreate=p?[].concat(p,l):[l]}return{exports:e,options:u}}r.d(t,"a",(function(){return s}))},Or9D:function(e,t,r){"use strict";r.r(t);var s=biigle.$require("messages").handleErrorResponse,n=biigle.$require("labelTrees.components.labelTrees"),a={mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:n},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,separate_users:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var r=t.name.split("\\");e.hasOwnProperty(r[0])||(e[r[0]]=[]),e[r[0]].push(r[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(r){t[r]=e.options[r]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?e.data.hasOwnProperty("errors")?this.errors=e.data.errors:this.errors=e.data:s(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))},"options.separate_label_trees":function(e){e&&(this.options.separate_users=!1)},"options.separate_users":function(e){e&&(this.options.separate_label_trees=!1)}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0];var e=biigle.$require("reports.labelTrees");e.forEach((function(e){e.labels.forEach((function(e){e.selected=!1}))})),this.labelTrees=e}},i=r("KHd+"),o=Object(i.a)(a,void 0,void 0,!1,null,null,null).exports,l=Vue.resource("/api/v1/projects{/id}/reports"),u={mixins:[o],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,l)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},c=Object(i.a)(u,void 0,void 0,!1,null,null,null).exports,p=Vue.resource("/api/v1/volumes{/id}/reports"),d={mixins:[o],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,p)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},f=Object(i.a)(d,void 0,void 0,!1,null,null,null).exports;biigle.$mount("project-report-form",c),biigle.$mount("volume-report-form",f)},zcrr:function(e,t){}}); \ No newline at end of file diff --git a/src/public/mix-manifest.json b/src/public/mix-manifest.json index e01244e5a..b52ed7ad1 100644 --- a/src/public/mix-manifest.json +++ b/src/public/mix-manifest.json @@ -1,5 +1,5 @@ { "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=30a9a1a72b6179458798", - "/assets/scripts/main.js": "/assets/scripts/main.js?id=5a19b912077c76234108", + "/assets/scripts/main.js": "/assets/scripts/main.js?id=48496487fff324e8cbd6", "/assets/styles/main.css": "/assets/styles/main.css?id=9d45536e01d0a0b3c70b" } diff --git a/src/resources/assets/js/reports/mixins/reportForm.vue b/src/resources/assets/js/reports/mixins/reportForm.vue index 97da4028f..51f13e9ed 100644 --- a/src/resources/assets/js/reports/mixins/reportForm.vue +++ b/src/resources/assets/js/reports/mixins/reportForm.vue @@ -27,6 +27,7 @@ export default { export_area: false, newest_label: false, separate_label_trees: false, + separate_users: false, only_labels: [], aggregate_child_labels: false, }, @@ -148,6 +149,16 @@ export default { }); } }, + 'options.separate_label_trees'(separate) { + if (separate) { + this.options.separate_users = false; + } + }, + 'options.separate_users'(separate) { + if (separate) { + this.options.separate_label_trees = false; + } + }, }, created() { this.reportTypes = biigle.$require('reports.reportTypes'); diff --git a/src/resources/assets/js/reports/projectForm.vue b/src/resources/assets/js/reports/projectForm.vue index d6babf9b9..9cdbb3172 100644 --- a/src/resources/assets/js/reports/projectForm.vue +++ b/src/resources/assets/js/reports/projectForm.vue @@ -15,21 +15,25 @@ export default { 'export_area', 'newest_label', 'separate_label_trees', + 'separate_users', 'only_labels', 'aggregate_child_labels', ], 'ImageLabels': [ 'separate_label_trees', + 'separate_users', 'only_labels', ], 'VideoAnnotations': [ 'newest_label', 'separate_label_trees', + 'separate_users', 'annotation_session_id', 'only_labels', ], 'VideoLabels': [ 'separate_label_trees', + 'separate_users', 'only_labels', ], }, diff --git a/src/resources/assets/js/reports/volumeForm.vue b/src/resources/assets/js/reports/volumeForm.vue index d06c1147f..78d1d1bde 100644 --- a/src/resources/assets/js/reports/volumeForm.vue +++ b/src/resources/assets/js/reports/volumeForm.vue @@ -14,23 +14,27 @@ export default { 'export_area', 'newest_label', 'separate_label_trees', + 'separate_users', 'annotation_session_id', 'only_labels', 'aggregate_child_labels', ], 'ImageLabels': [ 'separate_label_trees', + 'separate_users', 'annotation_session_id', 'only_labels', ], 'VideoAnnotations': [ 'newest_label', 'separate_label_trees', + 'separate_users', 'annotation_session_id', 'only_labels', ], 'VideoLabels': [ 'separate_label_trees', + 'separate_users', 'annotation_session_id', 'only_labels', ], diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index 68d85368e..f5780228d 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -108,14 +108,26 @@
    -
    - +
    +
    +
    + +
    +
    +
    +
    + +
    +
    -
    - Annotations belonging to different label trees will be separated to different files/sheets. +
    +
    + Split the report to separate files/sheets for label trees or users.
    @include('reports::partials.restrictLabels') diff --git a/src/resources/views/volumeReports.blade.php b/src/resources/views/volumeReports.blade.php index c757c12ba..205655fa8 100644 --- a/src/resources/views/volumeReports.blade.php +++ b/src/resources/views/volumeReports.blade.php @@ -116,14 +116,26 @@
    -
    - +
    +
    +
    + +
    +
    +
    +
    + +
    +
    -
    - Annotations belonging to different label trees will be separated to different files/sheets. +
    +
    + Split the report to separate files/sheets for label trees or users.
    @include('reports::partials.restrictLabels') From 462cde70f90e236f05d783daf861e827a3bc7d23 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 31 Mar 2021 16:04:35 +0200 Subject: [PATCH 270/407] Upgrade to Laravel Mix 6 --- package-lock.json | 33097 ++++++++++++++++----- package.json | 16 +- src/public/assets/scripts/annotations.js | 3 +- src/public/assets/scripts/main.js | 2 +- src/public/assets/styles/main.css | 2 +- src/public/mix-manifest.json | 6 +- webpack.mix.js | 4 +- 7 files changed, 26012 insertions(+), 7118 deletions(-) diff --git a/package-lock.json b/package-lock.json index d2fac5e4c..b9c2f37b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,1126 +1,1424 @@ { "name": "biigle-reports", "version": "0.0.1", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz", - "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==", + "packages": { + "": { + "name": "biigle-reports", + "version": "0.0.1", + "license": "GPL-3.0-only", + "dependencies": { + "@biigle/ol": "^5.3.0" + }, + "devDependencies": { + "cross-env": "^5.1", + "eslint": "^7.3.1", + "eslint-plugin-vue": "^7.0.0", + "laravel-mix": "^6.0.13", + "laravel-mix-artisan-publish": "git://github.com/mzur/laravel-mix-artisan-publish.git", + "resolve-url-loader": "^3.1.2", + "sass": "^1.15.2", + "sass-loader": "^8.0.0", + "vue-loader": "^15.9.6", + "vue-template-compiler": "^2.6.11" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, - "requires": { - "@babel/highlight": "^7.10.3" + "dependencies": { + "@babel/highlight": "^7.10.4" } }, - "@babel/compat-data": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.7.tgz", - "integrity": "sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw==", + "node_modules/@babel/compat-data": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", + "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==", "dev": true }, - "@babel/core": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.10.tgz", - "integrity": "sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.10", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.10", + "node_modules/@babel/core": { + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.14.tgz", + "integrity": "sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-compilation-targets": "^7.13.13", + "@babel/helper-module-transforms": "^7.13.14", + "@babel/helpers": "^7.13.10", + "@babel/parser": "^7.13.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.13", + "@babel/types": "^7.13.14", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", + "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "lodash": "^4.17.19", - "semver": "^5.4.1", + "semver": "^6.3.0", "source-map": "^0.5.0" }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - } + "@babel/highlight": "^7.12.13" } }, - "@babel/generator": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.11.tgz", - "integrity": "sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA==", + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "requires": { - "@babel/types": "^7.12.11", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", + "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.13.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz", - "integrity": "sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ==", + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", "dev": true, - "requires": { - "@babel/types": "^7.12.10" + "dependencies": { + "@babel/types": "^7.12.13" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", - "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.10.4", - "@babel/types": "^7.10.4" + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" } }, - "@babel/helper-compilation-targets": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz", - "integrity": "sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", + "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", "dev": true, - "requires": { - "@babel/compat-data": "^7.12.5", - "@babel/helper-validator-option": "^7.12.1", + "dependencies": { + "@babel/compat-data": "^7.13.12", + "@babel/helper-validator-option": "^7.12.17", "browserslist": "^4.14.5", - "semver": "^5.5.0" + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", - "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-member-expression-to-functions": "^7.12.1", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4" + "bin": { + "semver": "bin/semver.js" } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz", - "integrity": "sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ==", + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.13.11", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz", + "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", + "dependencies": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", + "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", "regexpu-core": "^4.7.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/helper-define-map": { - "version": "7.10.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", - "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", + "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/types": "^7.10.5", - "lodash": "^4.17.19" + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" } }, - "@babel/helper-explode-assignable-expression": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", - "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "requires": { - "@babel/types": "^7.12.1" + "bin": { + "semver": "bin/semver.js" } }, - "@babel/helper-function-name": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz", - "integrity": "sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA==", + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.10", - "@babel/template": "^7.12.7", - "@babel/types": "^7.12.11" + "dependencies": { + "@babel/types": "^7.13.0" } }, - "@babel/helper-get-function-arity": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz", - "integrity": "sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag==", + "node_modules/@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", "dev": true, - "requires": { - "@babel/types": "^7.12.10" + "dependencies": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" } }, - "@babel/helper-hoist-variables": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", - "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "node_modules/@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", "dev": true, - "requires": { - "@babel/types": "^7.10.4" + "dependencies": { + "@babel/types": "^7.12.13" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz", - "integrity": "sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw==", + "node_modules/@babel/helper-hoist-variables": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", + "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", "dev": true, - "requires": { - "@babel/types": "^7.12.7" + "dependencies": { + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" } }, - "@babel/helper-module-imports": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz", - "integrity": "sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA==", + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", "dev": true, - "requires": { - "@babel/types": "^7.12.5" + "dependencies": { + "@babel/types": "^7.13.12" } }, - "@babel/helper-module-transforms": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", - "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "node_modules/@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-simple-access": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.11.0", - "@babel/helper-validator-identifier": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.1", - "@babel/types": "^7.12.1", - "lodash": "^4.17.19" - }, "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - } + "@babel/types": "^7.13.12" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz", - "integrity": "sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", + "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", "dev": true, - "requires": { - "@babel/types": "^7.12.10" + "dependencies": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.13", + "@babel/types": "^7.13.14" } }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", "dev": true }, - "@babel/helper-remap-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", - "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-wrap-function": "^7.10.4", - "@babel/types": "^7.12.1" + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" } }, - "@babel/helper-replace-supers": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz", - "integrity": "sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA==", + "node_modules/@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.12.7", - "@babel/helper-optimise-call-expression": "^7.12.10", - "@babel/traverse": "^7.12.10", - "@babel/types": "^7.12.11" + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" } }, - "@babel/helper-simple-access": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", - "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "node_modules/@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", "dev": true, - "requires": { - "@babel/types": "^7.12.1" + "dependencies": { + "@babel/types": "^7.13.12" } }, - "@babel/helper-skip-transparent-expression-wrappers": { + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.12.1", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", "dev": true, - "requires": { + "dependencies": { "@babel/types": "^7.12.1" } }, - "@babel/helper-split-export-declaration": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz", - "integrity": "sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g==", + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", "dev": true, - "requires": { - "@babel/types": "^7.12.11" + "dependencies": { + "@babel/types": "^7.12.13" } }, - "@babel/helper-validator-identifier": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz", - "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", "dev": true }, - "@babel/helper-validator-option": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz", - "integrity": "sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw==", + "node_modules/@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", "dev": true }, - "@babel/helper-wrap-function": { - "version": "7.12.3", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", - "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "node_modules/@babel/helper-wrap-function": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.10.4", - "@babel/types": "^7.10.4" + "dependencies": { + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" } }, - "@babel/helpers": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.5.tgz", - "integrity": "sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA==", + "node_modules/@babel/helpers": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", + "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", "dev": true, - "requires": { - "@babel/template": "^7.10.4", - "@babel/traverse": "^7.12.5", - "@babel/types": "^7.12.5" + "dependencies": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" } }, - "@babel/highlight": { - "version": "7.10.3", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz", - "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==", + "node_modules/@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.3", + "dependencies": { + "@babel/helper-validator-identifier": "^7.12.11", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } }, - "@babel/parser": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", - "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==", - "dev": true - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz", - "integrity": "sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A==", + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0" + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "@babel/plugin-proposal-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", - "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", - "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-dynamic-import": "^7.8.0" + "dependencies": { + "color-name": "1.1.3" } }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", - "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "engines": { + "node": ">=4" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", - "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.0" + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", - "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "node_modules/@babel/parser": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", + "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", - "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", + "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.13.12" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz", - "integrity": "sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ==", + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", + "integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", + "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", - "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", + "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz", - "integrity": "sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA==", + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", + "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-private-methods": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", - "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", + "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", - "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", + "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", + "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", - "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", + "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", + "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "dependencies": { + "@babel/compat-data": "^7.13.8", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-export-namespace-from": { + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", + "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", + "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", + "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-json-strings": { + "node_modules/@babel/plugin-syntax-json-strings": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-logical-assignment-operators": { + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-numeric-separator": { + "node_modules/@babel/plugin-syntax-numeric-separator": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-object-rest-spread": { + "node_modules/@babel/plugin-syntax-object-rest-spread": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-catch-binding": { + "node_modules/@babel/plugin-syntax-optional-catch-binding": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-optional-chaining": { + "node_modules/@babel/plugin-syntax-optional-chaining": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", - "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", - "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", - "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-remap-async-to-generator": "^7.12.1" + "dependencies": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", - "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-block-scoping": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz", - "integrity": "sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ==", + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz", + "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-classes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", - "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "node_modules/@babel/plugin-transform-classes": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", + "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.10.4", - "@babel/helper-define-map": "^7.10.4", - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-optimise-call-expression": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1", - "@babel/helper-split-export-declaration": "^7.10.4", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13", "globals": "^11.1.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", - "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "node_modules/@babel/plugin-transform-classes/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "engines": { + "node": ">=4" } }, - "@babel/plugin-transform-destructuring": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", - "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", - "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", + "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", - "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", - "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-for-of": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", - "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-function-name": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", - "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.10.4", - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", - "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", - "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "node_modules/@babel/plugin-transform-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-amd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", - "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "babel-plugin-dynamic-import-node": "^2.3.3" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", - "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", + "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-simple-access": "^7.12.1", + "dependencies": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", - "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", + "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.10.4", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-identifier": "^7.10.4", + "dependencies": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-simple-access": "^7.12.13", "babel-plugin-dynamic-import-node": "^2.3.3" }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "dev": true, "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - } + "@babel/helper-hoist-variables": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-identifier": "^7.12.11", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", - "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", + "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", - "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1" + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-transform-new-target": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", - "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-object-super": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", - "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-replace-supers": "^7.12.1" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-parameters": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", - "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", + "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-property-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", - "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-regenerator": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", - "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz", + "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==", "dev": true, - "requires": { + "dependencies": { "regenerator-transform": "^0.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-reserved-words": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", - "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-runtime": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.10.tgz", - "integrity": "sha512-xOrUfzPxw7+WDm9igMgQCbO3cJKymX7dFdsgRr1eu9n3KjjyU4pptIXbXPseQDquw+W+RuJEJMHKHNsPNNm3CA==", + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.10.tgz", + "integrity": "sha512-Y5k8ipgfvz5d/76tx7JYbKQTcgFSU6VgJ3kKQv4zGTKr+a9T/KBvfRvGtSFgKDQGt/DBykQixV0vNWKIdzWErA==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.12.5", - "@babel/helper-plugin-utils": "^7.10.4", - "semver": "^5.5.1" + "dependencies": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-polyfill-corejs2": "^0.1.4", + "babel-plugin-polyfill-corejs3": "^0.1.3", + "babel-plugin-polyfill-regenerator": "^0.1.2", + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", - "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "bin": { + "semver": "bin/semver.js" } }, - "@babel/plugin-transform-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", - "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz", - "integrity": "sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg==", + "node_modules/@babel/plugin-transform-spread": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-template-literals": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", - "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz", - "integrity": "sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA==", + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", - "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", - "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.1", - "@babel/helper-plugin-utils": "^7.10.4" + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-env": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.11.tgz", - "integrity": "sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.12.7", - "@babel/helper-compilation-targets": "^7.12.5", - "@babel/helper-module-imports": "^7.12.5", - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/helper-validator-option": "^7.12.11", - "@babel/plugin-proposal-async-generator-functions": "^7.12.1", - "@babel/plugin-proposal-class-properties": "^7.12.1", - "@babel/plugin-proposal-dynamic-import": "^7.12.1", - "@babel/plugin-proposal-export-namespace-from": "^7.12.1", - "@babel/plugin-proposal-json-strings": "^7.12.1", - "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1", - "@babel/plugin-proposal-numeric-separator": "^7.12.7", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-proposal-optional-catch-binding": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.12.7", - "@babel/plugin-proposal-private-methods": "^7.12.1", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.1", - "@babel/plugin-syntax-async-generators": "^7.8.0", - "@babel/plugin-syntax-class-properties": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.12.tgz", + "integrity": "sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.12", + "@babel/helper-compilation-targets": "^7.13.10", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-async-generator-functions": "^7.13.8", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-dynamic-import": "^7.13.8", + "@babel/plugin-proposal-export-namespace-from": "^7.12.13", + "@babel/plugin-proposal-json-strings": "^7.13.8", + "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-numeric-separator": "^7.12.13", + "@babel/plugin-proposal-object-rest-spread": "^7.13.8", + "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.0", - "@babel/plugin-syntax-top-level-await": "^7.12.1", - "@babel/plugin-transform-arrow-functions": "^7.12.1", - "@babel/plugin-transform-async-to-generator": "^7.12.1", - "@babel/plugin-transform-block-scoped-functions": "^7.12.1", - "@babel/plugin-transform-block-scoping": "^7.12.11", - "@babel/plugin-transform-classes": "^7.12.1", - "@babel/plugin-transform-computed-properties": "^7.12.1", - "@babel/plugin-transform-destructuring": "^7.12.1", - "@babel/plugin-transform-dotall-regex": "^7.12.1", - "@babel/plugin-transform-duplicate-keys": "^7.12.1", - "@babel/plugin-transform-exponentiation-operator": "^7.12.1", - "@babel/plugin-transform-for-of": "^7.12.1", - "@babel/plugin-transform-function-name": "^7.12.1", - "@babel/plugin-transform-literals": "^7.12.1", - "@babel/plugin-transform-member-expression-literals": "^7.12.1", - "@babel/plugin-transform-modules-amd": "^7.12.1", - "@babel/plugin-transform-modules-commonjs": "^7.12.1", - "@babel/plugin-transform-modules-systemjs": "^7.12.1", - "@babel/plugin-transform-modules-umd": "^7.12.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1", - "@babel/plugin-transform-new-target": "^7.12.1", - "@babel/plugin-transform-object-super": "^7.12.1", - "@babel/plugin-transform-parameters": "^7.12.1", - "@babel/plugin-transform-property-literals": "^7.12.1", - "@babel/plugin-transform-regenerator": "^7.12.1", - "@babel/plugin-transform-reserved-words": "^7.12.1", - "@babel/plugin-transform-shorthand-properties": "^7.12.1", - "@babel/plugin-transform-spread": "^7.12.1", - "@babel/plugin-transform-sticky-regex": "^7.12.7", - "@babel/plugin-transform-template-literals": "^7.12.1", - "@babel/plugin-transform-typeof-symbol": "^7.12.10", - "@babel/plugin-transform-unicode-escapes": "^7.12.1", - "@babel/plugin-transform-unicode-regex": "^7.12.1", - "@babel/preset-modules": "^0.1.3", - "@babel/types": "^7.12.11", - "core-js-compat": "^3.8.0", - "semver": "^5.5.0" + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.12.13", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.12.13", + "@babel/plugin-transform-classes": "^7.13.0", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.0", + "@babel/plugin-transform-dotall-regex": "^7.12.13", + "@babel/plugin-transform-duplicate-keys": "^7.12.13", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-function-name": "^7.12.13", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-member-expression-literals": "^7.12.13", + "@babel/plugin-transform-modules-amd": "^7.13.0", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/plugin-transform-modules-systemjs": "^7.13.8", + "@babel/plugin-transform-modules-umd": "^7.13.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", + "@babel/plugin-transform-new-target": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.13.0", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.12.13", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-escapes": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.13.12", + "babel-plugin-polyfill-corejs2": "^0.1.4", + "babel-plugin-polyfill-corejs3": "^0.1.3", + "babel-plugin-polyfill-regenerator": "^0.1.2", + "core-js-compat": "^3.9.0", + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/preset-modules": { + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "dev": true, - "requires": { + "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "@babel/runtime": { - "version": "7.12.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.5.tgz", - "integrity": "sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg==", + "node_modules/@babel/runtime": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", + "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==", "dev": true, - "requires": { + "dependencies": { "regenerator-runtime": "^0.13.4" } }, - "@babel/template": { - "version": "7.12.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", - "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "node_modules/@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/parser": "^7.12.7", - "@babel/types": "^7.12.7" - }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - } + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" } }, - "@babel/traverse": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.12.tgz", - "integrity": "sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w==", + "node_modules/@babel/template/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", "dev": true, - "requires": { - "@babel/code-frame": "^7.12.11", - "@babel/generator": "^7.12.11", - "@babel/helper-function-name": "^7.12.11", - "@babel/helper-split-export-declaration": "^7.12.11", - "@babel/parser": "^7.12.11", - "@babel/types": "^7.12.12", + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/traverse": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", + "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.13", + "@babel/types": "^7.13.13", "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.19" - }, + "globals": "^11.1.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - }, - "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.10.4", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - } + "@babel/highlight": "^7.12.13" } }, - "@babel/types": { - "version": "7.12.12", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.12.tgz", - "integrity": "sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ==", + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "requires": { + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", + "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==", + "dev": true, + "dependencies": { "@babel/helper-validator-identifier": "^7.12.11", "lodash": "^4.17.19", "to-fast-properties": "^2.0.0" - }, - "dependencies": { - "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true - } } }, - "@biigle/ol": { + "node_modules/@biigle/ol": { "version": "5.3.0", "resolved": "https://npm.pkg.github.com/download/@biigle/ol/5.3.0/d0711bd8db11d47db8ae07a4fd210506e4003d93760aca7fb1b8f8583e3756e8", "integrity": "sha512-CR91F5cK8QsagVSsudozkqT3rGTwsykMaV9sobAUPdI2ygxvXHRXwlEUT4eeQWq450wNcJOjDmwWa05gnuujoQ==", - "requires": { + "license": "BSD-2-Clause", + "dependencies": { "@turf/boolean-contains": "^6.0.1", "@turf/boolean-overlap": "^6.0.1", "@turf/difference": "6.0.1", @@ -1131,106 +1429,178 @@ "rbush": "2.0.2" } }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", + "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", "dev": true, - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" + "engines": { + "node": ">=10.0.0" } }, - "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", - "dev": true + "node_modules/@eslint/eslintrc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", + "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } }, - "@turf/area": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.0.1.tgz", - "integrity": "sha512-Zv+3N1ep9P5JvR0YOYagLANyapGWQBh8atdeR3bKpWcigVXFsEKNUw03U/5xnh+cKzm7yozHD6MFJkqQv55y0g==", - "requires": { - "@turf/helpers": "6.x", - "@turf/meta": "6.x" + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@turf/bbox": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.0.1.tgz", - "integrity": "sha512-EGgaRLettBG25Iyx7VyUINsPpVj1x3nFQFiGS3ER8KCI1MximzNLsam3eXRabqQDjyAKyAE1bJ4EZEpGvspQxw==", - "requires": { - "@turf/helpers": "6.x", - "@turf/meta": "6.x" + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" } }, - "@turf/bearing": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-6.0.1.tgz", - "integrity": "sha512-mXY1NozqV9EFfBTbUItujwfqfQF0G/Xe2fzvnZle90ekPEUfhi4Dgf5JswJTd96J9LiT8kcd6Jonp5khnx0wIg==", - "requires": { - "@turf/helpers": "6.x", - "@turf/invariant": "6.x" + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "@turf/boolean-contains": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-6.0.1.tgz", - "integrity": "sha512-usAexEdWu7dV43paowGSFEM0PljexnlOuj09HF/VDZwO3FKelwUovF2ymetYatuG7KcIYcexeNEkQ5qQnGExlw==", - "requires": { - "@turf/bbox": "6.x", - "@turf/boolean-point-in-polygon": "6.x", - "@turf/boolean-point-on-line": "6.x", - "@turf/helpers": "6.x", - "@turf/invariant": "6.x" + "node_modules/@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true, + "engines": { + "node": ">= 8" } }, - "@turf/boolean-overlap": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-6.0.1.tgz", - "integrity": "sha512-Ud6a75BzNYICVc5/Pf/GJ/3M5XZci6AOGlBNUPvhUrG4nT4NNYeXIpVrx1FB/tAg8EwZZXlhwSO26CTDC13XlA==", - "requires": { - "@turf/helpers": "6.x", - "@turf/invariant": "6.x", - "@turf/line-intersect": "6.x", - "@turf/line-overlap": "6.x", - "@turf/meta": "6.x", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@turf/area": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.3.0.tgz", + "integrity": "sha512-Y1cYyAQ2fk94npdgOeMF4msc2uabHY1m7A7ntixf1I8rkyDd6/iHh1IMy1QsM+VZXAEwDwsXhu+ZFYd3Jkeg4A==", + "dependencies": { + "@turf/helpers": "^6.3.0", + "@turf/meta": "^6.3.0" + } + }, + "node_modules/@turf/bbox": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.3.0.tgz", + "integrity": "sha512-N4ue5Xopu1qieSHP2MA/CJGWHPKaTrVXQJjzHRNcY1vtsO126xbSaJhWUrFc5x5vVkXp0dcucGryO0r5m4o/KA==", + "dependencies": { + "@turf/helpers": "^6.3.0", + "@turf/meta": "^6.3.0" + } + }, + "node_modules/@turf/bearing": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-6.3.0.tgz", + "integrity": "sha512-apuUm9xN6VQLO33m7F2mmzlm3dHfeesJjMSzh9iehGtgmp1IaVndjdcIvs0ieiwm8bN9UhwXpfPtO3pV0n9SFw==", + "dependencies": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" + } + }, + "node_modules/@turf/boolean-contains": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-6.3.0.tgz", + "integrity": "sha512-1MW7B5G5tIu1lnAv3pXyFzl75wfBYnbA2GhwHDb4okIXMhloy/r5uIqAZHo0fOXykKVJS/gIfA/MioKIftoTug==", + "dependencies": { + "@turf/bbox": "^6.3.0", + "@turf/boolean-point-in-polygon": "^6.3.0", + "@turf/boolean-point-on-line": "^6.3.0", + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" + } + }, + "node_modules/@turf/boolean-overlap": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-6.3.0.tgz", + "integrity": "sha512-rWh8JKTqlJ1m27FY8YeWcGoXutLyCVfSi2/8AOkXi2F+36P9GM4tHz19yKY3btbnHJTgSZf1xO2YhX2d0BmNqg==", + "dependencies": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "@turf/line-intersect": "^6.3.0", + "@turf/line-overlap": "^6.3.0", + "@turf/meta": "^6.3.0", "geojson-equality": "0.1.6" } }, - "@turf/boolean-point-in-polygon": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.0.1.tgz", - "integrity": "sha512-FKLOZ124vkJhjzNSDcqpwp2NvfnsbYoUOt5iAE7uskt4svix5hcjIEgX9sELFTJpbLGsD1mUbKdfns8tZxcMNg==", - "requires": { - "@turf/helpers": "6.x", - "@turf/invariant": "6.x" + "node_modules/@turf/boolean-point-in-polygon": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.3.0.tgz", + "integrity": "sha512-NqFSsoE6OwhDK19IllDQRhEQEkF7UVEOlqH9vgS1fGg4T6NcyKvACJs05c9457tL7QSbV9ZS53f2qiLneFL+qg==", + "dependencies": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" } }, - "@turf/boolean-point-on-line": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-6.0.1.tgz", - "integrity": "sha512-Vl724Tzh4CF/13kgblOAQnMcHagromCP1EfyJ9G/8SxpSoTYeY2G6FmmcpbW51GqKxC7xgM9+Pck50dun7oYkg==", - "requires": { - "@turf/helpers": "6.x", - "@turf/invariant": "6.x" + "node_modules/@turf/boolean-point-on-line": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-6.3.0.tgz", + "integrity": "sha512-eScH8sfKJVjfbEX5Hgkt1nA7A8DUoiYD1riUVqTp2xikujrMfnYRjFpL/UAo01v33cPKZlhCXp7NE86bdOSrYg==", + "dependencies": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" } }, - "@turf/destination": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-6.0.1.tgz", - "integrity": "sha512-MroK4nRdp7as174miCAugp8Uvorhe6rZ7MJiC9Hb4+hZR7gNFJyVKmkdDDXIoCYs6MJQsx0buI+gsCpKwgww0Q==", - "requires": { - "@turf/helpers": "6.x", - "@turf/invariant": "6.x" + "node_modules/@turf/destination": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-6.3.0.tgz", + "integrity": "sha512-aLt3U/XkJWyZW08Ln1qZwBNAGh27yhmYLu892+dBj3gKP6UUiR6ZopXxrBwjBVe00A6k2ktftKDn79qe0hptuw==", + "dependencies": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" } }, - "@turf/difference": { + "node_modules/@turf/difference": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/@turf/difference/-/difference-6.0.1.tgz", "integrity": "sha512-lkhJjNfPeLARQm232A851vVhrUvX3gdvTft5QlqkUlr7AzLpiT8PW14yEkU9xABxRh6PGv7T1UUVAeRgC7JxuA==", - "requires": { + "dependencies": { "@turf/area": "6.x", "@turf/helpers": "6.x", "@turf/invariant": "6.x", @@ -1238,5974 +1608,23335 @@ "martinez-polygon-clipping": "*" } }, - "@turf/distance": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-6.0.1.tgz", - "integrity": "sha512-q7t7rWIWfkg7MP1Vt4uLjSEhe5rPfCO2JjpKmk7JC+QZKEQkuvHEqy3ejW1iC7Kw5ZcZNR3qdMGGz+6HnVwqvg==", - "requires": { - "@turf/helpers": "6.x", - "@turf/invariant": "6.x" + "node_modules/@turf/distance": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-6.3.0.tgz", + "integrity": "sha512-basi24ssNFnH3iXPFjp/aNUrukjObiFWoIyDRqKyBJxVwVOwAWvfk4d38QQyBj5nDo5IahYRq/Q+T47/5hSs9w==", + "dependencies": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" } }, - "@turf/helpers": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.1.4.tgz", - "integrity": "sha512-vJvrdOZy1ngC7r3MDA7zIGSoIgyrkWcGnNIEaqn/APmw+bVLF2gAW7HIsdTxd12s5wQMqEpqIQrmrbRRZ0xC7g==" + "node_modules/@turf/helpers": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.3.0.tgz", + "integrity": "sha512-kr6KuD4Z0GZ30tblTEvi90rvvVNlKieXuMC8CTzE/rVQb0/f/Cb29zCXxTD7giQTEQY/P2nRW23wEqqyNHulCg==" }, - "@turf/invariant": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.1.2.tgz", - "integrity": "sha512-WU08Ph8j0J2jVGlQCKChXoCtI50BB3yEH21V++V0T4cR1T27HKCxkehV2sYMwTierfMBgjwSwDIsxnR4/2mWXg==", - "requires": { - "@turf/helpers": "6.x" + "node_modules/@turf/invariant": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.3.0.tgz", + "integrity": "sha512-2OFOi9p+QOrcIMySEnr+WlOiKaFZ1bY56jA98YyECewJHfhPFWUBZEhc4nWGRT0ahK08Vus9+gcuBX8QIpCIIw==", + "dependencies": { + "@turf/helpers": "^6.3.0" } }, - "@turf/line-intersect": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.0.2.tgz", - "integrity": "sha512-pfL/lBu7ukBPdTjvSCmcNUzZ83V4R95htwqs5NqU8zeS4R+5KTwacbrOYKztjpmHBwUmPEIIpSbqkUoD0Fp7kg==", - "requires": { - "@turf/helpers": "6.x", - "@turf/invariant": "6.x", - "@turf/line-segment": "6.x", - "@turf/meta": "6.x", + "node_modules/@turf/line-intersect": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.3.0.tgz", + "integrity": "sha512-3naxR7XpkPd2vst3Mw6DFry4C9m3o0/f2n/xu5UAyxb88Ie4m2k+1eqkhzMMx/0L+E6iThWpLx7DASM6q6o9ow==", + "dependencies": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "@turf/line-segment": "^6.3.0", + "@turf/meta": "^6.3.0", "geojson-rbush": "3.x" } }, - "@turf/line-overlap": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-6.0.2.tgz", - "integrity": "sha512-Y7VTttNM+31R2hPa9N4a9ZaX/n1eOHvJkeBivXr/LBZClba365IzD9vtljYHMZQqD3SN7VmFJSmJyBIghO4V3Q==", - "requires": { - "@turf/boolean-point-on-line": "6.x", - "@turf/helpers": "6.x", - "@turf/invariant": "6.x", - "@turf/line-segment": "6.x", - "@turf/meta": "6.x", - "@turf/nearest-point-on-line": "6.x", + "node_modules/@turf/line-overlap": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-6.3.0.tgz", + "integrity": "sha512-fVyXfTpr/A+ZXZWG6PbuYz5rAGbTQWyrMZveCl2049SbOXSkVXGjUfpnLaklP0p+adw7eRR0LhZn6FGz9CQaFg==", + "dependencies": { + "@turf/boolean-point-on-line": "^6.3.0", + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "@turf/line-segment": "^6.3.0", + "@turf/meta": "^6.3.0", + "@turf/nearest-point-on-line": "^6.3.0", "deep-equal": "1.x", "geojson-rbush": "3.x" } }, - "@turf/line-segment": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.0.2.tgz", - "integrity": "sha512-8AkzDHoNw3X68y115josal+lvdAi4b2P1K0YNTKGyLRBaUhPXVSuMBpMd53FRF1hYEb9UJgMbugF9ZE7m5L6zg==", - "requires": { - "@turf/helpers": "6.x", - "@turf/invariant": "6.x", - "@turf/meta": "6.x" + "node_modules/@turf/line-segment": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.3.0.tgz", + "integrity": "sha512-M+aDy83V+E7jYWNaf+b+A88yhnMrJhyg/lhAj6mU6UeB2PbruXB2qgSmmVDSE2dIknOvZZuIWNzEzUI07RO2kw==", + "dependencies": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "@turf/meta": "^6.3.0" } }, - "@turf/meta": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.0.2.tgz", - "integrity": "sha512-VA7HJkx7qF1l3+GNGkDVn2oXy4+QoLP6LktXAaZKjuT1JI0YESat7quUkbCMy4zP9lAUuvS4YMslLyTtr919FA==", - "requires": { - "@turf/helpers": "6.x" + "node_modules/@turf/meta": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.3.0.tgz", + "integrity": "sha512-qBJjaAJS9H3ap0HlGXyF/Bzfl0qkA9suafX/jnDsZvWMfVLt+s+o6twKrXOGk5t7nnNON2NFRC8+czxpu104EQ==", + "dependencies": { + "@turf/helpers": "^6.3.0" } }, - "@turf/nearest-point-on-line": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.0.2.tgz", - "integrity": "sha512-re9tSEwYyG1EMo4ObXXAKYVhkMVANPIIJQ1V/J1lKcNfHVc1pYmd3D5jkTNBh+oriI9VL4PVML3eqYE+Zcg0mg==", - "requires": { - "@turf/bearing": "6.x", - "@turf/destination": "6.x", - "@turf/distance": "6.x", - "@turf/helpers": "6.x", - "@turf/invariant": "6.x", - "@turf/line-intersect": "6.x", - "@turf/meta": "6.x" + "node_modules/@turf/nearest-point-on-line": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.3.0.tgz", + "integrity": "sha512-b4C9Md1VbGn9chMgdSj2grJD4w4t0owEWOKEBwOZfdhrcksyOedVvKB7XqOFdj/8Jitel40EKAC5LQTNu24kEQ==", + "dependencies": { + "@turf/bearing": "^6.3.0", + "@turf/destination": "^6.3.0", + "@turf/distance": "^6.3.0", + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "@turf/line-intersect": "^6.3.0", + "@turf/meta": "^6.3.0" + } + }, + "node_modules/@turf/union": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/union/-/union-6.3.0.tgz", + "integrity": "sha512-m8yh13Q5E0Y+YC10+iI/Qq0Txt7UmSIFByc7DfNVlMMGTceqLFa8xGwSVdFuB/d6MWwKuzKonQMl1PUx/Vd2Iw==", + "dependencies": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "polygon-clipping": "^0.15.2" } }, - "@turf/union": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@turf/union/-/union-6.0.3.tgz", - "integrity": "sha512-SJPhEvsR96k4vFqymxPPC43jcqFydTafGjHWnYzlupxqUDzIYD8X5d9Ed8mONl2T9oM4ErbNuuZ9j/eHvoWtKw==", - "requires": { - "@turf/helpers": "6.x", - "@turf/invariant": "6.x", - "martinez-polygon-clipping": "^0.4.3" - }, + "node_modules/@types/babel-core": { + "version": "6.25.6", + "resolved": "https://registry.npmjs.org/@types/babel-core/-/babel-core-6.25.6.tgz", + "integrity": "sha512-OzYuLL6Lw0wpE8qXFIuyS0GsagzCr3beo/+AIttM7slM9cUhbgHjU3oWvgVE+uOhcZYS4NesBilF2iZj3gM4LQ==", + "dev": true, "dependencies": { - "martinez-polygon-clipping": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.4.3.tgz", - "integrity": "sha512-3ZNS0ksKhWTLsmCUkNf+/UimndZ5U2cVOS0I+IjiwF+M23E77TmeOZSmbRJbfCoQUog/vcQ42s3DXrhgOhgPqw==", - "requires": { - "splaytree": "^0.1.4", - "tinyqueue": "^1.2.0" - } - } + "@types/babel-generator": "*", + "@types/babel-template": "*", + "@types/babel-traverse": "*", + "@types/babel-types": "*", + "@types/babylon": "*" } }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", - "dev": true - }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "node_modules/@types/babel-generator": { + "version": "6.25.3", + "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.3.tgz", + "integrity": "sha512-pGgnuxVddKcYIc+VJkRDop7gxLhqclNKBdlsm/5Vp8d+37pQkkDK7fef8d9YYImRzw9xcojEPc18pUYnbxmjqA==", "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" + "dependencies": { + "@types/babel-types": "*" } }, - "@types/json-schema": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz", - "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==", - "dev": true + "node_modules/@types/babel-template": { + "version": "6.25.2", + "resolved": "https://registry.npmjs.org/@types/babel-template/-/babel-template-6.25.2.tgz", + "integrity": "sha512-QKtDQRJmAz3Y1HSxfMl0syIHebMc/NnOeH/8qeD0zjgU2juD0uyC922biMxCy5xjTNvHinigML2l8kxE8eEBmw==", + "dev": true, + "dependencies": { + "@types/babel-types": "*", + "@types/babylon": "*" + } }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", - "dev": true + "node_modules/@types/babel-traverse": { + "version": "6.25.5", + "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.5.tgz", + "integrity": "sha512-WrMbwmu+MWf8FiUMbmVOGkc7bHPzndUafn1CivMaBHthBBoo0VNIcYk1KV71UovYguhsNOwf3UF5oRmkkGOU3w==", + "dev": true, + "dependencies": { + "@types/babel-types": "*" + } }, - "@types/node": { - "version": "14.14.20", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", - "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==", + "node_modules/@types/babel-types": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.9.tgz", + "integrity": "sha512-qZLoYeXSTgQuK1h7QQS16hqLGdmqtRmN8w/rl3Au/l5x/zkHx+a4VHrHyBsi1I1vtK2oBHxSzKIu0R5p6spdOA==", "dev": true }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", - "dev": true - }, - "@vue/component-compiler-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz", - "integrity": "sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==", + "node_modules/@types/babylon": { + "version": "6.16.5", + "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz", + "integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==", "dev": true, - "requires": { - "consolidate": "^0.15.1", - "hash-sum": "^1.0.2", - "lru-cache": "^4.1.2", - "merge-source-map": "^1.1.0", - "postcss": "^7.0.14", - "postcss-selector-parser": "^6.0.2", - "prettier": "^1.18.2", - "source-map": "~0.6.1", - "vue-template-es2015-compiler": "^1.9.0" - }, "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } + "@types/babel-types": "*" } }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "node_modules/@types/browser-sync": { + "version": "2.26.1", + "resolved": "https://registry.npmjs.org/@types/browser-sync/-/browser-sync-2.26.1.tgz", + "integrity": "sha512-zuz0uF2QccSVbG4ubkjVDlQYpeBX/JXvmlqFFmp04FYOXunXZtx0y+UdWJxu7uryMMGkQykujUMm/ju85kqI7Q==", "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "dependencies": { + "@types/micromatch": "^2", + "@types/node": "*", + "@types/serve-static": "*", + "chokidar": "^2.1.2" } }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "node_modules/@types/browser-sync/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" } }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "node_modules/@types/browser-sync/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "node_modules/@types/browser-sync/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "engines": { + "node": ">=0.10.0" } }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "node_modules/@types/browser-sync/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "node_modules/@types/browser-sync/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", "dev": true, - "requires": { - "@xtuc/long": "4.2.2" + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" } }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "node_modules/@types/browser-sync/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "node_modules/@types/browser-sync/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "node_modules/@types/browser-sync/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" } }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "node_modules/@types/browser-sync/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" } }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "node_modules/@types/browser-sync/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "node_modules/@types/browser-sync/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "node_modules/@types/browser-sync/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "acorn-jsx": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", - "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", - "dev": true - }, - "adjust-sourcemap-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", - "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", + "node_modules/@types/browser-sync/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, "dependencies": { - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - } + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/@types/browser-sync/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "ajv": { - "version": "6.12.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", - "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", + "node_modules/@types/browser-sync/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true + "node_modules/@types/browser-sync/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } }, - "ajv-keywords": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.0.tgz", - "integrity": "sha512-eyoaac3btgU8eJlvh01En8OCKzRqlLe2G5jDsCr3RiE2uLGMEEB1aaGwVVpwR8M95956tGH6R+9edC++OvzaVw==", - "dev": true - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true + "node_modules/@types/browser-sync/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true + "node_modules/@types/browser-sync/node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true + "node_modules/@types/browser-sync/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } }, - "ansi-regex": { + "node_modules/@types/browser-sync/node_modules/to-regex-range": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } }, - "ansi-styles": { + "node_modules/@types/clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-ET0ldU/vpXecy5vO8JRIhtJWSrk1vzXdJcp3Bjf8bARZynl6vfkhEKY/A7njfNIRlmyTGuVFuqnD6I3tOGdXpQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "source-map": "^0.6.0" + } + }, + "node_modules/@types/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/cssnano": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/cssnano/-/cssnano-4.0.0.tgz", + "integrity": "sha512-BC/2ibKZfPIaBLBNzkitdW1IvvX/LKW6/QXGc4Su/tAJ7mQ3f2CKBuGCCKaqGAnoKwzfuC7G/recpkARwdOwuA==", + "dev": true, + "dependencies": { + "postcss": "5 - 7" + } + }, + "node_modules/@types/cssnano/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "requires": { + "dependencies": { "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/@types/cssnano/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/@types/cssnano/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { - "sprintf-js": "~1.0.2" + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", - "dev": true + "node_modules/@types/cssnano/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "node_modules/@types/cssnano/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "node_modules/@types/cssnano/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true + "node_modules/@types/cssnano/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true + "node_modules/@types/cssnano/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "node_modules/@types/cssnano/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, - "requires": { - "array-uniq": "^1.0.1" + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true + "node_modules/@types/eslint": { + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.8.tgz", + "integrity": "sha512-RTKvBsfz0T8CKOGZMfuluDNyMFHnu5lvNr4hWEsQeHXH6FcmIDIozOyWMh36nLGMwVd5UFNXC2xztA8lln22MQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "node_modules/@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "node_modules/@types/estree": { + "version": "0.0.46", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz", + "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==", "dev": true }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "node_modules/@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "@types/minimatch": "*", + "@types/node": "*" } }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "node_modules/@types/http-proxy": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.5.tgz", + "integrity": "sha512-GNkDE7bTv6Sf8JbV2GksknKOsk7OznNYHSdrtvPJXO0qJ9odZig6IZKUi5RFGi6d1bf6dgIAe4uXi3DBc7069Q==", "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } + "@types/node": "*" } }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", - "dev": true + "node_modules/@types/imagemin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-7.0.0.tgz", + "integrity": "sha512-BiNd5FazD5ZmJUYD9txsbrttL0P0welrb9yAPn6ykKK3kWufwFsxYqw5KdggfZQDjiNYwsBrX+Fwei0Xsw4oAw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } }, - "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true + "node_modules/@types/imagemin-gifsicle": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz", + "integrity": "sha512-RVFQZhPm/6vLC8wDvzHa34ZDrJECqmDV4XBS99AEk2ObyV4pcLQwObGYlmBv6fi9AtRLHf8mnKGczIHtF77u7w==", + "dev": true, + "dependencies": { + "@types/imagemin": "*" + } }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "node_modules/@types/imagemin-mozjpeg": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz", + "integrity": "sha512-sR2nEZOrlbgnmVgG+lXetZOvhgtctLe1hBfvySnPnxDd2pOon9mMPq7SHFI89VZT1AXvFgRs8w6X8ik8potpgA==", "dev": true, - "requires": { - "lodash": "^4.17.14" + "dependencies": { + "@types/imagemin": "*" } }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "node_modules/@types/imagemin-optipng": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.0.tgz", + "integrity": "sha512-Qn4gTV1fpPG2WIsUIl10yi2prudOuDIx+D+O0H3aKZRcTCwpMjszBVeRWUqkhG5wADhWO4giLut1sFNr3H2XIQ==", + "dev": true, + "dependencies": { + "@types/imagemin": "*" + } + }, + "node_modules/@types/imagemin-svgo": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-8.0.1.tgz", + "integrity": "sha512-YafkdrVAcr38U0Ln1C+L1n4SIZqC47VBHTyxCq7gTUSd1R9MdIvMcrljWlgU1M9O68WZDeQWUrKipKYfEOCOvQ==", + "dev": true, + "dependencies": { + "@types/imagemin": "*", + "@types/svgo": "^1" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", "dev": true }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "node_modules/@types/micromatch": { + "version": "2.3.30", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-2.3.30.tgz", + "integrity": "sha512-6rW4NsUHaDudxJSuRlm1PdNu61CDXkgix7LBOBg7b3yWQ43XANYSPwkvX1cGiZvBVZW8c5rsCEfrfzbPkch8ag==", + "dev": true, + "dependencies": { + "@types/parse-glob": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", "dev": true }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "node_modules/@types/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", "dev": true }, - "autoprefixer": { - "version": "9.8.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", - "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "node_modules/@types/node": { + "version": "14.14.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", + "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==", + "dev": true + }, + "node_modules/@types/parse-glob": { + "version": "3.0.29", + "resolved": "https://registry.npmjs.org/@types/parse-glob/-/parse-glob-3.0.29.tgz", + "integrity": "sha1-akDsfr0kGO5p7jl+SOQhaSaKEL8=", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/serve-static": { + "version": "1.13.9", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", + "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", "dev": true, - "requires": { - "browserslist": "^4.12.0", - "caniuse-lite": "^1.0.30001109", - "colorette": "^1.2.1", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^7.0.32", - "postcss-value-parser": "^4.1.0" + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" } }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "node_modules/@types/svgo": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.5.tgz", + "integrity": "sha512-y9Pw8IK50OqFRDpdI9Is29KlWiENVW9FDvlTmGHelvTfR2brYFJbsClvulZfeq6YKacFrDsG9a39w0kJZdHLaw==", + "dev": true + }, + "node_modules/@vue/component-compiler-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz", + "integrity": "sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==", "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "dependencies": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.14", + "postcss-selector-parser": "^6.0.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" }, + "optionalDependencies": { + "prettier": "^1.18.2" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "node_modules/@vue/component-compiler-utils/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "babel-merge": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/babel-merge/-/babel-merge-2.0.1.tgz", - "integrity": "sha512-puTQQxuzS+0JlMyVdfsTVaCgzqjBXKPMv7oUANpYcHFY+7IptWZ4PZDYX+qBxrRMtrriuBA44LkKpS99EJzqVA==", + "node_modules/@vue/component-compiler-utils/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { - "@babel/core": "^7.0.0-beta.49", - "deepmerge": "^2.1.0", - "object.omit": "^3.0.0" + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "node_modules/@vue/component-compiler-utils/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "requires": { - "object.assign": "^4.1.0" + "dependencies": { + "color-name": "1.1.3" } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "node_modules/@vue/component-compiler-utils/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "node_modules/@vue/component-compiler-utils/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "node_modules/@webassemblyjs/ast": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + } }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", "dev": true }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", "dev": true }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", "dev": true }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@xtuc/long": "4.2.2" } }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", "dev": true }, - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", - "dev": true + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" + } }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "@xtuc/ieee754": "^1.2.0" } }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "dependencies": { + "@xtuc/long": "4.2.2" } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", "dev": true }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "dependencies": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" } }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" + } }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "dependencies": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "dependencies": { + "@webassemblyjs/ast": "1.11.0", + "@xtuc/long": "4.2.2" } }, - "browserify-des": { + "node_modules/@webpack-cli/configtest": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz", + "integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==", "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" } }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "node_modules/@webpack-cli/info": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz", + "integrity": "sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==", "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" } }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "node_modules/@webpack-cli/serve": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz", + "integrity": "sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==", "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "peerDependencies": { + "webpack-cli": "4.x.x" }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true } } }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, - "requires": { - "pako": "~1.0.5" + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" } }, - "browserslist": { - "version": "4.16.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.0.tgz", - "integrity": "sha512-/j6k8R0p3nxOC6kx5JGAxsnhc9ixaWJfYc+TNTzxg6+ARaESAvQGV7h0uNOB4t+pLQJZWzcrMxXOxjgsCj3dqQ==", + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001165", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.621", - "escalade": "^3.1.1", - "node-releases": "^1.1.67" + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-status-codes": { + "node_modules/adjust-sourcemap-loader": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", + "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "cacache": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", - "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "requires": { - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "minipass": "^3.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "p-map": "^3.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^2.7.1", - "ssri": "^7.0.0", - "unique-filename": "^1.1.1" + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "peerDependencies": { + "ajv": "^6.9.1" } }, - "call-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.0.tgz", - "integrity": "sha512-AEXsYIyyDY3MCzbwdhzG3Jx1R0J2wetQyUynn6dYHAO+bg8l1k7jwZtRv4ryryFs7EP+NDlikJlVe59jr0cM2w==", + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.0" + "engines": { + "node": ">=6" } }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, - "requires": { - "callsites": "^2.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "node_modules/ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", "dev": true, - "requires": { - "caller-callsite": "^2.0.0" + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" } }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "caniuse-lite": { - "version": "1.0.30001173", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001173.tgz", - "integrity": "sha512-R3aqmjrICdGCTAnSXtNyvWYMK3YtV5jwudbq0T7nN9k4kmE4CBuwPqyJ+KBzepSTh0huivV2gLbSMEzTTmfeYw==", + "node_modules/arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", "dev": true }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "engines": { + "node": ">=0.10.0" } }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" + "engines": { + "node": ">=0.10.0" } }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "node_modules/array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", "dev": true }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "requires": { - "tslib": "^1.9.0" + "engines": { + "node": ">=8" } }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "engines": { + "node": ">=0.10.0" } }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" } }, - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, - "requires": { - "source-map": "~0.6.0" - }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "object-assign": "^4.1.1", + "util": "0.10.3" } }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", "dev": true }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "inherits": "2.0.1" } }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "engines": { + "node": ">=0.10.0" } }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" + "engines": { + "node": ">=8" } }, - "collect.js": { - "version": "4.28.6", - "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.28.6.tgz", - "integrity": "sha512-NAyuk1DnCotRaDZIS5kJ4sptgkwOeYqElird10yziN5JBuwYOGkOTguhNcPn5g344IfylZecxNYZAVXgv19p5Q==", + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, - "collection-visit": { + "node_modules/at-least-node": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "engines": { + "node": ">= 4.0.0" } }, - "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/autoprefixer": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz", + "integrity": "sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==", "dev": true, - "requires": { - "color-name": "1.1.3" + "dependencies": { + "browserslist": "^4.16.3", + "caniuse-lite": "^1.0.30001196", + "colorette": "^1.2.2", + "fraction.js": "^4.0.13", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-string": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", - "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "node_modules/available-typed-arrays": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", + "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "dependencies": { + "array-filter": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "node_modules/babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } }, - "commondir": { + "node_modules/babel-loader/node_modules/json5": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } }, - "compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "node_modules/babel-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, - "requires": { - "arity-n": "^1.0.4" + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" } }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "node_modules/babel-merge": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/babel-merge/-/babel-merge-3.0.0.tgz", + "integrity": "sha512-eBOBtHnzt9xvnjpYNI5HmaPp/b2vMveE5XggzqHnQeHJ8mFIBrBv6WZEVIj5jJ2uwTItkqKo9gWzEEcBxEq0yw==", "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "dependencies": { + "deepmerge": "^2.2.1", + "object.omit": "^3.0.0" }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "object.assign": "^4.1.0" } }, - "concat": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", - "integrity": "sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz", + "integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==", "dev": true, - "requires": { - "commander": "^2.9.0" + "dependencies": { + "@babel/compat-data": "^7.13.0", + "@babel/helper-define-polyfill-provider": "^0.1.5", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", + "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.1.5", + "core-js-compat": "^3.8.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz", + "integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.1.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "consolidate": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", - "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, - "requires": { - "bluebird": "^3.1.1" + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "constants-browserify": { + "node_modules/base/node_modules/define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, - "requires": { - "safe-buffer": "5.1.2" + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, - "requires": { - "safe-buffer": "~5.1.1" + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" + "engines": { + "node": "*" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "core-js-compat": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.8.2.tgz", - "integrity": "sha512-LO8uL9lOIyRRrQmZxHZFl1RV+ZbcsAkFWTktn5SmH40WgLtSNYN4m4W2v9ONT147PxBY/XrRhrWq8TlvObyUjQ==", + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, - "requires": { - "browserslist": "^4.16.0", - "semver": "7.0.0" - }, + "optional": true, "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } + "file-uri-to-path": "1.0.0" } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - } + "node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "engines": { + "node": ">= 0.8" } }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "engines": { + "node": ">= 0.8" } }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "dependencies": { + "ms": "2.0.0" } }, - "cross-env": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", - "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.5" - } + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" } }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", "dev": true }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "css-loader": { + "node_modules/browserify-cipher": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz", - "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash": "^4.17.11", - "postcss": "^6.0.23", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", - "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" - }, "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "css-selector-tokenizer": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", - "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, - "requires": { - "cssesc": "^3.0.0", - "fastparse": "^1.1.2" + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" } }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" } }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" + "dependencies": { + "pako": "~1.0.5" } }, - "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "node_modules/browserslist": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", + "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", "dev": true, - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", - "postcss-unique-selectors": "^4.0.1" + "dependencies": { + "caniuse-lite": "^1.0.30001181", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.649", + "escalade": "^3.1.1", + "node-releases": "^1.1.70" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", "dev": true }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "dev": true, - "requires": { - "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz", - "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "engines": { + "node": ">= 0.8" } }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, - "d": { + "node_modules/cache-base": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "de-indent": { + "node_modules/call-bind": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", - "dev": true + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "dev": true, - "requires": { - "ms": "^2.1.1" + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true, + "engines": { + "node": ">=4" + } }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", - "dev": true + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } }, - "default-gateway": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", - "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true, - "requires": { - "execa": "^1.0.0", - "ip-regex": "^2.1.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "del": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", - "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "node_modules/caniuse-lite": { + "version": "1.0.30001205", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001205.tgz", + "integrity": "sha512-TL1GrS5V6LElbitPazidkBMD9sa448bQDDLrumDqaggmKFcuU2JW1wTOHJPukAcOMtEmLcmDJEzfRrf+GjM0Og==", + "dev": true + }, + "node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "globby": "^6.1.0", - "is-path-cwd": "^2.0.0", - "is-path-in-cwd": "^2.0.0", - "p-map": "^2.0.0", - "pify": "^4.0.1", - "rimraf": "^2.6.3" - }, "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", - "dev": true - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true, + "engines": { + "node": "*" + } }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "dependencies": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" } }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true + "node_modules/chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "node": ">=6.0" + } }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "node_modules/chrome-trace-event/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "node_modules/ci-info": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", + "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", "dev": true }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, - "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "node_modules/clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" } }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" + "engines": { + "node": ">=0.10.0" } }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, - "requires": { - "esutils": "^2.0.2" + "engines": { + "node": ">=6" } }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "node_modules/cli-table3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", + "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, "dependencies": { - "domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", - "dev": true - } + "object-assign": "^4.1.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "colors": "^1.1.2" } }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, - "requires": { - "is-obj": "^2.0.0" + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "dotenv": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-6.2.0.tgz", - "integrity": "sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w==", - "dev": true - }, - "dotenv-expand": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", - "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=", - "dev": true + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "node_modules/coa/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.634", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.634.tgz", - "integrity": "sha512-QPrWNYeE/A0xRvl/QP3E0nkaEvYUvH3gM04ZWYtIa6QlSpEetRlRI1xvQ7hiMIySHHEV+mwDSX8Kj4YZY6ZQAw==", - "dev": true - }, - "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "node_modules/coa/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coa/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "color-name": "1.1.3" } }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "node_modules/coa/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "emojis-list": { + "node_modules/coa/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "node_modules/coa/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/collect.js": { + "version": "4.28.6", + "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.28.6.tgz", + "integrity": "sha512-NAyuk1DnCotRaDZIS5kJ4sptgkwOeYqElird10yziN5JBuwYOGkOTguhNcPn5g344IfylZecxNYZAVXgv19p5Q==", "dev": true }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, - "requires": { - "once": "^1.4.0" + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "node_modules/color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } + "color-convert": "^1.9.1", + "color-string": "^1.5.4" } }, - "enquirer": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.5.tgz", - "integrity": "sha512-BNT1C08P9XD0vNg3J475yIUG+mVdp9T6towYFHUv897X0KoHBjB1shyrNmhmtHWKP17iSWgo7Gqh7BBuzLZMSA==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { - "ansi-colors": "^3.2.1" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "entities": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", - "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "node_modules/color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", "dev": true, - "requires": { - "prr": "~1.0.1" + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "requires": { - "is-arrayish": "^0.2.1" + "dependencies": { + "color-name": "1.1.3" } }, - "error-stack-parser": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.6.tgz", - "integrity": "sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==", + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, - "requires": { - "stackframe": "^1.1.1" + "optional": true, + "engines": { + "node": ">=0.1.90" } }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" + "dependencies": { + "arity-n": "^1.0.4" } }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "es6-templates": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", - "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "requires": { - "recast": "~0.11.12", - "through": "~2.3.6" + "dependencies": { + "ms": "2.0.0" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "escape-html": { + "node_modules/concat": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", + "integrity": "sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=", + "dev": true, + "dependencies": { + "commander": "^2.9.0" + }, + "bin": { + "concat": "bin/concat" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "node_modules/concat/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "eslint": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.3.1.tgz", - "integrity": "sha512-cQC/xj9bhWUcyi/RuMbRtC3I0eW8MH0jhRELSvpKYkWep3C6YZ2OkvcvJVUeO6gcunABmzptbXBuDoXsjHmfTA==", + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.0", - "eslint-utils": "^2.0.0", - "eslint-visitor-keys": "^1.2.0", - "espree": "^7.1.0", - "esquery": "^1.2.0", - "esutils": "^2.0.2", - "file-entry-cache": "^5.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.14", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^5.2.3", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "import-fresh": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", - "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "semver": { - "version": "7.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", - "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "engines": { + "node": ">=0.8" } }, - "eslint-plugin-vue": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz", - "integrity": "sha512-Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ==", - "dev": true, - "requires": { - "natural-compare": "^1.4.0", - "semver": "^5.6.0", - "vue-eslint-parser": "^7.0.0" - } + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" + "dependencies": { + "bluebird": "^3.1.1" + }, + "engines": { + "node": ">= 0.10.0" } }, - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, - "espree": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.1.0.tgz", - "integrity": "sha512-dcorZSyfmm4WTuTnE5Y7MEN1DyoPYy1ZR783QW1FJoenn7RailyWFsq/UL6ZAAA7uXurN9FIpYyUs3OfiIW+Qw==", + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dev": true, - "requires": { - "acorn": "^7.2.0", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.2.0" - }, "dependencies": { - "acorn": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", - "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", - "dev": true - } + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.6" } }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", - "dev": true + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, "dependencies": { - "estraverse": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", - "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", - "dev": true - } + "safe-buffer": "~5.1.1" } }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "dev": true, - "requires": { - "estraverse": "^4.1.0" + "engines": { + "node": ">= 0.6" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", "dev": true }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true + "node_modules/core-js-compat": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.10.0.tgz", + "integrity": "sha512-9yVewub2MXNYyGvuLnMHcN1k9RkvB7/ofktpeKTIaASyB88YYqGzUnu0ywMMhJrDHOMiTjSHWGzR+i7Wb9Z1kQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.3", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } }, - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, - "requires": { - "original": "^1.0.0" + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" } }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "node_modules/cosmiconfig/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "node_modules/cosmiconfig/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "engines": { + "node": ">=4" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" } }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "node_modules/cross-env": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", + "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", "dev": true, - "requires": { - "type": "^2.0.0" - }, "dependencies": { - "type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", - "dev": true - } + "cross-spawn": "^6.0.5" + }, + "bin": { + "cross-env": "dist/bin/cross-env.js", + "cross-env-shell": "dist/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=4.0" } }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } + "engines": { + "node": "*" } }, - "extract-text-webpack-plugin": { - "version": "4.0.0-beta.0", - "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-4.0.0-beta.0.tgz", - "integrity": "sha512-Hypkn9jUTnFr0DpekNam53X47tXn3ucY08BQumv7kdGgeVUBLq3DJHJTi6HNxv4jl9W+Skxjz9+RnK0sJyqqjA==", + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, - "requires": { - "async": "^2.4.1", - "loader-utils": "^1.1.0", - "schema-utils": "^0.4.5", - "webpack-sources": "^1.1.0" - }, "dependencies": { - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0" - } - } + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" } }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "node_modules/css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" + "dependencies": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" } }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true + "node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true, + "engines": { + "node": "*" + } }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "node_modules/css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" + "dependencies": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "engines": { + "node": ">4" } }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true + "node_modules/css-declaration-sorter/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } }, - "file-entry-cache": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", - "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "node_modules/css-declaration-sorter/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { - "flat-cache": "^2.0.1" + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "file-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-2.0.0.tgz", - "integrity": "sha512-YCsBfd1ZGCyonOKLxPiKPdu+8ld9HAaMEvJewzz+b2eTF7uL5Zm/HdBF6FjCrpCMRq25Mi0U1gl4pwn2TlH7hQ==", + "node_modules/css-declaration-sorter/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { - "loader-utils": "^1.0.2", - "schema-utils": "^1.0.0" + "dependencies": { + "has-flag": "^3.0.0" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/css-declaration-sorter/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } + "color-name": "1.1.3" } }, - "file-type": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", - "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", + "node_modules/css-declaration-sorter/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "node_modules/css-declaration-sorter/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, - "optional": true + "engines": { + "node": ">=4" + } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/css-declaration-sorter/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/css-declaration-sorter/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "engines": { + "node": ">=0.10.0" } }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "node_modules/css-declaration-sorter/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/css-loader": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.0.tgz", + "integrity": "sha512-MfRo2MjEeLXMlUkeUwN71Vx5oc6EJnx5UQ4Yi9iUtYQvrPtwLUucYptz0hc6n++kdNcyF5olYBS4vPjJDAcLkw==", "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "dependencies": { + "camelcase": "^6.2.0", + "cssesc": "^3.0.0", + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.8", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" } }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "node_modules/css-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "flat-cache": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", - "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "node_modules/css-loader/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, - "requires": { - "flatted": "^2.0.0", - "rimraf": "2.6.3", - "write": "1.0.3" - }, "dependencies": { - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "flatted": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "node_modules/css-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" } }, - "follow-redirects": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", - "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", "dev": true }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "node_modules/css-select/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, - "requires": { - "map-cache": "^0.2.2" + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" } }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "friendly-errors-webpack-plugin": { + "node_modules/css-select/node_modules/domutils": { "version": "1.7.0", - "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz", - "integrity": "sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw==", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, - "requires": { - "chalk": "^1.1.3", - "error-stack-parser": "^2.0.0", - "string-width": "^2.0.0" - }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "dom-serializer": "0", + "domelementtype": "1" } }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "node_modules/css-select/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "engines": { + "node": ">=0.10.0" } }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", "dev": true, - "requires": { - "minipass": "^3.0.0" + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "node_modules/css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "engines": { + "node": ">=0.10.0" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true + "node_modules/cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "dev": true, + "dependencies": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } }, - "geojson-equality": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/geojson-equality/-/geojson-equality-0.1.6.tgz", - "integrity": "sha1-oXE3TvBD5dR5eZWEC65GSOB1LXI=", - "requires": { - "deep-equal": "^1.0.0" + "node_modules/cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "geojson-rbush": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.1.2.tgz", - "integrity": "sha512-grkfdg3HIeTjwTfiJe5FT8+fGU3fABCc+vRJDBwdQz9kkLF0Sbif2gs2JUzjewwgmnvLGy9fInySDeADoNuk7w==", - "requires": { - "@turf/bbox": "*", - "@turf/helpers": "6.x", - "@turf/meta": "6.x", - "rbush": "^2.0.0" + "node_modules/cssnano-preset-default/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "node_modules/cssnano-preset-default/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } }, - "get-intrinsic": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", - "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", + "node_modules/cssnano-preset-default/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "node_modules/cssnano-preset-default/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "requires": { - "pump": "^3.0.0" + "dependencies": { + "color-name": "1.1.3" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "node_modules/cssnano-preset-default/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "node_modules/cssnano-preset-default/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "engines": { + "node": ">=4" } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "node_modules/cssnano-preset-default/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true + "node_modules/cssnano-preset-default/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "node_modules/cssnano-preset-default/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, - "requires": { - "global-prefix": "^3.0.0" - }, "dependencies": { - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - } + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "node_modules/cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "engines": { + "node": ">=6.9.0" } }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "node_modules/cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, - "globby": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", - "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "node_modules/cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true + "node_modules/cssnano-util-raw-cache/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true + "node_modules/cssnano-util-raw-cache/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" + "node_modules/cssnano-util-raw-cache/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "node_modules/cssnano-util-raw-cache/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "requires": { - "ansi-regex": "^2.0.0" + "dependencies": { + "color-name": "1.1.3" } }, - "has-flag": { + "node_modules/cssnano-util-raw-cache/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/cssnano-util-raw-cache/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "engines": { + "node": ">=4" } }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "node_modules/cssnano-util-raw-cache/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "node_modules/cssnano-util-raw-cache/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } + "engines": { + "node": ">=0.10.0" } }, - "hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", - "dev": true - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "node_modules/cssnano-util-raw-cache/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "node_modules/cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "engines": { + "node": ">=6.9.0" } }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "node_modules/cssnano/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "requires": { - "parse-passwd": "^1.0.0" + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "node_modules/cssnano/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, - "html-entities": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", - "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", - "dev": true - }, - "html-loader": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.5.5.tgz", - "integrity": "sha512-7hIW7YinOYUpo//kSYcPB6dCKoceKLmOwjEMmhIobHuWGDVl0Nwe4l68mdG/Ru0wcUxQjVMEoZpkalZ/SE7zog==", + "node_modules/cssnano/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { - "es6-templates": "^0.2.3", - "fastparse": "^1.1.1", - "html-minifier": "^3.5.8", - "loader-utils": "^1.1.0", - "object-assign": "^4.1.1" + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "node_modules/cssnano/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, - "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" - }, "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - } + "color-name": "1.1.3" } }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "node_modules/cssnano/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "node_modules/cssnano/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", - "dev": true + "node_modules/cssnano/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "node_modules/cssnano/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "http-proxy-middleware": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", - "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, - "requires": { - "http-proxy": "^1.17.0", - "is-glob": "^4.0.0", - "lodash": "^4.17.11", - "micromatch": "^3.1.10" + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" } }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", "dev": true }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "engines": { + "node": ">=0.10.0" } }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", "dev": true }, - "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, - "requires": { - "postcss": "^6.0.1" - }, "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "imagemin": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-6.1.0.tgz", - "integrity": "sha512-8ryJBL1CN5uSHpiBMX0rJw79C9F9aJqMnjGnrd/1CafegpNuA81RBAAru/jQQEOWlOJJlpRnlcVFF6wq+Ist0A==", + "node_modules/deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", "dev": true, - "requires": { - "file-type": "^10.7.0", - "globby": "^8.0.1", - "make-dir": "^1.0.0", - "p-pipe": "^1.1.0", - "pify": "^4.0.1", - "replace-ext": "^1.0.0" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - } + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" } }, - "img-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-3.0.2.tgz", - "integrity": "sha512-rSriLKgvi85Km7ppSF+AEAM3nU4fxpvCkaXtC/IoCEU7jfks55bEANFs0bB9YXYkxY9JurZQIZFtXh5Gue3upw==", + "node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, - "requires": { - "loader-utils": "^1.1.0" + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "node_modules/del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", "dev": true, - "requires": { - "import-from": "^2.1.0" + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "node_modules/del/node_modules/globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "node_modules/del/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true, - "requires": { - "resolve-from": "^3.0.0" + "engines": { + "node": ">= 4" } }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" - }, "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - } + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/detect-node": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.5.tgz", + "integrity": "sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==", "dev": true }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", "dev": true }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "node_modules/dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } }, - "internal-ip": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", - "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, - "requires": { - "default-gateway": "^4.2.0", - "ipaddr.js": "^1.9.0" + "dependencies": { + "buffer-indexof": "^1.0.0" } }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true + "node_modules/dom-serializer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", + "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true + "node_modules/dom-serializer/node_modules/domhandler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", + "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "dev": true, + "dependencies": { + "domelementtype": "^2.1.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } }, - "is-absolute-url": { + "node_modules/domelementtype": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "node_modules/domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "domelementtype": "^2.0.1" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "node_modules/domutils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.0.tgz", + "integrity": "sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg==", "dev": true, - "requires": { - "binary-extensions": "^1.0.0" + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==" - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "node_modules/domutils/node_modules/domhandler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", + "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" + "dependencies": { + "domelementtype": "^2.1.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", - "dev": true - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", "dev": true, - "requires": { - "is-plain-object": "^2.0.4" + "engines": { + "node": ">=8" } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", "dev": true }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "node_modules/electron-to-chromium": { + "version": "1.3.703", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.703.tgz", + "integrity": "sha512-SVBVhNB+4zPL+rvtWLw7PZQkw/Eqj1HQZs22xtcqW36+xoifzEOEEDEpkxSMfB6RFeSIOcG00w6z5mSqLr1Y6w==", "dev": true }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "is-path-in-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", - "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, - "requires": { - "is-path-inside": "^2.1.0" + "engines": { + "node": ">= 4" } }, - "is-path-inside": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", - "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true, - "requires": { - "path-is-inside": "^1.0.2" + "engines": { + "node": ">= 0.8" } }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/enhanced-resolve": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", + "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==", "dev": true, - "requires": { - "isobject": "^3.0.1" + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" } }, - "is-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", - "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", - "requires": { - "has-symbols": "^1.0.1" + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" } }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "requires": { - "has-symbols": "^1.0.1" + "node_modules/envinfo": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz", + "integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" } }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "jest-worker": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-25.5.0.tgz", - "integrity": "sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw==", + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "is-arrayish": "^0.2.1" } }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "node_modules/es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - } + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema-traverse": { + "node_modules/es-module-lexer": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", + "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", "dev": true }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true + "node_modules/es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } }, - "json5": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", - "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, - "requires": { - "minimist": "^1.2.5" + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, - "requires": { - "graceful-fs": "^4.1.6" + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, - "laravel-mix": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-5.0.9.tgz", - "integrity": "sha512-1WCJiHimTRW3KlxcabRTco0q+bo4uKPaFTkc6cJ/bLEq4JT1aPkojoauUK7+PyiIlDJncw0Nt2MtDrv5C6j5IQ==", - "dev": true, - "requires": { - "@babel/core": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/plugin-transform-runtime": "^7.2.0", - "@babel/preset-env": "^7.2.0", - "@babel/runtime": "^7.2.0", - "autoprefixer": "^9.4.2", - "babel-loader": "^8.0.4", - "babel-merge": "^2.0.1", - "chokidar": "^2.0.3", - "clean-css": "^4.1.3", - "collect.js": "^4.12.8", - "concat": "^1.0.3", - "css-loader": "^1.0.1", - "dotenv": "^6.2.0", - "dotenv-expand": "^4.2.0", - "extract-text-webpack-plugin": "v4.0.0-beta.0", - "file-loader": "^2.0.0", - "friendly-errors-webpack-plugin": "^1.6.1", - "fs-extra": "^7.0.1", - "glob": "^7.1.2", - "html-loader": "^0.5.5", - "imagemin": "^6.0.0", - "img-loader": "^3.0.0", - "lodash": "^4.17.15", - "md5": "^2.2.1", - "optimize-css-assets-webpack-plugin": "^5.0.1", - "postcss-loader": "^3.0.0", - "style-loader": "^0.23.1", - "terser": "^3.11.0", - "terser-webpack-plugin": "^2.2.3", - "vue-loader": "^15.4.2", - "webpack": "^4.36.1", - "webpack-cli": "^3.1.2", - "webpack-dev-server": "^3.1.14", - "webpack-merge": "^4.1.0", - "webpack-notifier": "^1.5.1", - "yargs": "^15.4.1" + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" } }, - "laravel-mix-artisan-publish": { - "version": "git://github.com/mzur/laravel-mix-artisan-publish.git#c677462f05c13cb96f8a5434da7398b0f4bc6af2", - "from": "git://github.com/mzur/laravel-mix-artisan-publish.git", + "node_modules/eslint": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", + "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", "dev": true, - "requires": { - "node-cmd": "^3.0.0" + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.21", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "last-call-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "node_modules/eslint-plugin-vue": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.8.0.tgz", + "integrity": "sha512-OGrnPz+PuYL2HmVyBHxm4mRjxW2kfFCQE6Hw9G6qOHs/Pcu0srOlCCW0FMa8SLzIEqxl8WuKoBSPcMnrjUG2vw==", "dev": true, - "requires": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" + "dependencies": { + "eslint-utils": "^2.1.0", + "natural-compare": "^1.4.0", + "semver": "^7.3.2", + "vue-eslint-parser": "^7.6.0" + }, + "engines": { + "node": ">=8.10" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0" } }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/eslint-plugin-vue/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - } - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "loglevel": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.1.tgz", - "integrity": "sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==", - "dev": true - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "node_modules/eslint-plugin-vue/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "lru-cache": { + "node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "requires": { - "yallist": "^3.0.2" - }, "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, - "requires": { - "semver": "^6.0.0" - }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "requires": { - "object-visit": "^1.0.0" + "engines": { + "node": ">=4" } }, - "martinez-polygon-clipping": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.7.0.tgz", - "integrity": "sha512-EBxKjlUqrVjzT1HRwJARaSwj66JZqEUl+JnqnrzHZLU4hd4XrCQWqShZx40264NR/pm5wIHRlNEaIrev44wvKA==", - "requires": { - "robust-predicates": "^2.0.4", - "splaytree": "^0.1.4", - "tinyqueue": "^1.2.0" + "node_modules/eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true, + "engines": { + "node": ">=10" } }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "node_modules/eslint/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "node_modules/eslint/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true + "node_modules/eslint/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true + "node_modules/eslint/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "node_modules/eslint/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true + "node_modules/eslint/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "node_modules/eslint/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { - "source-map": "^0.6.1" - }, "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/eslint/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "engines": { + "node": ">=4" } }, - "miller-rabin": { + "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } + "engines": { + "node": ">=4" } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } }, - "mime-db": { - "version": "1.45.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", - "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", - "dev": true + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "mime-types": { - "version": "2.1.28", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", - "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "requires": { - "mime-db": "1.45.0" + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" } }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "requires": { - "brace-expansion": "^1.1.7" + "engines": { + "node": ">=4.0" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "minipass": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", - "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "requires": { - "yallist": "^4.0.0" + "engines": { + "node": ">=0.10.0" } }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true, - "requires": { - "minipass": "^3.0.0" + "engines": { + "node": ">= 0.6" } }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, - "requires": { - "minipass": "^3.0.0" + "engines": { + "node": ">=0.8.x" } }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "node_modules/eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", "dev": true, - "requires": { - "minipass": "^3.0.0" + "dependencies": { + "original": "^1.0.0" + }, + "engines": { + "node": ">=0.12.0" } }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "node_modules/execa/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "requires": { - "minimist": "^1.2.5" + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "node_modules/execa/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" + "engines": { + "node": ">=8" } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "node_modules/execa/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true + "node_modules/execa/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "nan": { - "version": "2.14.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", - "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==", + "node_modules/execa/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "optional": true + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", "dev": true }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "requires": { - "lower-case": "^1.1.1" + "dependencies": { + "ms": "2.0.0" } }, - "node-cmd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/node-cmd/-/node-cmd-3.0.0.tgz", - "integrity": "sha1-OP/3CkqqT2WdID61eGJzcBjiT28=", + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "node_modules/ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "dependencies": { + "type": "^2.0.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", "dev": true }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node-notifier": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz", - "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==", + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - }, - "dependencies": { - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "engines": { + "node": ">=0.10.0" } }, - "node-releases": { - "version": "1.1.69", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.69.tgz", - "integrity": "sha512-DGIjo79VDEyAnRlfSqYTsy+yoHd2IOjJiKUozD2MV2D85Vso6Bug56mb9tT/fY5Urt0iqk01H7x+llAruDR2zA==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, - "requires": { - "path-key": "^2.0.0" + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "nth-check": { + "node_modules/extglob/node_modules/is-descriptor": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, - "requires": { - "boolbase": "~1.0.0" + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "node_modules/fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8" } }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true }, - "object-is": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz", - "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==", - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "node_modules/fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "node_modules/fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", "dev": true, - "requires": { - "isobject": "^3.0.0" + "dependencies": { + "reusify": "^1.0.4" } }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "node_modules/faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "object.getownpropertydescriptors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz", - "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "dependencies": { + "escape-string-regexp": "^1.0.5" }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "object.omit": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz", - "integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==", + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", "dev": true, - "requires": { - "is-extendable": "^1.0.0" + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "node_modules/file-type": { + "version": "12.4.2", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", + "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", "dev": true, - "requires": { - "isobject": "^3.0.1" + "engines": { + "node": ">=8" } }, - "object.values": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.2.tgz", - "integrity": "sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==", + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1", - "has": "^1.0.3" - }, "dependencies": { - "es-abstract": { - "version": "1.18.0-next.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", - "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", - "is-negative-zero": "^2.0.0", - "is-regex": "^1.1.1", - "object-inspect": "^1.8.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.1", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - } - }, - "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", - "dev": true - }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - } + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "obuf": { + "node_modules/finalhandler": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, - "requires": { - "wrappy": "1" + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "opn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", - "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "requires": { - "is-wsl": "^1.1.0" + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "optimize-css-assets-webpack-plugin": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz", - "integrity": "sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A==", + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, - "requires": { - "cssnano": "^4.1.10", - "last-call-webpack-plugin": "^3.0.0" + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", + "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "original": { + "node_modules/for-in": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true, - "requires": { - "url-parse": "^1.4.3" + "engines": { + "node": ">=0.10.0" } }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "node_modules/foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", "dev": true }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true + "node_modules/forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true, + "engines": { + "node": ">= 0.6" + } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/fraction.js": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz", + "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==", "dev": true, - "requires": { - "p-try": "^2.0.0" + "engines": { + "node": "*" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, - "requires": { - "p-limit": "^2.2.0" + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true, - "requires": { - "aggregate-error": "^3.0.0" + "engines": { + "node": ">= 0.6" } }, - "p-pipe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", - "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.1.tgz", + "integrity": "sha512-fcSa+wyTqZa46iWweI7/ZiUfegOZl0SG8+dltIwFXo7+zYU9J9kpS3NB6pZcSlJdhvIwp81Adx2XhZorncxiaA==", "dev": true }, - "p-retry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", - "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "requires": { - "retry": "^0.12.0" + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" + "engines": { + "node": ">=6.9.0" } }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "node_modules/geojson-equality": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/geojson-equality/-/geojson-equality-0.1.6.tgz", + "integrity": "sha1-oXE3TvBD5dR5eZWEC65GSOB1LXI=", + "dependencies": { + "deep-equal": "^1.0.0" + } + }, + "node_modules/geojson-rbush": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.1.2.tgz", + "integrity": "sha512-grkfdg3HIeTjwTfiJe5FT8+fGU3fABCc+vRJDBwdQz9kkLF0Sbif2gs2JUzjewwgmnvLGy9fInySDeADoNuk7w==", + "dependencies": { + "@turf/bbox": "*", + "@turf/helpers": "6.x", + "@turf/meta": "6.x", + "rbush": "^2.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "requires": { - "no-case": "^2.2.0" + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", "dev": true, - "requires": { - "callsites": "^3.0.0" + "engines": { + "node": ">=10" }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "engines": { + "node": ">=0.10.0" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true + "node_modules/globals": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.7.0.tgz", + "integrity": "sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", "dev": true }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, - "path-is-absolute": { + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "path-is-inside": { + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "path-type": { + "node_modules/has-values/node_modules/is-number": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, - "requires": { - "pify": "^3.0.0" + "dependencies": { + "kind-of": "^3.0.2" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "pbf": { + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz", - "integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==", - "requires": { - "ieee754": "^1.1.6", - "resolve-protobuf-schema": "^2.0.0" + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" } }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, - "optional": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "requires": { - "pinkie": "^2.0.0" + "bin": { + "he": "bin/he" } }, - "pixelworks": { + "node_modules/hex-color-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pixelworks/-/pixelworks-1.1.0.tgz", - "integrity": "sha1-Hwla1I3Ki/ihyCWOAJIDGkTyLKU=" + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, - "requires": { - "find-up": "^4.0.0" + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "node_modules/html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true + }, + "node_modules/html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, + "node_modules/html-loader": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz", + "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==", + "dev": true, + "dependencies": { + "html-minifier-terser": "^5.1.1", + "htmlparser2": "^4.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/html-minifier-terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/html-minifier-terser/node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/html-minifier-terser/node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", + "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.1.0.tgz", + "integrity": "sha512-OnjU5vyVgcZVe2AjLJyMrk8YLNOC2lspCHirB5ldM+B/dwEfZ5bgVTrFyzE9R7xRWAP/i/FXtvIqKjTNEZBhBg==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.5", + "camelcase": "^6.2.0", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/imagemin": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", + "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", + "dev": true, + "dependencies": { + "file-type": "^12.0.0", + "globby": "^10.0.0", + "graceful-fs": "^4.2.2", + "junk": "^3.1.0", + "make-dir": "^3.0.0", + "p-pipe": "^3.0.0", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/img-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-3.0.2.tgz", + "integrity": "sha512-rSriLKgvi85Km7ppSF+AEAM3nU4fxpvCkaXtC/IoCEU7jfks55bEANFs0bB9YXYkxY9JurZQIZFtXh5Gue3upw==", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0" + }, + "peerDependencies": { + "imagemin": "^5.0.0 || ^6.0.0 || ^7.0.0" + } + }, + "node_modules/img-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/img-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dev": true, + "dependencies": { + "import-from": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-from/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-ip": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", + "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", + "dev": true, + "dependencies": { + "default-gateway": "^6.0.0", + "ipaddr.js": "^1.9.1", + "is-ip": "^3.1.0", + "p-event": "^4.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/internal-ip?sponsor=1" + } + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", + "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "dependencies": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz", + "integrity": "sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-ip": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", + "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", + "dev": true, + "dependencies": { + "ip-regex": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "dev": true, + "dependencies": { + "html-comment-regex": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", + "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.0-next.2", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/laravel-mix": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.13.tgz", + "integrity": "sha512-2sFmYgX24dkKlQ3OX6363YHvjONnqt9uer0TcTxcZQmaRxrh1xcK/aJjhUiVYUNOjsg8OmEFzTDp4nokOpWVkQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/runtime": "^7.12.1", + "@types/babel-core": "^6.25.6", + "@types/browser-sync": "^2.26.1", + "@types/clean-css": "^4.2.2", + "@types/cssnano": "^4.0.0", + "@types/imagemin-gifsicle": "^7.0.0", + "@types/imagemin-mozjpeg": "^8.0.0", + "@types/imagemin-optipng": "^5.2.0", + "@types/imagemin-svgo": "^8.0.0", + "autoprefixer": "^10.0.1", + "babel-loader": "^8.1.0", + "babel-merge": "^3.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "cli-table3": "^0.6.0", + "collect.js": "^4.28.4", + "commander": "^6.1.0", + "concat": "^1.0.3", + "css-loader": "^5.0.0", + "cssnano": "^4.1.10", + "dotenv": "^8.2.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^6.1.1", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "html-loader": "^1.3.2", + "imagemin": "^7.0.1", + "img-loader": "^3.0.2", + "lodash": "^4.17.20", + "md5": "^2.3.0", + "mini-css-extract-plugin": "^1.1.0", + "node-libs-browser": "^2.2.1", + "postcss-load-config": "^3.0.0", + "postcss-loader": "^4.0.4", + "semver": "^5.7.1", + "style-loader": "^2.0.0", + "terser": "^5.3.7", + "terser-webpack-plugin": "^5.0.0", + "webpack": "^5.1.3", + "webpack-cli": "^4.1.0", + "webpack-dev-server": "^4.0.0-beta.0", + "webpack-merge": "^5.2.0", + "webpack-notifier": "^1.8.0", + "webpackbar": "^5.0.0-3", + "yargs": "^16.1.0" + }, + "bin": { + "laravel-mix": "bin/cli.js", + "mix": "bin/cli.js" + }, + "engines": { + "node": ">=12.14.0" + }, + "peerDependencies": { + "postcss": "^8.1.2" + } + }, + "node_modules/laravel-mix-artisan-publish": { + "version": "1.0.0", + "resolved": "git+ssh://git@github.com/mzur/laravel-mix-artisan-publish.git#feafb9ba2359d41fddb025bccb4380e9b044783f", + "dev": true, + "license": "MIT", + "dependencies": { + "node-cmd": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "laravel-mix": "^4.0||^5.0||^6.0" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "dependencies": { + "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/martinez-polygon-clipping": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.7.0.tgz", + "integrity": "sha512-EBxKjlUqrVjzT1HRwJARaSwj66JZqEUl+JnqnrzHZLU4hd4XrCQWqShZx40264NR/pm5wIHRlNEaIrev44wvKA==", + "dependencies": { + "robust-predicates": "^2.0.4", + "splaytree": "^0.1.4", + "tinyqueue": "^1.2.0" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mem": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.0.tgz", + "integrity": "sha512-FIkgXo0kTi3XpvaznV5Muk6Y6w8SkdmRXcY7ZLonQesuYezp59UooLxAVBcGuN6PH2tXN84mR3vyzSc6oSMUfA==", + "dev": true, + "dependencies": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/mem?sponsor=1" + } + }, + "node_modules/mem/node_modules/mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/memfs": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.0.tgz", + "integrity": "sha512-f/xxz2TpdKv6uDn6GtHee8ivFyxwxmPuXatBb1FBwxYNuVpbM3k/Y1Z+vC0mH/dIXXrukYfe3qe5J32Dfjg93A==", + "dev": true, + "dependencies": { + "fs-monkey": "1.0.1" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "dev": true, + "dependencies": { + "mime-db": "1.46.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.4.0.tgz", + "integrity": "sha512-DyQr5DhXXARKZoc4kwvCvD95kh69dUupfuKOmBUqZ4kBTmRaRZcU32lYu3cLd6nEGXhQ1l7LzZ3F/CjItaY6VQ==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.4.0 || ^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "node_modules/nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, + "node_modules/nanoid": { + "version": "3.1.22", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz", + "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-cmd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/node-cmd/-/node-cmd-3.0.0.tgz", + "integrity": "sha1-OP/3CkqqT2WdID61eGJzcBjiT28=", + "dev": true + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-notifier": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", + "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", + "dev": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node_modules/node-notifier/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-notifier/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-notifier/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/node-notifier/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-notifier/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.omit": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz", + "integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==", + "dev": true, + "dependencies": { + "is-extendable": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "dependencies": { + "url-parse": "^1.4.3" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "dev": true, + "dependencies": { + "p-timeout": "^3.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.5.0.tgz", + "integrity": "sha512-5Hwh4aVQSu6BEP+w2zKlVXtFAaYQe1qWuVADSgoeVlLjwe/Q/AMSoRR4MDeaAfu8llT+YNbEijWu/YF3m6avkg==", + "dev": true, + "dependencies": { + "@types/retry": "^0.12.0", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pbf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz", + "integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==", + "dependencies": { + "ieee754": "^1.1.6", + "resolve-protobuf-schema": "^2.0.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pixelworks": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pixelworks/-/pixelworks-1.1.0.tgz", + "integrity": "sha1-Hwla1I3Ki/ihyCWOAJIDGkTyLKU=" + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/polygon-clipping": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.2.tgz", + "integrity": "sha512-qsUFQSY4nA++1/b76dy0BJGwL0FZAk05Y4hZprctLIhAddE8KUUr3TxIF4sAxIQtjH9xvaBe3raaRQrcSI4wlA==", + "dependencies": { + "splaytree": "^3.1.0" + } + }, + "node_modules/polygon-clipping/node_modules/splaytree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.0.tgz", + "integrity": "sha512-gvUGR7xnOy0fLKTCxDeUZYgU/I1Tdf8M/lM1Qrf8L2TIOR5ipZjGk02uYcdv0o2x7WjVRgpm3iS2clLyuVAt0Q==" + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.9.tgz", + "integrity": "sha512-b+TmuIL4jGtCHtoLi+G/PisuIl9avxs8IZMSmlABRwNz5RLUUACrC+ws81dcomz1nRezm5YPdXiMEzBEKgYn+Q==", + "dev": true, + "dependencies": { + "colorette": "^1.2.2", + "nanoid": "^3.1.22", + "source-map": "^0.6.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/postcss-calc/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-calc/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-calc/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-calc/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-calc/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-calc/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-calc/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-calc/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-calc/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-colormin/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-colormin/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-colormin/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-colormin/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-colormin/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-colormin/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-colormin/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-colormin/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-colormin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-colormin/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-convert-values/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-convert-values/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-convert-values/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-convert-values/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-convert-values/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-convert-values/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-convert-values/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-convert-values/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-convert-values/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-comments/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-comments/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-comments/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-comments/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-discard-comments/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-discard-comments/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-comments/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-discard-comments/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-discard-comments/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-duplicates/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-duplicates/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-duplicates/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-duplicates/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-discard-duplicates/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-discard-duplicates/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-duplicates/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-discard-duplicates/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-discard-duplicates/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-empty/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-empty/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-empty/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-empty/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-discard-empty/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-discard-empty/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-empty/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-discard-empty/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-discard-empty/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-overridden/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-overridden/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-overridden/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-overridden/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-discard-overridden/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-discard-overridden/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-discard-overridden/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-discard-overridden/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-discard-overridden/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-load-config": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.1.tgz", + "integrity": "sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "import-cwd": "^3.0.0" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-load-config/node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-load-config/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss-loader": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.2.0.tgz", + "integrity": "sha512-mqgScxHqbiz1yxbnNcPdKYo/6aVt+XExURmEbQlviFVWogDbM4AJ0A/B+ZBpYsJrTRxKw7HyRazg9x0Q9SWwLA==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "dependencies": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-longhand/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-merge-longhand/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-merge-longhand/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-merge-longhand/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-merge-longhand/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-merge-longhand/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-merge-longhand/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-merge-longhand/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-merge-longhand/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-rules/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-merge-rules/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-merge-rules/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-merge-rules/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-merge-rules/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-merge-rules/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-merge-rules/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-merge-rules/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-merge-rules/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-font-values/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-font-values/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-font-values/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-font-values/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-minify-font-values/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-minify-font-values/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-font-values/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-minify-font-values/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-minify-font-values/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-gradients/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-gradients/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-gradients/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-gradients/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-minify-gradients/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-minify-gradients/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-gradients/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-minify-gradients/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-minify-gradients/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-params/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-params/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-params/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-params/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-minify-params/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-minify-params/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-params/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-minify-params/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-minify-params/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-selectors/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-selectors/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-selectors/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-selectors/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-minify-selectors/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-minify-selectors/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-minify-selectors/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-minify-selectors/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-charset/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-charset/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-charset/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-charset/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-normalize-charset/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-normalize-charset/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-charset/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-charset/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-charset/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-normalize-display-values/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-display-values/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-positions/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-positions/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-positions/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-positions/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-normalize-positions/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-normalize-positions/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-positions/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-positions/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-positions/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-normalize-repeat-style/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-repeat-style/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "dependencies": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-string/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-string/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-string/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-string/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-normalize-string/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-normalize-string/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-string/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-string/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-string/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-normalize-timing-functions/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-timing-functions/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-normalize-unicode/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-unicode/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "dependencies": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-url/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-url/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-url/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-url/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-normalize-url/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-normalize-url/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-url/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-url/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-url/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-normalize-whitespace/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-whitespace/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-ordered-values/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-ordered-values/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-ordered-values/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-ordered-values/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-ordered-values/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-ordered-values/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-ordered-values/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-ordered-values/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-ordered-values/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-initial/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-reduce-initial/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-reduce-initial/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-reduce-initial/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-reduce-initial/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-reduce-initial/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-reduce-initial/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-reduce-initial/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-reduce-initial/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-reduce-transforms/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-reduce-transforms/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", + "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "dev": true, + "dependencies": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-svgo/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-svgo/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-svgo/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-svgo/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-svgo/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-svgo/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-unique-selectors/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-unique-selectors/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-unique-selectors/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-unique-selectors/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/postcss-unique-selectors/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/postcss-unique-selectors/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-unique-selectors/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-unique-selectors/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-unique-selectors/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "node_modules/postcss/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "dev": true, + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/protocol-buffers-schema": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.5.1.tgz", + "integrity": "sha512-YVCvdhxWNDP8/nJDyXLuM+UFsuPk4+1PB7WGPVDzm3HTHbzFLxQYeW2iZpS4mmnXrQJGBzt230t/BbEb7PrQaw==" + }, + "node_modules/proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "dependencies": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true, + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quickselect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", + "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rbush": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", + "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", + "dependencies": { + "quickselect": "^1.0.1" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", + "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/resolve-url-loader": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", + "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "3.0.0", + "camelcase": "5.3.1", + "compose-function": "3.0.3", + "convert-source-map": "1.7.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.21", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/resolve-url-loader/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/resolve-url-loader/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/resolve-url-loader/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/resolve-url-loader/node_modules/emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve-url-loader/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-url-loader/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "dev": true, + "dependencies": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + } + }, + "node_modules/rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", + "dev": true + }, + "node_modules/rework/node_modules/convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "dev": true + }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/robust-predicates": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz", + "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==" + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.32.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.8.tgz", + "integrity": "sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==", + "dev": true, + "dependencies": { + "chokidar": ">=2.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/sass-loader": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", + "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0", + "sass": "^1.3.0", + "webpack": "^4.36.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/sass-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/sass-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/sass-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/sass-loader/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "node_modules/selfsigned": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "dev": true, + "dependencies": { + "node-forge": "^0.10.0" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs-client": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", + "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.6", + "eventsource": "^1.0.7", + "faye-websocket": "^0.11.3", + "inherits": "^2.0.4", + "json3": "^3.3.3", + "url-parse": "^1.5.1" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/splaytree": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-0.1.4.tgz", + "integrity": "sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ==" + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/std-env": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz", + "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==", + "dev": true, + "dependencies": { + "ci-info": "^3.0.0" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/stylehacks/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stylehacks/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stylehacks/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stylehacks/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/stylehacks/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/stylehacks/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/stylehacks/node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylehacks/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylehacks/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/svgo/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/svgo/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.9.tgz", + "integrity": "sha512-F3cLs9a3hL1Z7N4+EkSscsel3z55XT950AvB05bwayrNg5T1/gykXtigioTAjbltvbMSJvvhFCbnf6mX+ntnJQ==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.0.2.tgz", + "integrity": "sha512-V0HGxJd0PiDF0ecHYIesTOqfd1gJguwQUOYfMfAWnRsWQEXfc5ifbUFhD3Wjc+O+y7VAqL+g07prq9gHQ/JOZQ==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", + "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", + "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", + "dev": true, + "dependencies": { + "jest-worker": "^26.6.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", + "source-map": "^0.6.1", + "terser": "^5.5.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "node_modules/tinyqueue": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-1.2.3.tgz", + "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA==" + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-regex/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "node_modules/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "node_modules/vue-eslint-parser": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz", + "integrity": "sha512-QXxqH8ZevBrtiZMZK0LpwaMfevQi9UL7lY6Kcp+ogWHC88AuwUPwwCIzkOUc1LR4XsYAt/F9yHXAB/QoD17QXA==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "eslint-scope": "^5.0.0", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.4.0", + "lodash": "^4.17.15" + }, + "engines": { + "node": ">=8.10" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "node_modules/vue-loader": { + "version": "15.9.6", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.6.tgz", + "integrity": "sha512-j0cqiLzwbeImIC6nVIby2o/ABAWhlppyL/m5oJ67R5MloP0hj/DtFgb0Zmq3J9CG7AJ+AXIvHVnJAPBvrLyuDg==", + "dev": true, + "dependencies": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "peerDependencies": { + "css-loader": "*", + "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/vue-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/vue-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "dependencies": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "node_modules/vue-style-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/vue-style-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/vue-template-compiler": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz", + "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "node_modules/vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "node_modules/watchpack": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", + "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/webpack": { + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.28.0.tgz", + "integrity": "sha512-1xllYVmA4dIvRjHzwELgW4KjIU1fW4PEuEnjsylz7k7H5HgPOctIq7W1jrt3sKH9yG5d72//XWzsHhfoWvsQVg==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.46", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "acorn": "^8.0.4", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.7.0", + "es-module-lexer": "^0.4.0", + "eslint-scope": "^5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.1", + "watchpack": "^2.0.0", + "webpack-sources": "^2.1.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz", + "integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.0.2", + "@webpack-cli/info": "^1.2.3", + "@webpack-cli/serve": "^1.3.1", + "colorette": "^1.2.1", + "commander": "^7.0.0", + "enquirer": "^2.3.6", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.1.0.tgz", + "integrity": "sha512-mpa/FY+DiBu5+r5JUIyTCYWRfkWgyA3/OOE9lwfzV9S70A4vJYLsVRKj5rMFEsezBroy2FmPyQ8oBRVW8QmK1A==", + "dev": true, + "dependencies": { + "colorette": "^1.2.1", + "mem": "^8.0.0", + "memfs": "^3.2.0", + "mime-types": "^2.1.28", + "range-parser": "^1.2.1", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.0.0-beta.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.0.0-beta.1.tgz", + "integrity": "sha512-rPSAfz1VKQDQ2kmRbOamc0mX+T7kfqi9acvHic1YYctHWfKKvtovwLm9sA48GdLiYb8Ynop79zdT3CUoFiT7YQ==", + "dev": true, + "dependencies": { + "ansi-html": "^0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^3.5.1", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "del": "^6.0.0", + "express": "^4.17.1", + "find-cache-dir": "^3.3.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.1.1", + "http-proxy-middleware": "^1.0.6", + "internal-ip": "^6.2.0", + "ipaddr.js": "^1.9.1", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "open": "^7.4.2", + "p-retry": "^4.4.0", + "portfinder": "^1.0.28", + "schema-utils": "^3.0.0", + "selfsigned": "^1.10.8", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^6.0.0", + "url": "^0.11.0", + "util": "^0.12.3", + "webpack-dev-middleware": "^4.1.0", + "ws": "^7.4.4" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-dev-server/node_modules/util": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", + "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/webpack-merge": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", + "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-notifier": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.13.0.tgz", + "integrity": "sha512-QLk6l/TZKGhyN6Hd1zobaiYno7S9YPX3wH86+YOSufHes77SegGhnGdj+4vrLDFK5A4ZKoQD5GRXXFnM0h0N8A==", + "dev": true, + "dependencies": { + "node-notifier": "^9.0.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/acorn": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz", + "integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack/node_modules/webpack-sources": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", + "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", + "dev": true, + "dependencies": { + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpackbar": { + "version": "5.0.0-3", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", + "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.1.0", + "consola": "^2.15.0", + "figures": "^3.2.0", + "pretty-time": "^1.1.0", + "std-env": "^2.2.1", + "text-table": "^0.2.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", + "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.0", + "es-abstract": "^1.18.0-next.1", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/ws": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", + "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/compat-data": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", + "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==", + "dev": true + }, + "@babel/core": { + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.14.tgz", + "integrity": "sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-compilation-targets": "^7.13.13", + "@babel/helper-module-transforms": "^7.13.14", + "@babel/helpers": "^7.13.10", + "@babel/parser": "^7.13.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.13", + "@babel/types": "^7.13.14", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", + "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", + "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", + "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", + "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.12", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.13.11", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz", + "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", + "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", + "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", + "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", + "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", + "dev": true, + "requires": { + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-transforms": { + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", + "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.13", + "@babel/types": "^7.13.14" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", + "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-wrap-function": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", + "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/helpers": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", + "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", + "dev": true, + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", + "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "dev": true + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", + "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-proposal-optional-chaining": "^7.13.12" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", + "integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", + "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", + "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", + "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", + "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", + "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", + "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", + "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", + "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.8", + "@babel/helper-compilation-targets": "^7.13.8", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.13.0" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", + "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", + "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", + "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", + "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", + "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", + "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-remap-async-to-generator": "^7.13.0" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", + "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz", + "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", + "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-split-export-declaration": "^7.12.13", + "globals": "^11.1.0" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", + "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", + "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", + "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", + "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", + "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", + "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", + "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", + "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", + "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", + "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", + "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-simple-access": "^7.12.13", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.13.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", + "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.13.0", + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-identifier": "^7.12.11", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", + "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", + "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", + "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", + "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-replace-supers": "^7.12.13" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", + "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", + "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz", + "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", + "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.10.tgz", + "integrity": "sha512-Y5k8ipgfvz5d/76tx7JYbKQTcgFSU6VgJ3kKQv4zGTKr+a9T/KBvfRvGtSFgKDQGt/DBykQixV0vNWKIdzWErA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "babel-plugin-polyfill-corejs2": "^0.1.4", + "babel-plugin-polyfill-corejs3": "^0.1.3", + "babel-plugin-polyfill-regenerator": "^0.1.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", + "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", + "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", + "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", + "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", + "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", + "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", + "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.12.13", + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/preset-env": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.12.tgz", + "integrity": "sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.12", + "@babel/helper-compilation-targets": "^7.13.10", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-validator-option": "^7.12.17", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-async-generator-functions": "^7.13.8", + "@babel/plugin-proposal-class-properties": "^7.13.0", + "@babel/plugin-proposal-dynamic-import": "^7.13.8", + "@babel/plugin-proposal-export-namespace-from": "^7.12.13", + "@babel/plugin-proposal-json-strings": "^7.13.8", + "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", + "@babel/plugin-proposal-numeric-separator": "^7.12.13", + "@babel/plugin-proposal-object-rest-spread": "^7.13.8", + "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", + "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.12.13", + "@babel/plugin-transform-arrow-functions": "^7.13.0", + "@babel/plugin-transform-async-to-generator": "^7.13.0", + "@babel/plugin-transform-block-scoped-functions": "^7.12.13", + "@babel/plugin-transform-block-scoping": "^7.12.13", + "@babel/plugin-transform-classes": "^7.13.0", + "@babel/plugin-transform-computed-properties": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.0", + "@babel/plugin-transform-dotall-regex": "^7.12.13", + "@babel/plugin-transform-duplicate-keys": "^7.12.13", + "@babel/plugin-transform-exponentiation-operator": "^7.12.13", + "@babel/plugin-transform-for-of": "^7.13.0", + "@babel/plugin-transform-function-name": "^7.12.13", + "@babel/plugin-transform-literals": "^7.12.13", + "@babel/plugin-transform-member-expression-literals": "^7.12.13", + "@babel/plugin-transform-modules-amd": "^7.13.0", + "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/plugin-transform-modules-systemjs": "^7.13.8", + "@babel/plugin-transform-modules-umd": "^7.13.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", + "@babel/plugin-transform-new-target": "^7.12.13", + "@babel/plugin-transform-object-super": "^7.12.13", + "@babel/plugin-transform-parameters": "^7.13.0", + "@babel/plugin-transform-property-literals": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.12.13", + "@babel/plugin-transform-reserved-words": "^7.12.13", + "@babel/plugin-transform-shorthand-properties": "^7.12.13", + "@babel/plugin-transform-spread": "^7.13.0", + "@babel/plugin-transform-sticky-regex": "^7.12.13", + "@babel/plugin-transform-template-literals": "^7.13.0", + "@babel/plugin-transform-typeof-symbol": "^7.12.13", + "@babel/plugin-transform-unicode-escapes": "^7.12.13", + "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.13.12", + "babel-plugin-polyfill-corejs2": "^0.1.4", + "babel-plugin-polyfill-corejs3": "^0.1.3", + "babel-plugin-polyfill-regenerator": "^0.1.2", + "core-js-compat": "^3.9.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", + "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + } + } + }, + "@babel/traverse": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", + "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.13", + "@babel/types": "^7.13.13", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", + "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "@biigle/ol": { + "version": "5.3.0", + "resolved": "https://npm.pkg.github.com/download/@biigle/ol/5.3.0/d0711bd8db11d47db8ae07a4fd210506e4003d93760aca7fb1b8f8583e3756e8", + "integrity": "sha512-CR91F5cK8QsagVSsudozkqT3rGTwsykMaV9sobAUPdI2ygxvXHRXwlEUT4eeQWq450wNcJOjDmwWa05gnuujoQ==", + "requires": { + "@turf/boolean-contains": "^6.0.1", + "@turf/boolean-overlap": "^6.0.1", + "@turf/difference": "6.0.1", + "@turf/helpers": "^6.1.4", + "@turf/union": "^6.0.3", + "pbf": "3.1.0", + "pixelworks": "1.1.0", + "rbush": "2.0.2" + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", + "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", + "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@turf/area": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.3.0.tgz", + "integrity": "sha512-Y1cYyAQ2fk94npdgOeMF4msc2uabHY1m7A7ntixf1I8rkyDd6/iHh1IMy1QsM+VZXAEwDwsXhu+ZFYd3Jkeg4A==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/meta": "^6.3.0" + } + }, + "@turf/bbox": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.3.0.tgz", + "integrity": "sha512-N4ue5Xopu1qieSHP2MA/CJGWHPKaTrVXQJjzHRNcY1vtsO126xbSaJhWUrFc5x5vVkXp0dcucGryO0r5m4o/KA==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/meta": "^6.3.0" + } + }, + "@turf/bearing": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-6.3.0.tgz", + "integrity": "sha512-apuUm9xN6VQLO33m7F2mmzlm3dHfeesJjMSzh9iehGtgmp1IaVndjdcIvs0ieiwm8bN9UhwXpfPtO3pV0n9SFw==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" + } + }, + "@turf/boolean-contains": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-6.3.0.tgz", + "integrity": "sha512-1MW7B5G5tIu1lnAv3pXyFzl75wfBYnbA2GhwHDb4okIXMhloy/r5uIqAZHo0fOXykKVJS/gIfA/MioKIftoTug==", + "requires": { + "@turf/bbox": "^6.3.0", + "@turf/boolean-point-in-polygon": "^6.3.0", + "@turf/boolean-point-on-line": "^6.3.0", + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" + } + }, + "@turf/boolean-overlap": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-6.3.0.tgz", + "integrity": "sha512-rWh8JKTqlJ1m27FY8YeWcGoXutLyCVfSi2/8AOkXi2F+36P9GM4tHz19yKY3btbnHJTgSZf1xO2YhX2d0BmNqg==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "@turf/line-intersect": "^6.3.0", + "@turf/line-overlap": "^6.3.0", + "@turf/meta": "^6.3.0", + "geojson-equality": "0.1.6" + } + }, + "@turf/boolean-point-in-polygon": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.3.0.tgz", + "integrity": "sha512-NqFSsoE6OwhDK19IllDQRhEQEkF7UVEOlqH9vgS1fGg4T6NcyKvACJs05c9457tL7QSbV9ZS53f2qiLneFL+qg==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" + } + }, + "@turf/boolean-point-on-line": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-6.3.0.tgz", + "integrity": "sha512-eScH8sfKJVjfbEX5Hgkt1nA7A8DUoiYD1riUVqTp2xikujrMfnYRjFpL/UAo01v33cPKZlhCXp7NE86bdOSrYg==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" + } + }, + "@turf/destination": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-6.3.0.tgz", + "integrity": "sha512-aLt3U/XkJWyZW08Ln1qZwBNAGh27yhmYLu892+dBj3gKP6UUiR6ZopXxrBwjBVe00A6k2ktftKDn79qe0hptuw==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" + } + }, + "@turf/difference": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@turf/difference/-/difference-6.0.1.tgz", + "integrity": "sha512-lkhJjNfPeLARQm232A851vVhrUvX3gdvTft5QlqkUlr7AzLpiT8PW14yEkU9xABxRh6PGv7T1UUVAeRgC7JxuA==", + "requires": { + "@turf/area": "6.x", + "@turf/helpers": "6.x", + "@turf/invariant": "6.x", + "@turf/meta": "6.x", + "martinez-polygon-clipping": "*" + } + }, + "@turf/distance": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-6.3.0.tgz", + "integrity": "sha512-basi24ssNFnH3iXPFjp/aNUrukjObiFWoIyDRqKyBJxVwVOwAWvfk4d38QQyBj5nDo5IahYRq/Q+T47/5hSs9w==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" + } + }, + "@turf/helpers": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.3.0.tgz", + "integrity": "sha512-kr6KuD4Z0GZ30tblTEvi90rvvVNlKieXuMC8CTzE/rVQb0/f/Cb29zCXxTD7giQTEQY/P2nRW23wEqqyNHulCg==" + }, + "@turf/invariant": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.3.0.tgz", + "integrity": "sha512-2OFOi9p+QOrcIMySEnr+WlOiKaFZ1bY56jA98YyECewJHfhPFWUBZEhc4nWGRT0ahK08Vus9+gcuBX8QIpCIIw==", + "requires": { + "@turf/helpers": "^6.3.0" + } + }, + "@turf/line-intersect": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.3.0.tgz", + "integrity": "sha512-3naxR7XpkPd2vst3Mw6DFry4C9m3o0/f2n/xu5UAyxb88Ie4m2k+1eqkhzMMx/0L+E6iThWpLx7DASM6q6o9ow==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "@turf/line-segment": "^6.3.0", + "@turf/meta": "^6.3.0", + "geojson-rbush": "3.x" + } + }, + "@turf/line-overlap": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-6.3.0.tgz", + "integrity": "sha512-fVyXfTpr/A+ZXZWG6PbuYz5rAGbTQWyrMZveCl2049SbOXSkVXGjUfpnLaklP0p+adw7eRR0LhZn6FGz9CQaFg==", + "requires": { + "@turf/boolean-point-on-line": "^6.3.0", + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "@turf/line-segment": "^6.3.0", + "@turf/meta": "^6.3.0", + "@turf/nearest-point-on-line": "^6.3.0", + "deep-equal": "1.x", + "geojson-rbush": "3.x" + } + }, + "@turf/line-segment": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.3.0.tgz", + "integrity": "sha512-M+aDy83V+E7jYWNaf+b+A88yhnMrJhyg/lhAj6mU6UeB2PbruXB2qgSmmVDSE2dIknOvZZuIWNzEzUI07RO2kw==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "@turf/meta": "^6.3.0" + } + }, + "@turf/meta": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.3.0.tgz", + "integrity": "sha512-qBJjaAJS9H3ap0HlGXyF/Bzfl0qkA9suafX/jnDsZvWMfVLt+s+o6twKrXOGk5t7nnNON2NFRC8+czxpu104EQ==", + "requires": { + "@turf/helpers": "^6.3.0" + } + }, + "@turf/nearest-point-on-line": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.3.0.tgz", + "integrity": "sha512-b4C9Md1VbGn9chMgdSj2grJD4w4t0owEWOKEBwOZfdhrcksyOedVvKB7XqOFdj/8Jitel40EKAC5LQTNu24kEQ==", + "requires": { + "@turf/bearing": "^6.3.0", + "@turf/destination": "^6.3.0", + "@turf/distance": "^6.3.0", + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "@turf/line-intersect": "^6.3.0", + "@turf/meta": "^6.3.0" + } + }, + "@turf/union": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/union/-/union-6.3.0.tgz", + "integrity": "sha512-m8yh13Q5E0Y+YC10+iI/Qq0Txt7UmSIFByc7DfNVlMMGTceqLFa8xGwSVdFuB/d6MWwKuzKonQMl1PUx/Vd2Iw==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "polygon-clipping": "^0.15.2" + } + }, + "@types/babel-core": { + "version": "6.25.6", + "resolved": "https://registry.npmjs.org/@types/babel-core/-/babel-core-6.25.6.tgz", + "integrity": "sha512-OzYuLL6Lw0wpE8qXFIuyS0GsagzCr3beo/+AIttM7slM9cUhbgHjU3oWvgVE+uOhcZYS4NesBilF2iZj3gM4LQ==", + "dev": true, + "requires": { + "@types/babel-generator": "*", + "@types/babel-template": "*", + "@types/babel-traverse": "*", + "@types/babel-types": "*", + "@types/babylon": "*" + } + }, + "@types/babel-generator": { + "version": "6.25.3", + "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.3.tgz", + "integrity": "sha512-pGgnuxVddKcYIc+VJkRDop7gxLhqclNKBdlsm/5Vp8d+37pQkkDK7fef8d9YYImRzw9xcojEPc18pUYnbxmjqA==", + "dev": true, + "requires": { + "@types/babel-types": "*" + } + }, + "@types/babel-template": { + "version": "6.25.2", + "resolved": "https://registry.npmjs.org/@types/babel-template/-/babel-template-6.25.2.tgz", + "integrity": "sha512-QKtDQRJmAz3Y1HSxfMl0syIHebMc/NnOeH/8qeD0zjgU2juD0uyC922biMxCy5xjTNvHinigML2l8kxE8eEBmw==", + "dev": true, + "requires": { + "@types/babel-types": "*", + "@types/babylon": "*" + } + }, + "@types/babel-traverse": { + "version": "6.25.5", + "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.5.tgz", + "integrity": "sha512-WrMbwmu+MWf8FiUMbmVOGkc7bHPzndUafn1CivMaBHthBBoo0VNIcYk1KV71UovYguhsNOwf3UF5oRmkkGOU3w==", + "dev": true, + "requires": { + "@types/babel-types": "*" + } + }, + "@types/babel-types": { + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.9.tgz", + "integrity": "sha512-qZLoYeXSTgQuK1h7QQS16hqLGdmqtRmN8w/rl3Au/l5x/zkHx+a4VHrHyBsi1I1vtK2oBHxSzKIu0R5p6spdOA==", + "dev": true + }, + "@types/babylon": { + "version": "6.16.5", + "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz", + "integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==", + "dev": true, + "requires": { + "@types/babel-types": "*" + } + }, + "@types/browser-sync": { + "version": "2.26.1", + "resolved": "https://registry.npmjs.org/@types/browser-sync/-/browser-sync-2.26.1.tgz", + "integrity": "sha512-zuz0uF2QccSVbG4ubkjVDlQYpeBX/JXvmlqFFmp04FYOXunXZtx0y+UdWJxu7uryMMGkQykujUMm/ju85kqI7Q==", + "dev": true, + "requires": { + "@types/micromatch": "^2", + "@types/node": "*", + "@types/serve-static": "*", + "chokidar": "^2.1.2" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "@types/clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-ET0ldU/vpXecy5vO8JRIhtJWSrk1vzXdJcp3Bjf8bARZynl6vfkhEKY/A7njfNIRlmyTGuVFuqnD6I3tOGdXpQ==", + "dev": true, + "requires": { + "@types/node": "*", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "@types/cssnano": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/cssnano/-/cssnano-4.0.0.tgz", + "integrity": "sha512-BC/2ibKZfPIaBLBNzkitdW1IvvX/LKW6/QXGc4Su/tAJ7mQ3f2CKBuGCCKaqGAnoKwzfuC7G/recpkARwdOwuA==", + "dev": true, + "requires": { + "postcss": "5 - 7" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@types/eslint": { + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.8.tgz", + "integrity": "sha512-RTKvBsfz0T8CKOGZMfuluDNyMFHnu5lvNr4hWEsQeHXH6FcmIDIozOyWMh36nLGMwVd5UFNXC2xztA8lln22MQ==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.46", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz", + "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==", + "dev": true + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/http-proxy": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.5.tgz", + "integrity": "sha512-GNkDE7bTv6Sf8JbV2GksknKOsk7OznNYHSdrtvPJXO0qJ9odZig6IZKUi5RFGi6d1bf6dgIAe4uXi3DBc7069Q==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/imagemin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-7.0.0.tgz", + "integrity": "sha512-BiNd5FazD5ZmJUYD9txsbrttL0P0welrb9yAPn6ykKK3kWufwFsxYqw5KdggfZQDjiNYwsBrX+Fwei0Xsw4oAw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/imagemin-gifsicle": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz", + "integrity": "sha512-RVFQZhPm/6vLC8wDvzHa34ZDrJECqmDV4XBS99AEk2ObyV4pcLQwObGYlmBv6fi9AtRLHf8mnKGczIHtF77u7w==", + "dev": true, + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-mozjpeg": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz", + "integrity": "sha512-sR2nEZOrlbgnmVgG+lXetZOvhgtctLe1hBfvySnPnxDd2pOon9mMPq7SHFI89VZT1AXvFgRs8w6X8ik8potpgA==", + "dev": true, + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-optipng": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.0.tgz", + "integrity": "sha512-Qn4gTV1fpPG2WIsUIl10yi2prudOuDIx+D+O0H3aKZRcTCwpMjszBVeRWUqkhG5wADhWO4giLut1sFNr3H2XIQ==", + "dev": true, + "requires": { + "@types/imagemin": "*" + } + }, + "@types/imagemin-svgo": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-8.0.1.tgz", + "integrity": "sha512-YafkdrVAcr38U0Ln1C+L1n4SIZqC47VBHTyxCq7gTUSd1R9MdIvMcrljWlgU1M9O68WZDeQWUrKipKYfEOCOvQ==", + "dev": true, + "requires": { + "@types/imagemin": "*", + "@types/svgo": "^1" + } + }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, + "@types/micromatch": { + "version": "2.3.30", + "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-2.3.30.tgz", + "integrity": "sha512-6rW4NsUHaDudxJSuRlm1PdNu61CDXkgix7LBOBg7b3yWQ43XANYSPwkvX1cGiZvBVZW8c5rsCEfrfzbPkch8ag==", + "dev": true, + "requires": { + "@types/parse-glob": "*" + } + }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", + "dev": true + }, + "@types/node": { + "version": "14.14.37", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", + "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==", + "dev": true + }, + "@types/parse-glob": { + "version": "3.0.29", + "resolved": "https://registry.npmjs.org/@types/parse-glob/-/parse-glob-3.0.29.tgz", + "integrity": "sha1-akDsfr0kGO5p7jl+SOQhaSaKEL8=", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/serve-static": { + "version": "1.13.9", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", + "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/svgo": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.5.tgz", + "integrity": "sha512-y9Pw8IK50OqFRDpdI9Is29KlWiENVW9FDvlTmGHelvTfR2brYFJbsClvulZfeq6YKacFrDsG9a39w0kJZdHLaw==", + "dev": true + }, + "@vue/component-compiler-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz", + "integrity": "sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.14", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@webassemblyjs/ast": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz", + "integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz", + "integrity": "sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz", + "integrity": "sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "requires": {} + }, + "adjust-sourcemap-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", + "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "dev": true + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-filter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", + "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", + "dev": true + }, + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz", + "integrity": "sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==", + "dev": true, + "requires": { + "browserslist": "^4.16.3", + "caniuse-lite": "^1.0.30001196", + "colorette": "^1.2.2", + "fraction.js": "^4.0.13", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + } + }, + "available-typed-arrays": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", + "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", + "dev": true, + "requires": { + "array-filter": "^1.0.0" + } + }, + "babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "babel-merge": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/babel-merge/-/babel-merge-3.0.0.tgz", + "integrity": "sha512-eBOBtHnzt9xvnjpYNI5HmaPp/b2vMveE5XggzqHnQeHJ8mFIBrBv6WZEVIj5jJ2uwTItkqKo9gWzEEcBxEq0yw==", + "dev": true, + "requires": { + "deepmerge": "^2.2.1", + "object.omit": "^3.0.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz", + "integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.0", + "@babel/helper-define-polyfill-provider": "^0.1.5", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", + "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.1.5", + "core-js-compat": "^3.8.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz", + "integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.1.5" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", + "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001181", + "colorette": "^1.2.1", + "electron-to-chromium": "^1.3.649", + "escalade": "^3.1.1", + "node-releases": "^1.1.70" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + } + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001205", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001205.tgz", + "integrity": "sha512-TL1GrS5V6LElbitPazidkBMD9sa448bQDDLrumDqaggmKFcuU2JW1wTOHJPukAcOMtEmLcmDJEzfRrf+GjM0Og==", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "ci-info": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", + "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + } + }, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-table3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", + "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^4.2.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "collect.js": { + "version": "4.28.6", + "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.28.6.tgz", + "integrity": "sha512-NAyuk1DnCotRaDZIS5kJ4sptgkwOeYqElird10yziN5JBuwYOGkOTguhNcPn5g344IfylZecxNYZAVXgv19p5Q==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.4" + }, + "dependencies": { + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "color-string": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true, + "optional": true + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", + "dev": true, + "requires": { + "arity-n": "^1.0.4" + } + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", + "integrity": "sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=", + "dev": true, + "requires": { + "commander": "^2.9.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js-compat": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.10.0.tgz", + "integrity": "sha512-9yVewub2MXNYyGvuLnMHcN1k9RkvB7/ofktpeKTIaASyB88YYqGzUnu0ywMMhJrDHOMiTjSHWGzR+i7Wb9Z1kQ==", + "dev": true, + "requires": { + "browserslist": "^4.16.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "dependencies": { + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + } + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-env": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", + "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.5" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "dev": true + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "css-loader": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.0.tgz", + "integrity": "sha512-MfRo2MjEeLXMlUkeUwN71Vx5oc6EJnx5UQ4Yi9iUtYQvrPtwLUucYptz0hc6n++kdNcyF5olYBS4vPjJDAcLkw==", + "dev": true, + "requires": { + "camelcase": "^6.2.0", + "cssesc": "^3.0.0", + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.8", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + }, + "dependencies": { + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + }, + "dependencies": { + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + } + } + } + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "dev": true + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "dev": true, + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "dependencies": { + "globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-node": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.5.tgz", + "integrity": "sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-serializer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", + "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "entities": "^2.0.0" + }, + "dependencies": { + "domhandler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", + "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "dev": true, + "requires": { + "domelementtype": "^2.1.0" + } + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", + "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "dev": true + }, + "domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1" + } + }, + "domutils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.0.tgz", + "integrity": "sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0" + }, + "dependencies": { + "domhandler": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", + "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "dev": true, + "requires": { + "domelementtype": "^2.1.0" + } + } + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", + "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.703", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.703.tgz", + "integrity": "sha512-SVBVhNB+4zPL+rvtWLw7PZQkw/Eqj1HQZs22xtcqW36+xoifzEOEEDEpkxSMfB6RFeSIOcG00w6z5mSqLr1Y6w==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "enhanced-resolve": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", + "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "envinfo": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz", + "integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", + "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.2", + "is-string": "^1.0.5", + "object-inspect": "^1.9.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.0" + } + }, + "es-module-lexer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", + "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", + "dev": true + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", + "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.21", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "eslint-plugin-vue": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.8.0.tgz", + "integrity": "sha512-OGrnPz+PuYL2HmVyBHxm4mRjxW2kfFCQE6Hw9G6qOHs/Pcu0srOlCCW0FMa8SLzIEqxl8WuKoBSPcMnrjUG2vw==", + "dev": true, + "requires": { + "eslint-utils": "^2.1.0", + "natural-compare": "^1.4.0", + "semver": "^7.3.2", + "vue-eslint-parser": "^7.6.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "dev": true, + "requires": { + "original": "^1.0.0" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", + "dev": true + } + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "file-type": { + "version": "12.4.2", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", + "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", + "dev": true + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "follow-redirects": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", + "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fraction.js": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz", + "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.1.tgz", + "integrity": "sha512-fcSa+wyTqZa46iWweI7/ZiUfegOZl0SG8+dltIwFXo7+zYU9J9kpS3NB6pZcSlJdhvIwp81Adx2XhZorncxiaA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "geojson-equality": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/geojson-equality/-/geojson-equality-0.1.6.tgz", + "integrity": "sha1-oXE3TvBD5dR5eZWEC65GSOB1LXI=", + "requires": { + "deep-equal": "^1.0.0" + } + }, + "geojson-rbush": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.1.2.tgz", + "integrity": "sha512-grkfdg3HIeTjwTfiJe5FT8+fGU3fABCc+vRJDBwdQz9kkLF0Sbif2gs2JUzjewwgmnvLGy9fInySDeADoNuk7w==", + "requires": { + "@turf/bbox": "*", + "@turf/helpers": "6.x", + "@turf/meta": "6.x", + "rbush": "^2.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "globals": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.7.0.tgz", + "integrity": "sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true + }, + "html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, + "html-loader": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz", + "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==", + "dev": true, + "requires": { + "html-minifier-terser": "^5.1.1", + "htmlparser2": "^4.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + } + }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dev": true, + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + } + } + }, + "htmlparser2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", + "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.1.0.tgz", + "integrity": "sha512-OnjU5vyVgcZVe2AjLJyMrk8YLNOC2lspCHirB5ldM+B/dwEfZ5bgVTrFyzE9R7xRWAP/i/FXtvIqKjTNEZBhBg==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.5", + "camelcase": "^6.2.0", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "imagemin": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", + "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", + "dev": true, + "requires": { + "file-type": "^12.0.0", + "globby": "^10.0.0", + "graceful-fs": "^4.2.2", + "junk": "^3.1.0", + "make-dir": "^3.0.0", + "p-pipe": "^3.0.0", + "replace-ext": "^1.0.0" + } + }, + "img-loader": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-3.0.2.tgz", + "integrity": "sha512-rSriLKgvi85Km7ppSF+AEAM3nU4fxpvCkaXtC/IoCEU7jfks55bEANFs0bB9YXYkxY9JurZQIZFtXh5Gue3upw==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dev": true, + "requires": { + "import-from": "^3.0.0" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "internal-ip": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", + "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", + "dev": true, + "requires": { + "default-gateway": "^6.0.0", + "ipaddr.js": "^1.9.1", + "is-ip": "^3.1.0", + "p-event": "^4.2.0" + } + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-bigint": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", + "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "dev": true + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz", + "integrity": "sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-ip": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", + "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", + "dev": true, + "requires": { + "ip-regex": "^4.0.0" + } + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", + "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-typed-array": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", + "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.0-next.2", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "dev": true + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "dev": true + }, + "laravel-mix": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.13.tgz", + "integrity": "sha512-2sFmYgX24dkKlQ3OX6363YHvjONnqt9uer0TcTxcZQmaRxrh1xcK/aJjhUiVYUNOjsg8OmEFzTDp4nokOpWVkQ==", + "dev": true, + "requires": { + "@babel/core": "^7.12.3", + "@babel/plugin-proposal-object-rest-spread": "^7.12.1", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/runtime": "^7.12.1", + "@types/babel-core": "^6.25.6", + "@types/browser-sync": "^2.26.1", + "@types/clean-css": "^4.2.2", + "@types/cssnano": "^4.0.0", + "@types/imagemin-gifsicle": "^7.0.0", + "@types/imagemin-mozjpeg": "^8.0.0", + "@types/imagemin-optipng": "^5.2.0", + "@types/imagemin-svgo": "^8.0.0", + "autoprefixer": "^10.0.1", + "babel-loader": "^8.1.0", + "babel-merge": "^3.0.0", + "chalk": "^4.1.0", + "chokidar": "^3.4.3", + "clean-css": "^4.2.3", + "cli-table3": "^0.6.0", + "collect.js": "^4.28.4", + "commander": "^6.1.0", + "concat": "^1.0.3", + "css-loader": "^5.0.0", + "cssnano": "^4.1.10", + "dotenv": "^8.2.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^6.1.1", + "fs-extra": "^9.0.1", + "glob": "^7.1.6", + "html-loader": "^1.3.2", + "imagemin": "^7.0.1", + "img-loader": "^3.0.2", + "lodash": "^4.17.20", + "md5": "^2.3.0", + "mini-css-extract-plugin": "^1.1.0", + "node-libs-browser": "^2.2.1", + "postcss-load-config": "^3.0.0", + "postcss-loader": "^4.0.4", + "semver": "^5.7.1", + "style-loader": "^2.0.0", + "terser": "^5.3.7", + "terser-webpack-plugin": "^5.0.0", + "webpack": "^5.1.3", + "webpack-cli": "^4.1.0", + "webpack-dev-server": "^4.0.0-beta.0", + "webpack-merge": "^5.2.0", + "webpack-notifier": "^1.8.0", + "webpackbar": "^5.0.0-3", + "yargs": "^16.1.0" + } + }, + "laravel-mix-artisan-publish": { + "version": "git+ssh://git@github.com/mzur/laravel-mix-artisan-publish.git#feafb9ba2359d41fddb025bccb4380e9b044783f", + "dev": true, + "from": "laravel-mix-artisan-publish@git://github.com/mzur/laravel-mix-artisan-publish.git", + "requires": { + "node-cmd": "^3.0.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "martinez-polygon-clipping": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.7.0.tgz", + "integrity": "sha512-EBxKjlUqrVjzT1HRwJARaSwj66JZqEUl+JnqnrzHZLU4hd4XrCQWqShZx40264NR/pm5wIHRlNEaIrev44wvKA==", + "requires": { + "robust-predicates": "^2.0.4", + "splaytree": "^0.1.4", + "tinyqueue": "^1.2.0" + } + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.0.tgz", + "integrity": "sha512-FIkgXo0kTi3XpvaznV5Muk6Y6w8SkdmRXcY7ZLonQesuYezp59UooLxAVBcGuN6PH2tXN84mR3vyzSc6oSMUfA==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^3.1.0" + }, + "dependencies": { + "mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "dev": true + } + } + }, + "memfs": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.0.tgz", + "integrity": "sha512-f/xxz2TpdKv6uDn6GtHee8ivFyxwxmPuXatBb1FBwxYNuVpbM3k/Y1Z+vC0mH/dIXXrukYfe3qe5J32Dfjg93A==", + "dev": true, + "requires": { + "fs-monkey": "1.0.1" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "dev": true, + "requires": { + "mime-db": "1.46.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.4.0.tgz", + "integrity": "sha512-DyQr5DhXXARKZoc4kwvCvD95kh69dUupfuKOmBUqZ4kBTmRaRZcU32lYu3cLd6nEGXhQ1l7LzZ3F/CjItaY6VQ==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true, + "optional": true + }, + "nanoid": { + "version": "3.1.22", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz", + "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-cmd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/node-cmd/-/node-cmd-3.0.0.tgz", + "integrity": "sha1-OP/3CkqqT2WdID61eGJzcBjiT28=", + "dev": true + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node-notifier": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", + "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + }, + "dependencies": { + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + } + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", + "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + } + }, + "object.omit": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz", + "integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==", + "dev": true, + "requires": { + "is-extendable": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", + "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "dev": true, + "requires": { + "p-timeout": "^3.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true + }, + "p-retry": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.5.0.tgz", + "integrity": "sha512-5Hwh4aVQSu6BEP+w2zKlVXtFAaYQe1qWuVADSgoeVlLjwe/Q/AMSoRR4MDeaAfu8llT+YNbEijWu/YF3m6avkg==", + "dev": true, + "requires": { + "@types/retry": "^0.12.0", + "retry": "^0.12.0" + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz", + "integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==", + "requires": { + "ieee754": "^1.1.6", + "resolve-protobuf-schema": "^2.0.0" + } + }, + "pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pixelworks": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pixelworks/-/pixelworks-1.1.0.tgz", + "integrity": "sha1-Hwla1I3Ki/ihyCWOAJIDGkTyLKU=" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "polygon-clipping": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.2.tgz", + "integrity": "sha512-qsUFQSY4nA++1/b76dy0BJGwL0FZAk05Y4hZprctLIhAddE8KUUr3TxIF4sAxIQtjH9xvaBe3raaRQrcSI4wlA==", + "requires": { + "splaytree": "^3.1.0" + }, + "dependencies": { + "splaytree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.0.tgz", + "integrity": "sha512-gvUGR7xnOy0fLKTCxDeUZYgU/I1Tdf8M/lM1Qrf8L2TIOR5ipZjGk02uYcdv0o2x7WjVRgpm3iS2clLyuVAt0Q==" + } + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "requires": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "8.2.9", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.9.tgz", + "integrity": "sha512-b+TmuIL4jGtCHtoLi+G/PisuIl9avxs8IZMSmlABRwNz5RLUUACrC+ws81dcomz1nRezm5YPdXiMEzBEKgYn+Q==", + "dev": true, + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.22", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "dev": true, "requires": { - "ms": "^2.1.1" + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "dependencies": { + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -7223,124 +24954,193 @@ } } }, - "postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", - "dev": true, - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "postcss": "^7.0.0" }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "postcss-load-config": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.1.tgz", + "integrity": "sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ==", "dev": true, "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cosmiconfig": "^7.0.0", + "import-cwd": "^3.0.0" }, "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } } } }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, - "postcss-load-config": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", - "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" - } - }, "postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.2.0.tgz", + "integrity": "sha512-mqgScxHqbiz1yxbnNcPdKYo/6aVt+XExURmEbQlviFVWogDbM4AJ0A/B+ZBpYsJrTRxKw7HyRazg9x0Q9SWwLA==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.4" }, "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "lru-cache": "^6.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, @@ -7356,11 +25156,89 @@ "stylehacks": "^4.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -7378,6 +25256,69 @@ "vendors": "^1.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-selector-parser": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", @@ -7388,6 +25329,21 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -7401,11 +25357,89 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -7421,11 +25455,89 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -7443,26 +25555,167 @@ "uniqs": "^2.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true - } - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-selector-parser": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", @@ -7473,114 +25726,130 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } - } - } - }, - "postcss-modules-extract-imports": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", - "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", - "dev": true, - "requires": { - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" } }, "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "postcss-selector-parser": "^6.0.4" } }, "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", "dev": true, "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" + "postcss": "^7.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", "dev": true, "requires": { - "chalk": "^2.4.1", + "chalk": "^2.4.2", "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "supports-color": "^6.1.0" } }, "source-map": { @@ -7588,18 +25857,18 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - } - }, "postcss-normalize-display-values": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", @@ -7611,11 +25880,89 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -7631,11 +25978,89 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -7651,11 +26076,89 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -7670,11 +26173,89 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -7689,11 +26270,89 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -7708,11 +26367,89 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -7728,11 +26465,89 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -7746,11 +26561,89 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -7765,11 +26658,89 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -7783,6 +26754,86 @@ "caniuse-api": "^3.0.0", "has": "^1.0.0", "postcss": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-reduce-transforms": { @@ -7797,11 +26848,89 @@ "postcss-value-parser": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -7829,11 +26958,89 @@ "svgo": "^1.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, @@ -7846,6 +27053,86 @@ "alphanum-sort": "^1.0.0", "postcss": "^7.0.0", "uniqs": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "postcss-value-parser": { @@ -7867,10 +27154,10 @@ "dev": true, "optional": true }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", "dev": true }, "process": { @@ -7891,16 +27178,10 @@ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, "protocol-buffers-schema": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.4.0.tgz", - "integrity": "sha512-G/2kcamPF2S49W5yaMGdIpkG6+5wZF0fzBteLKgEHjbNzqjZQ85aAs1iJGto31EJaSTkNvHs5IXuHSaTLWBAiA==" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.5.1.tgz", + "integrity": "sha512-YVCvdhxWNDP8/nJDyXLuM+UFsuPk4+1PB7WGPVDzm3HTHbzFLxQYeW2iZpS4mmnXrQJGBzt230t/BbEb7PrQaw==" }, "proxy-addr": { "version": "2.0.6", @@ -7912,12 +27193,6 @@ "ipaddr.js": "1.9.1" } }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -7939,50 +27214,17 @@ }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true } } }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, "q": { @@ -8015,6 +27257,12 @@ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "quickselect": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", @@ -8086,29 +27334,35 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" + }, + "dependencies": { + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "picomatch": "^2.2.1" } }, - "recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "rechoir": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", + "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", "dev": true, "requires": { - "ast-types": "0.9.6", - "esprima": "~3.1.0", - "private": "~0.1.5", - "source-map": "~0.5.0" + "resolve": "^1.9.0" } }, "regenerate": { @@ -8149,6 +27403,18 @@ "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } } }, "regex-parser": { @@ -8158,12 +27424,12 @@ "dev": true }, "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "regexpp": { @@ -8193,9 +27459,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", - "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -8245,10 +27511,10 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, "requires-port": { @@ -8257,42 +27523,37 @@ "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" + "resolve-from": "^5.0.0" }, "dependencies": { - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true } } }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, "resolve-protobuf-schema": { @@ -8327,12 +27588,70 @@ "source-map": "0.6.1" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", "dev": true }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, "json5": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", @@ -8393,6 +27712,12 @@ "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rework": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", @@ -8430,9 +27755,9 @@ "dev": true }, "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" @@ -8453,13 +27778,13 @@ "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz", "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==" }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { - "aproba": "^1.1.1" + "queue-microtask": "^1.2.2" } }, "safe-buffer": { @@ -8484,9 +27809,9 @@ "dev": true }, "sass": { - "version": "1.26.9", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.26.9.tgz", - "integrity": "sha512-t8AkRVi+xvba4yZiLWkJdgJHBFCB3Dh4johniQkPy9ywkgFHNasXFEFP+RG/F6LhQ+aoE4aX+IorIWQjS0esVw==", + "version": "1.32.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.8.tgz", + "integrity": "sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==", "dev": true, "requires": { "chokidar": ">=2.0.0 <4.0.0" @@ -8505,6 +27830,37 @@ "semver": "^6.3.0" }, "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -8520,14 +27876,14 @@ "dev": true }, "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } }, "select-hose": { @@ -8598,9 +27954,9 @@ } }, "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -8674,12 +28030,6 @@ "send": "0.17.1" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", @@ -8692,15 +28042,6 @@ "split-string": "^3.0.1" }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -8785,20 +28126,20 @@ } }, "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" } }, "snapdragon": { @@ -8826,30 +28167,6 @@ "ms": "2.0.0" } }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -8941,9 +28258,9 @@ } }, "sockjs-client": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.0.tgz", - "integrity": "sha512-8Dt3BDi4FYNrCFGTL/HtwVzkARrENdwOUf1ZoW/9p3M8lZdFT35jVdrHza+qgxuG9H3/shR4cuX/X9umUrjP8Q==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", + "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", "dev": true, "requires": { "debug": "^3.2.6", @@ -8951,7 +28268,7 @@ "faye-websocket": "^0.11.3", "inherits": "^2.0.4", "json3": "^3.3.3", - "url-parse": "^1.4.7" + "url-parse": "^1.5.1" }, "dependencies": { "debug": { @@ -9009,9 +28326,9 @@ } }, "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, "spdy": { @@ -9066,6 +28383,18 @@ "dev": true, "requires": { "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + } } }, "sprintf-js": { @@ -9074,28 +28403,12 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "ssri": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", - "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "minipass": "^3.1.1" - } - }, "stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, - "stackframe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.2.0.tgz", - "integrity": "sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==", - "dev": true - }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -9104,17 +28417,6 @@ "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } } }, "statuses": { @@ -9123,6 +28425,15 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, + "std-env": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz", + "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==", + "dev": true, + "requires": { + "ci-info": "^3.0.0" + } + }, "stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", @@ -9133,16 +28444,6 @@ "readable-stream": "^2.0.2" } }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, "stream-http": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", @@ -9156,108 +28457,83 @@ "xtend": "^4.0.0" } }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "safe-buffer": "~5.2.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } } } }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.0" } }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, "strip-json-comments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.0.tgz", - "integrity": "sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "style-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", - "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - } + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" } }, "stylehacks": { @@ -9271,6 +28547,69 @@ "postcss-selector-parser": "^3.0.0" }, "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, "postcss-selector-parser": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", @@ -9281,16 +28620,31 @@ "indexes-of": "^1.0.1", "uniq": "^1.0.1" } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } } } }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } }, "svgo": { @@ -9312,106 +28666,156 @@ "stable": "^0.1.8", "unquote": "~1.1.1", "util.promisify": "~1.0.0" - } - }, - "table": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", - "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "lodash": "^4.17.14", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "color-name": "1.1.3" } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "table": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/table/-/table-6.0.9.tgz", + "integrity": "sha512-F3cLs9a3hL1Z7N4+EkSscsel3z55XT950AvB05bwayrNg5T1/gykXtigioTAjbltvbMSJvvhFCbnf6mX+ntnJQ==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.0.2.tgz", + "integrity": "sha512-V0HGxJd0PiDF0ecHYIesTOqfd1gJguwQUOYfMfAWnRsWQEXfc5ifbUFhD3Wjc+O+y7VAqL+g07prq9gHQ/JOZQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true } } }, "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", "dev": true }, "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", + "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", "dev": true, "requires": { - "commander": "^2.19.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.10" + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" }, "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true } } }, "terser-webpack-plugin": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz", - "integrity": "sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", + "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", "dev": true, "requires": { - "cacache": "^13.0.1", - "find-cache-dir": "^3.3.1", - "jest-worker": "^25.4.0", - "p-limit": "^2.3.0", - "schema-utils": "^2.6.6", - "serialize-javascript": "^4.0.0", + "jest-worker": "^26.6.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", "source-map": "^0.6.1", - "terser": "^4.6.12", - "webpack-sources": "^1.4.3" + "terser": "^5.5.1" }, "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } } } }, @@ -9421,22 +28825,6 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, "thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -9490,31 +28878,81 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, "toidentifier": { @@ -9524,9 +28962,9 @@ "dev": true }, "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", "dev": true }, "tty-browserify": { @@ -9551,9 +28989,9 @@ } }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "type-is": { @@ -9566,34 +29004,16 @@ "mime-types": "~2.1.24" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", "dev": true, "requires": { - "commander": "~2.19.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" } }, "unicode-canonical-property-names-ecmascript": { @@ -9656,28 +29076,10 @@ "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", "dev": true }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "unpipe": { @@ -9738,19 +29140,21 @@ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } } }, "urix": { @@ -9778,9 +29182,9 @@ } }, "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", + "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", "dev": true, "requires": { "querystringify": "^2.1.1", @@ -9841,9 +29245,9 @@ "dev": true }, "v8-compile-cache": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", - "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "vary": { @@ -9865,35 +29269,25 @@ "dev": true }, "vue-eslint-parser": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.1.0.tgz", - "integrity": "sha512-Kr21uPfthDc63nDl27AGQEhtt9VrZ9nkYk/NTftJ2ws9XiJwzJJCnCr3AITQ2jpRMA0XPGDECxYH8E027qMK9Q==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz", + "integrity": "sha512-QXxqH8ZevBrtiZMZK0LpwaMfevQi9UL7lY6Kcp+ogWHC88AuwUPwwCIzkOUc1LR4XsYAt/F9yHXAB/QoD17QXA==", "dev": true, "requires": { "debug": "^4.1.1", "eslint-scope": "^5.0.0", "eslint-visitor-keys": "^1.1.0", "espree": "^6.2.1", - "esquery": "^1.0.1", + "esquery": "^1.4.0", "lodash": "^4.17.15" }, "dependencies": { - "acorn": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz", - "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==", + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, - "eslint-scope": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", - "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, "espree": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", @@ -9924,22 +29318,66 @@ "loader-utils": "^1.1.0", "vue-hot-reload-api": "^2.3.0", "vue-style-loader": "^4.1.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } } }, "vue-style-loader": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz", - "integrity": "sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", "dev": true, "requires": { "hash-sum": "^1.0.2", "loader-utils": "^1.0.2" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } } }, "vue-template-compiler": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz", - "integrity": "sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz", + "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==", "dev": true, "requires": { "de-indent": "^1.0.2", @@ -9953,136 +29391,13 @@ "dev": true }, "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - }, - "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "optional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true, - "optional": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "optional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "optional": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "optional": true - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "optional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", + "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", "dev": true, - "optional": true, "requires": { - "chokidar": "^2.1.8" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" } }, "wbuf": { @@ -10095,133 +29410,41 @@ } }, "webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", + "version": "5.28.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.28.0.tgz", + "integrity": "sha512-1xllYVmA4dIvRjHzwELgW4KjIU1fW4PEuEnjsylz7k7H5HgPOctIq7W1jrt3sKH9yG5d72//XWzsHhfoWvsQVg==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.46", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "acorn": "^8.0.4", + "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", + "enhanced-resolve": "^5.7.0", + "es-module-lexer": "^0.4.0", + "eslint-scope": "^5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.1", + "watchpack": "^2.0.0", + "webpack-sources": "^2.1.1" + }, + "dependencies": { + "acorn": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz", + "integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==", + "dev": true }, "source-map": { "version": "0.6.1", @@ -10229,373 +29452,139 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "webpack-sources": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", + "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", "dev": true, "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" } } } }, "webpack-cli": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz", - "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz", + "integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "cross-spawn": "^6.0.5", - "enhanced-resolve": "^4.1.1", - "findup-sync": "^3.0.0", - "global-modules": "^2.0.0", - "import-local": "^2.0.0", - "interpret": "^1.4.0", - "loader-utils": "^1.4.0", - "supports-color": "^6.1.0", - "v8-compile-cache": "^2.1.1", - "yargs": "^13.3.2" + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.0.2", + "@webpack-cli/info": "^1.2.3", + "@webpack-cli/serve": "^1.3.1", + "colorette": "^1.2.1", + "commander": "^7.0.0", + "enquirer": "^2.3.6", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", + "webpack-merge": "^5.7.3" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } } } }, "webpack-dev-middleware": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", - "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.1.0.tgz", + "integrity": "sha512-mpa/FY+DiBu5+r5JUIyTCYWRfkWgyA3/OOE9lwfzV9S70A4vJYLsVRKj5rMFEsezBroy2FmPyQ8oBRVW8QmK1A==", "dev": true, "requires": { - "memory-fs": "^0.4.1", - "mime": "^2.4.4", - "mkdirp": "^0.5.1", + "colorette": "^1.2.1", + "mem": "^8.0.0", + "memfs": "^3.2.0", + "mime-types": "^2.1.28", "range-parser": "^1.2.1", - "webpack-log": "^2.0.0" - }, - "dependencies": { - "mime": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz", - "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==", - "dev": true - } + "schema-utils": "^3.0.0" } }, "webpack-dev-server": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.1.tgz", - "integrity": "sha512-u4R3mRzZkbxQVa+MBWi2uVpB5W59H3ekZAJsQlKUTdl7Elcah2EhygTPLmeFXybQkf9i2+L0kn7ik9SnXa6ihQ==", + "version": "4.0.0-beta.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.0.0-beta.1.tgz", + "integrity": "sha512-rPSAfz1VKQDQ2kmRbOamc0mX+T7kfqi9acvHic1YYctHWfKKvtovwLm9sA48GdLiYb8Ynop79zdT3CUoFiT7YQ==", "dev": true, "requires": { - "ansi-html": "0.0.7", + "ansi-html": "^0.0.7", "bonjour": "^3.5.0", - "chokidar": "^2.1.8", + "chokidar": "^3.5.1", "compression": "^1.7.4", "connect-history-api-fallback": "^1.6.0", - "debug": "^4.1.1", - "del": "^4.1.1", + "del": "^6.0.0", "express": "^4.17.1", - "html-entities": "^1.3.1", - "http-proxy-middleware": "0.19.1", - "import-local": "^2.0.0", - "internal-ip": "^4.3.0", - "ip": "^1.1.5", + "find-cache-dir": "^3.3.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.1.1", + "http-proxy-middleware": "^1.0.6", + "internal-ip": "^6.2.0", + "ipaddr.js": "^1.9.1", "is-absolute-url": "^3.0.3", "killable": "^1.0.1", - "loglevel": "^1.6.8", - "opn": "^5.5.0", - "p-retry": "^3.0.1", - "portfinder": "^1.0.26", - "schema-utils": "^1.0.0", + "open": "^7.4.2", + "p-retry": "^4.4.0", + "portfinder": "^1.0.28", + "schema-utils": "^3.0.0", "selfsigned": "^1.10.8", - "semver": "^6.3.0", "serve-index": "^1.9.1", "sockjs": "^0.3.21", "sockjs-client": "^1.5.0", "spdy": "^4.0.2", - "strip-ansi": "^3.0.1", - "supports-color": "^6.1.0", + "strip-ansi": "^6.0.0", "url": "^0.11.0", - "webpack-dev-middleware": "^3.7.2", - "webpack-log": "^2.0.0", - "ws": "^6.2.1", - "yargs": "^13.3.2" + "util": "^0.12.3", + "webpack-dev-middleware": "^4.1.0", + "ws": "^7.4.4" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, "is-absolute-url": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "dev": true }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - }, - "dependencies": { - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "util": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", + "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" } } } }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - }, "webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", + "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", "dev": true, "requires": { - "lodash": "^4.17.15" + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" } }, "webpack-notifier": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.12.0.tgz", - "integrity": "sha512-urRnbKupMQHUplsiwsOajp1F1DCJgJ+yyT4HIxAP+TfMF+ZtsKW+kVt2UcDm1E88xutOst+VChJZMDAD3aec5w==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.13.0.tgz", + "integrity": "sha512-QLk6l/TZKGhyN6Hd1zobaiYno7S9YPX3wH86+YOSufHes77SegGhnGdj+4vrLDFK5A4ZKoQD5GRXXFnM0h0N8A==", "dev": true, "requires": { - "node-notifier": "^8.0.0", + "node-notifier": "^9.0.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - } } }, "webpack-sources": { @@ -10616,6 +29605,22 @@ } } }, + "webpackbar": { + "version": "5.0.0-3", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", + "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.1", + "chalk": "^4.1.0", + "consola": "^2.15.0", + "figures": "^3.2.0", + "pretty-time": "^1.1.0", + "std-env": "^2.2.1", + "text-table": "^0.2.0", + "wrap-ansi": "^7.0.0" + } + }, "websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", @@ -10642,10 +29647,38 @@ "isexe": "^2.0.0" } }, - "which-module": { + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", + "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.0", + "es-abstract": "^1.18.0-next.1", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" + } + }, + "wildcard": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, "word-wrap": { @@ -10654,52 +29687,15 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "wrappy": { @@ -10708,23 +29704,12 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "write": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", - "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, - "requires": { - "mkdirp": "^0.5.1" - } - }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", + "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } + "requires": {} }, "xtend": { "version": "4.0.2", @@ -10733,141 +29718,49 @@ "dev": true }, "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", "dev": true }, "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true }, "yargs": { - "version": "15.4.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", - "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index b849f9033..bd2f11956 100644 --- a/package.json +++ b/package.json @@ -4,22 +4,24 @@ "license": "GPL-3.0-only", "scripts": { "dev": "npm run development", - "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", - "watch": "npm run development -- --watch", - "watch-poll": "npm run watch -- --watch-poll", + "development": "mix", + "watch": "mix watch", + "watch-poll": "mix watch -- --watch-options-poll=1000", + "hot": "mix watch --hot", "prod": "npm run production", - "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", - "lint": "npx eslint --ext .js,.vue --resolve-plugins-relative-to . src/resources/assets/js/" + "production": "mix --production", + "lint": "eslint --ext .js,.vue --resolve-plugins-relative-to . src/resources/assets/js/" }, "devDependencies": { "cross-env": "^5.1", "eslint": "^7.3.1", - "eslint-plugin-vue": "^6.2.2", - "laravel-mix": "^5.0.9", + "eslint-plugin-vue": "^7.0.0", + "laravel-mix": "^6.0.13", "laravel-mix-artisan-publish": "git://github.com/mzur/laravel-mix-artisan-publish.git", "resolve-url-loader": "^3.1.2", "sass": "^1.15.2", "sass-loader": "^8.0.0", + "vue-loader": "^15.9.6", "vue-template-compiler": "^2.6.11" }, "dependencies": { diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index dafa09688..81ad3d332 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1,2 +1 @@ -/*! For license information please see annotations.js.LICENSE.txt */ -!function(t){var e={};function i(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},i.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.t=function(t,e){if(1&e&&(t=i(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(i.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)i.d(n,r,function(e){return t[e]}.bind(null,r));return n},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="/",i(i.s=1)}({1:function(t,e,i){t.exports=i("2R1P")},"2R1P":function(t,e,i){"use strict";function n(){return function(){throw new Error("Unimplemented abstract method.")}()}i.r(e);var r=0;function o(t){return t.ol_uid||(t.ol_uid=String(++r))}var s=function(t){function e(e){var i="Assertion failed. See https://openlayers.org/en/"+("v"+"5.3.0".split("-")[0])+"/doc/errors/#"+e+" for details.";t.call(this,i),this.code=e,this.name="AssertionError",this.message=i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error);function a(t,e){if(!t)throw new s(e)}function h(t,e,i){return Math.min(Math.max(t,e),i)}var u="cosh"in Math?Math.cosh:function(t){var e=Math.exp(t);return(e+1/e)/2};function l(t,e,i,n,r,o){var s=r-i,a=o-n;if(0!==s||0!==a){var h=((t-i)*s+(e-n)*a)/(s*s+a*a);h>1?(i=r,n=o):h>0&&(i+=s*h,n+=a*h)}return c(t,e,i,n)}function c(t,e,i,n){var r=i-t,o=n-e;return r*r+o*o}function p(t,e,i){return t+i*(e-t)}var f=/^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i,d=/^([a-z]*)$/i;function _(t){return"string"==typeof t?t:y(t)}!function(){var t={},e=0}();function g(t){return t[0]=h(t[0]+.5|0,0,255),t[1]=h(t[1]+.5|0,0,255),t[2]=h(t[2]+.5|0,0,255),t[3]=h(t[3],0,1),t}function y(t){var e=t[0];e!=(0|e)&&(e=e+.5|0);var i=t[1];i!=(0|i)&&(i=i+.5|0);var n=t[2];return n!=(0|n)&&(n=n+.5|0),"rgba("+e+","+i+","+n+","+(void 0===t[3]?1:t[3])+")"}function v(t){return Array.isArray(t)?y(t):t}function m(t,e){var i=document.createElement("canvas");return t&&(i.width=t),e&&(i.height=e),i.getContext("2d")}var C="undefined"!=typeof navigator?navigator.userAgent.toLowerCase():"",x=(C.indexOf("firefox"),-1!==C.indexOf("safari")&&C.indexOf("chrom"),-1!==C.indexOf("webkit")&&C.indexOf("edge"),C.indexOf("macintosh"),window.devicePixelRatio,function(){var t=!1;try{t=!!document.createElement("canvas").getContext("2d").setLineDash}catch(t){}return t}()),w=(navigator,window,window,navigator.msPointerEnabled,2),E=function(){var t,e={};return function(i){if(t||(t=document.createElement("div").style),!(i in e)){t.font=i;var n=t.fontFamily;if(t.font="",!n)return null;e[i]=n.split(/,\s?/)}return e[i]}}(),F="function"==typeof Object.assign?Object.assign:function(t,e){var i=arguments;if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(t),r=1,o=arguments.length;r0},e.prototype.removeEventListener=function(t,e){var i=this.listeners_[t];if(i){var n=i.indexOf(e);t in this.pendingRemovals_?(i[n]=j,++this.pendingRemovals_[t]):(i.splice(n,1),0===i.length&&delete this.listeners_[t])}},e}(P),W="change",V="clear",K="contextmenu",z="dblclick",U=function(t){function e(e){t.call(this),this.highWaterMark=void 0!==e?e:2048,this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.canExpireCache=function(){return this.getCount()>this.highWaterMark},e.prototype.clear=function(){this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null,this.dispatchEvent(V)},e.prototype.containsKey=function(t){return this.entries_.hasOwnProperty(t)},e.prototype.forEach=function(t,e){for(var i=this.oldest_;i;)t.call(e,i.value_,i.key_,this),i=i.newer},e.prototype.get=function(t){var e=this.entries_[t];return a(void 0!==e,15),e===this.newest_||(e===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(e.newer.older=e.older,e.older.newer=e.newer),e.newer=null,e.older=this.newest_,this.newest_.newer=e,this.newest_=e),e.value_},e.prototype.remove=function(t){var e=this.entries_[t];return a(void 0!==e,15),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_},e.prototype.getCount=function(){return this.count_},e.prototype.getKeys=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.key_;return e},e.prototype.getValues=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.value_;return e},e.prototype.peekLast=function(){return this.oldest_.value_},e.prototype.peekLastKey=function(){return this.oldest_.key_},e.prototype.peekFirstKey=function(){return this.newest_.key_},e.prototype.pop=function(){var t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_},e.prototype.replace=function(t,e){this.get(t),this.entries_[t].value_=e},e.prototype.set=function(t,e){a(!(t in this.entries_),16);var i={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=i:this.oldest_=i,this.newest_=i,this.entries_[t]=i,++this.count_},e.prototype.setSize=function(t){this.highWaterMark=t},e.prototype.prune=function(){for(;this.canExpireCache();)this.pop()},e}(B);new Array(6);var H=[0,0,0,1],J=[0,0,0,1],$=new U,Z={},Q=null,tt={};!function(){var t,e,i=Z,n=["monospace","serif"],r=n.length,o="wmytzilWMYTZIL@#/&?$%10";function s(t){for(var i=et(),s=100;s<=700;s+=300){for(var a=s+" ",h=!0,u=0;u0;)this.pop()},e.prototype.extend=function(t){for(var e=0,i=t.length;e=1?(i=l,n=c):(i=h+d*p,n=u+d*f),[i,n]}function kt(t,e){for(var i=!0,n=t.length-1;n>=0;--n)if(t[n]!=e[n]){i=!1;break}return i}function Mt(t,e){var i=t[0]-e[0],n=t[1]-e[1];return i*i+n*n}function It(t,e){return Math.sqrt(Mt(t,e))}var Pt=X,Rt=Y,bt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey},Dt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&e.shiftKey},At=function(t){var e=t.pointerEvent;return a(void 0!==e,56),e.isPrimary&&0===e.button},Ot=0,Gt=1,Tt=2,Lt=4,Xt=8,Yt=16;function jt(t){for(var e=Vt(),i=0,n=t.length;ir&&(h|=Lt),ao&&(h|=Tt),h===Ot&&(h=Gt),h}function Vt(){return[1/0,1/0,-1/0,-1/0]}function Kt(t,e,i,n,r){return r?(r[0]=t,r[1]=e,r[2]=i,r[3]=n,r):[t,e,i,n]}function zt(t){return Kt(1/0,1/0,-1/0,-1/0,t)}function Ut(t,e){var i=t[0],n=t[1];return Kt(i,n,i,n,e)}function Ht(t,e,i,n,r){return Zt(zt(r),t,e,i,n)}function Jt(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function $t(t,e){e[0]t[2]&&(t[2]=e[0]),e[1]t[3]&&(t[3]=e[1])}function Zt(t,e,i,n,r){for(;i=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}var he="Point",ue="LineString",le="LinearRing",ce="Polygon",pe="MultiPoint",fe="MultiLineString",de="MultiPolygon",_e="GeometryCollection",ge="Circle",ye="Rectangle",ve="Ellipse";function me(t,e,i,n,r,o){for(var s=o||[],a=0,h=e;h1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=Se,a=0;as?h=s:h<-s&&(h=-s),o[a+1]=h}return o}function be(t,e,i){var n=t.length,r=i>1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=0;s=e[0]||(t[1]<=e[1]&&t[3]>=e[1]||te(t,this.intersectsCoordinate,this))}return!1},e.prototype.setCenter=function(t){var e=this.stride,i=this.flatCoordinates[e]-this.flatCoordinates[0],n=t.slice();n[e]=n[0]+i;for(var r=1;re?1:t1)a=i;else{if(f>0){for(var d=0;dr&&(r=u),o=a,s=h}return r}function ci(t,e,i,n,r){for(var o=0,s=i.length;o>1)],e))<0?s=n+1:(a=n,h=!r);return h?s:~s}(f,y);if(v<0){var m=(y-f[-v-2])/(f[-v-1]-f[-v-2]),C=e+(-v-2)*n;s=p(t[C],t[C+n],m),a=p(t[C+1],t[C+n+1],m)}else s=t[e+v*n],a=t[e+v*n+1]}return o?(o[0]=s,o[1]=a,o):[s,a]}function yi(t,e,i,n,r,o){if(i==e)return null;var s;if(r>1;ro&&(u-a)*(o-h)-(r-a)*(l-h)>0&&s++:l<=o&&(u-a)*(o-h)-(r-a)*(l-h)<0&&s--,a=u,h=l}return 0!==s}function Ci(t,e,i,n,r,o){if(0===i.length)return!1;if(!mi(t,e,i[0],n,r,o))return!1;for(var s=1,a=i.length;s=r[0]&&o[2]<=r[2]||(o[1]>=r[1]&&o[3]<=r[3]||xi(t,e,i,n,(function(t,e){return function(t,e,i){var n=!1,r=Wt(t,e),o=Wt(t,i);if(r===Gt||o===Gt)n=!0;else{var s,a,h=t[0],u=t[1],l=t[2],c=t[3],p=e[0],f=e[1],d=i[0],_=i[1],g=(_-f)/(d-p);o&Tt&&!(r&Tt)&&(n=(s=d-(_-c)/g)>=h&&s<=l),n||!(o&Lt)||r&Lt||(n=(a=_-(d-l)*g)>=u&&a<=c),n||!(o&Xt)||r&Xt||(n=(s=d-(_-u)/g)>=h&&s<=l),n||!(o&Yt)||r&Yt||(n=(a=_-(d-h)*g)>=u&&a<=c)}return n}(r,t,e)})))))}function Ei(t,e,i,n,r){if(!function(t,e,i,n,r){return!!wi(t,e,i,n,r)||(!!mi(t,e,i,n,r[0],r[1])||(!!mi(t,e,i,n,r[0],r[3])||(!!mi(t,e,i,n,r[2],r[1])||!!mi(t,e,i,n,r[2],r[3]))))}(t,e,i[0],n,r))return!1;if(1===i.length)return!0;for(var o=1,s=i.length;o0;){for(var p=u.pop(),f=u.pop(),d=0,_=t[f],g=t[f+1],y=t[p],v=t[p+1],m=f+n;md&&(c=m,d=C)}d>r&&(h[(c-e)/n]=1,f+n0&&_>f)&&(d<0&&g0&&g>d)?(a=c,h=p):(o[s++]=a,o[s++]=h,u=a,l=h,a=c,h=p)}}return o[s++]=a,o[s++]=h,s}function Pi(t,e,i,n,r,o,s,a){for(var h=0,u=i.length;hC&&Ci(t,e,i,n,u=(l+c)/2,d)&&(m=u,C=x),l=c}return isNaN(m)&&(m=r[o]),s?(s.push(m,d,C),s):[m,d,C]}function Xi(t,e,i,n){for(;e0}function ji(t,e,i,n,r){for(var o=void 0!==r&&r,s=0,a=i.length;s0}}else if(t.type==wt){var n=this.handleDownEvent(t);n&&t.preventDefault(),this.handlingDownUpSequence=n,e=this.stopDown(n)}else t.type==xt&&this.handleMoveEvent(t);return!e},e.prototype.handleMoveEvent=function(t){},e.prototype.handleUpEvent=function(t){return!1},e.prototype.stopDown=function(t){return t},e.prototype.updateTrackedPointers_=function(t){if(function(t){var e=t.type;return e===wt||e===Ct||e===Et}(t)){var e=t.pointerEvent,i=e.pointerId.toString();t.type==Et?delete this.trackedPointers_[i]:(t.type==wt||i in this.trackedPointers_)&&(this.trackedPointers_[i]=e),this.targetPointers=k(this.trackedPointers_)}},e}(function(t){function e(e){t.call(this),e.handleEvent&&(this.handleEvent=e.handleEvent),this.map_=null,this.setActive(!0)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getActive=function(){return this.get(zi)},e.prototype.getMap=function(){return this.map_},e.prototype.handleEvent=function(t){return!0},e.prototype.setActive=function(t){this.set(zi,t)},e.prototype.setMap=function(t){this.map_=t},e}(ft)),Hi="VECTOR",Ji="opacity",$i="visible",Zi="extent",Qi="zIndex",tn="maxResolution",en="minResolution",nn="source",rn="precompose",on="undefined",sn="ready";var an=function(t){function e(e){var i=F({},e);delete i.source,t.call(this,i),this.mapPrecomposeKey_=null,this.mapRenderKey_=null,this.sourceChangeKey_=null,e.map&&this.setMap(e.map),O(this,pt(nn),this.handleSourcePropertyChange_,this);var n=e.source?e.source:null;this.setSource(n)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getLayersArray=function(t){var e=t||[];return e.push(this),e},e.prototype.getLayerStatesArray=function(t){var e=t||[];return e.push(this.getLayerState()),e},e.prototype.getSource=function(){return this.get(nn)||null},e.prototype.getSourceState=function(){var t=this.getSource();return t?t.getState():on},e.prototype.handleSourceChange_=function(){this.changed()},e.prototype.handleSourcePropertyChange_=function(){this.sourceChangeKey_&&(L(this.sourceChangeKey_),this.sourceChangeKey_=null);var t=this.getSource();t&&(this.sourceChangeKey_=O(t,W,this.handleSourceChange_,this)),this.changed()},e.prototype.setMap=function(t){this.mapPrecomposeKey_&&(L(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(L(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=O(t,rn,(function(t){var e=t,i=this.getLayerState();i.managed=!1,void 0===this.getZIndex()&&(i.zIndex=1/0),e.frameState.layerStatesArray.push(i),e.frameState.layerStates[o(this)]=i}),this),this.mapRenderKey_=O(this,W,t.render,t),this.changed())},e.prototype.setSource=function(t){this.set(nn,t)},e}(function(t){function e(e){t.call(this);var i=F({},e);i[Ji]=void 0!==e.opacity?e.opacity:1,i[$i]=void 0===e.visible||e.visible,i[Qi]=e.zIndex,i[tn]=void 0!==e.maxResolution?e.maxResolution:1/0,i[en]=void 0!==e.minResolution?e.minResolution:0,this.setProperties(i),this.state_=null,this.type}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getType=function(){return this.type},e.prototype.getLayerState=function(){var t=this.state_||{layer:this,managed:!0};return t.opacity=h(this.getOpacity(),0,1),t.sourceState=this.getSourceState(),t.visible=this.getVisible(),t.extent=this.getExtent(),t.zIndex=this.getZIndex()||0,t.maxResolution=this.getMaxResolution(),t.minResolution=Math.max(this.getMinResolution(),0),this.state_=t,t},e.prototype.getLayersArray=function(t){return n()},e.prototype.getLayerStatesArray=function(t){return n()},e.prototype.getExtent=function(){return this.get(Zi)},e.prototype.getMaxResolution=function(){return this.get(tn)},e.prototype.getMinResolution=function(){return this.get(en)},e.prototype.getOpacity=function(){return this.get(Ji)},e.prototype.getSourceState=function(){return n()},e.prototype.getVisible=function(){return this.get($i)},e.prototype.getZIndex=function(){return this.get(Qi)},e.prototype.setExtent=function(t){this.set(Zi,t)},e.prototype.setMaxResolution=function(t){this.set(tn,t)},e.prototype.setMinResolution=function(t){this.set(en,t)},e.prototype.setOpacity=function(t){this.set(Ji,t)},e.prototype.setVisible=function(t){this.set($i,t)},e.prototype.setZIndex=function(t){this.set(Qi,t)},e}(ft)),hn="vector",un=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.checksum_=void 0};un.prototype.clone=function(){var t=this.getColor();return new un({color:Array.isArray(t)?t.slice():t||void 0})},un.prototype.getColor=function(){return this.color_},un.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},un.prototype.getChecksum=function(){if(void 0===this.checksum_){var t=this.color_;t?Array.isArray(t)||"string"==typeof t?this.checksum_="f"+_(t):this.checksum_=o(this.color_):this.checksum_="f-"}return this.checksum_};var ln=un,cn=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.lineCap_=e.lineCap,this.lineDash_=void 0!==e.lineDash?e.lineDash:null,this.lineDashOffset_=e.lineDashOffset,this.lineJoin_=e.lineJoin,this.miterLimit_=e.miterLimit,this.width_=e.width,this.checksum_=void 0};cn.prototype.clone=function(){var t=this.getColor();return new cn({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})},cn.prototype.getColor=function(){return this.color_},cn.prototype.getLineCap=function(){return this.lineCap_},cn.prototype.getLineDash=function(){return this.lineDash_},cn.prototype.getLineDashOffset=function(){return this.lineDashOffset_},cn.prototype.getLineJoin=function(){return this.lineJoin_},cn.prototype.getMiterLimit=function(){return this.miterLimit_},cn.prototype.getWidth=function(){return this.width_},cn.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},cn.prototype.setLineCap=function(t){this.lineCap_=t,this.checksum_=void 0},cn.prototype.setLineDash=function(t){this.lineDash_=t,this.checksum_=void 0},cn.prototype.setLineDashOffset=function(t){this.lineDashOffset_=t,this.checksum_=void 0},cn.prototype.setLineJoin=function(t){this.lineJoin_=t,this.checksum_=void 0},cn.prototype.setMiterLimit=function(t){this.miterLimit_=t,this.checksum_=void 0},cn.prototype.setWidth=function(t){this.width_=t,this.checksum_=void 0},cn.prototype.getChecksum=function(){return void 0===this.checksum_&&(this.checksum_="s",this.color_?"string"==typeof this.color_?this.checksum_+=this.color_:this.checksum_+=o(this.color_):this.checksum_+="-",this.checksum_+=","+(void 0!==this.lineCap_?this.lineCap_.toString():"-")+","+(this.lineDash_?this.lineDash_.toString():"-")+","+(void 0!==this.lineDashOffset_?this.lineDashOffset_:"-")+","+(void 0!==this.lineJoin_?this.lineJoin_:"-")+","+(void 0!==this.miterLimit_?this.miterLimit_.toString():"-")+","+(void 0!==this.width_?this.width_.toString():"-")),this.checksum_};var pn=cn,fn=function(t){var e=t||{};this.geometry_=null,this.geometryFunction_=yn,void 0!==e.geometry&&this.setGeometry(e.geometry),this.fill_=void 0!==e.fill?e.fill:null,this.image_=void 0!==e.image?e.image:null,this.renderer_=void 0!==e.renderer?e.renderer:null,this.stroke_=void 0!==e.stroke?e.stroke:null,this.text_=void 0!==e.text?e.text:null,this.zIndex_=e.zIndex};fn.prototype.clone=function(){var t=this.getGeometry();return t&&"object"==typeof t&&(t=t.clone()),new fn({geometry:t,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})},fn.prototype.getRenderer=function(){return this.renderer_},fn.prototype.setRenderer=function(t){this.renderer_=t},fn.prototype.getGeometry=function(){return this.geometry_},fn.prototype.getGeometryFunction=function(){return this.geometryFunction_},fn.prototype.getFill=function(){return this.fill_},fn.prototype.setFill=function(t){this.fill_=t},fn.prototype.getImage=function(){return this.image_},fn.prototype.setImage=function(t){this.image_=t},fn.prototype.getStroke=function(){return this.stroke_},fn.prototype.setStroke=function(t){this.stroke_=t},fn.prototype.getText=function(){return this.text_},fn.prototype.setText=function(t){this.text_=t},fn.prototype.getZIndex=function(){return this.zIndex_},fn.prototype.setGeometry=function(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=yn,this.geometry_=t},fn.prototype.setZIndex=function(t){this.zIndex_=t};var dn=null;function _n(t,e){if(!dn){var i=new ln({color:"rgba(255,255,255,0.4)"}),n=new pn({color:"#3399CC",width:1.25});dn=[new fn({image:new ot({fill:i,stroke:n,radius:5}),fill:i,stroke:n})]}return dn}function gn(){var t={},e=[255,255,255,1],i=[0,153,255,1];return t[ce]=[new fn({fill:new ln({color:[255,255,255,.5]})})],t[de]=t[ce],t[ue]=[new fn({stroke:new pn({color:e,width:5})}),new fn({stroke:new pn({color:i,width:3})})],t[fe]=t[ue],t[ge]=t[ce].concat(t[ue]),t[he]=[new fn({image:new ot({radius:6,fill:new ln({color:i}),stroke:new pn({color:e,width:1.5})}),zIndex:1/0})],t[pe]=t[he],t[_e]=t[ce].concat(t[ue],t[he]),t}function yn(t){return t.getGeometry()}var vn=fn,mn="renderOrder",Cn=function(t){function e(e){var i=e||{},n=F({},i);delete n.style,delete n.renderBuffer,delete n.updateWhileAnimating,delete n.updateWhileInteracting,t.call(this,n),this.declutter_=void 0!==i.declutter&&i.declutter,this.renderBuffer_=void 0!==i.renderBuffer?i.renderBuffer:100,this.style_=null,this.styleFunction_=void 0,this.setStyle(i.style),this.updateWhileAnimating_=void 0!==i.updateWhileAnimating&&i.updateWhileAnimating,this.updateWhileInteracting_=void 0!==i.updateWhileInteracting&&i.updateWhileInteracting,this.renderMode_=i.renderMode||hn,this.type=Hi}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDeclutter=function(){return this.declutter_},e.prototype.setDeclutter=function(t){this.declutter_=t},e.prototype.getRenderBuffer=function(){return this.renderBuffer_},e.prototype.getRenderOrder=function(){return this.get(mn)},e.prototype.getStyle=function(){return this.style_},e.prototype.getStyleFunction=function(){return this.styleFunction_},e.prototype.getUpdateWhileAnimating=function(){return this.updateWhileAnimating_},e.prototype.getUpdateWhileInteracting=function(){return this.updateWhileInteracting_},e.prototype.setRenderOrder=function(t){this.set(mn,t)},e.prototype.setStyle=function(t){this.style_=void 0!==t?t:_n,this.styleFunction_=null===t?void 0:function(t){var e;if("function"==typeof t)e=t;else{var i;if(Array.isArray(t))i=t;else a("function"==typeof t.getZIndex,41),i=[t];e=function(){return i}}return e}(this.style_),this.changed()},e.prototype.getRenderMode=function(){return this.renderMode_},e}(an);Cn.prototype.getSource;var xn=Cn,wn="arraybuffer",En="json",Fn="text",Sn="xml";function kn(t,e){return function(t,e,i,n){return function(r,o,s){var a=new XMLHttpRequest;a.open("GET","function"==typeof t?t(r,o,s):t,!0),e.getType()==wn&&(a.responseType="arraybuffer"),a.onload=function(t){if(!a.status||a.status>=200&&a.status<300){var r,o=e.getType();o==En||o==Fn?r=a.responseText:o==Sn?(r=a.responseXML)||(r=(new DOMParser).parseFromString(a.responseText,"application/xml")):o==wn&&(r=a.response),r?i.call(this,e.readFeatures(r,{featureProjection:s}),e.readProjection(r),e.getLastExtent()):n.call(this)}else n.call(this)}.bind(this),a.onerror=function(){n.call(this)}.bind(this),a.send()}}(t,e,(function(t,e){"function"==typeof this.addFeatures&&this.addFeatures(t)}),j)}function Mn(t,e){return[[-1/0,-1/0,1/0,1/0]]}function In(t){return t?Array.isArray(t)?function(e){return t}:"function"==typeof t?t:function(e){return[t]}:null}var Pn=function(t){function e(e){t.call(this),this.projection_=Ve(e.projection),this.attributions_=In(e.attributions),this.attributionsCollapsible_=void 0===e.attributionsCollapsible||e.attributionsCollapsible,this.loading=!1,this.state_=void 0!==e.state?e.state:sn,this.wrapX_=void 0!==e.wrapX&&e.wrapX}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getAttributions=function(){return this.attributions_},e.prototype.getAttributionsCollapsible=function(){return this.attributionsCollapsible_},e.prototype.getProjection=function(){return this.projection_},e.prototype.getResolutions=function(){return n()},e.prototype.getState=function(){return this.state_},e.prototype.getWrapX=function(){return this.wrapX_},e.prototype.refresh=function(){this.changed()},e.prototype.setAttributions=function(t){this.attributions_=In(t),this.changed()},e.prototype.setState=function(t){this.state_=t,this.changed()},e}(ft),Rn="addfeature",bn="changefeature",Dn="clear",An="removefeature",On=i("A1R+"),Gn=i.n(On),Tn=function(t){this.rbush_=Gn()(t,void 0),this.items_={}};Tn.prototype.insert=function(t,e){var i={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3],value:e};this.rbush_.insert(i),this.items_[o(e)]=i},Tn.prototype.load=function(t,e){for(var i=new Array(e.length),n=0,r=e.length;n2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]];if(0===o[1])t=[[i,i,i,i]];else{var s=[-1*o[1],o[0]],a=o[0]/o[1],h=(r[0]+a*(n[1]-r[1])-n[0])/(s[0]-s[1]*a),u=[h*s[0],h*s[1]];t=[[[i[0]-u[0],i[1]-u[1]],[n[0]-u[0],n[1]-u[1]],[n[0]+u[0],n[1]+u[1]],[i[0]+u[0],i[1]+u[1]]]]}}else t=[t];var l=e;return l?l.setCoordinates(t):l=new jn(t),l};else if(this.type_===ve)this.minPoints_=3,this.maxPoints_=3,r=function(t,e){if(t.length>2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]],s=[i[0]+.5*o[0],i[1]+.5*o[1]];if(0===o[1])t=[[i,i,i,i]];else{var a=[-1*o[1],o[0]],h=o[0]/o[1],u=(r[0]+h*(n[1]-r[1])-n[0])/(a[0]-a[1]*h),l=[u*a[0],u*a[1]];t=[[[i[0],i[1]],[s[0]-l[0],s[1]-l[1]],[n[0],n[1]],[s[0]+l[0],s[1]+l[1]]]]}}else t=[t];var c=e;return c?c.setCoordinates(t):c=new Nn(t),c};else{var o,s=this.mode_;s===qn?o=Di:s===Bn?o=Ri:s===Wn&&(o=Wi),r=function(t,e){var i=e;return i?s===Wn?t[0].length?i.setCoordinates([t[0].concat([t[0][0]])]):i.setCoordinates([]):i.setCoordinates(t):i=new o(t),i}}this.geometryFunction_=r,this.dragVertexDelay_=void 0!==e.dragVertexDelay?e.dragVertexDelay:500,this.finishCoordinate_=null,this.sketchFeature_=null,this.sketchPoint_=null,this.sketchCoords_=null,this.sketchLine_=null,this.sketchLineCoords_=null,this.squaredClickTolerance_=e.clickTolerance?e.clickTolerance*e.clickTolerance:36,this.overlay_=new xn({source:new Yn({useSpatialIndex:!1,wrapX:!!e.wrapX&&e.wrapX}),style:e.style?e.style:(n=gn(),function(t,e){return n[t.getGeometry().getType()]}),updateWhileInteracting:!0}),this.geometryName_=e.geometryName,this.condition_=e.condition?e.condition:bt,this.freehandCondition_,e.freehand?this.freehandCondition_=Pt:this.freehandCondition_=e.freehandCondition?e.freehandCondition:Dt,O(this,pt(zi),this.updateState_,this)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setMap=function(e){t.prototype.setMap.call(this,e),this.updateState_()},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleEvent=function(e){e.originalEvent.type===K&&e.preventDefault(),this.freehand_=this.mode_!==qn&&this.freehandCondition_(e);var i=e.type===xt,n=!0;!this.freehand_&&this.lastDragTime_&&e.type===Ct&&(Date.now()-this.lastDragTime_>=this.dragVertexDelay_?(this.downPx_=e.pixel,this.shouldHandle_=!this.freehand_,i=!0):this.lastDragTime_=void 0,this.shouldHandle_&&void 0!==this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0));return this.freehand_&&e.type===Ct&&null!==this.sketchFeature_?(this.addToDrawing_(e),n=!1):this.freehand_&&e.type===wt?n=!1:i?(n=e.type===xt)&&this.freehand_?n=this.handlePointerMove_(e):("mouse"==e.pointerEvent.pointerType||e.type===Ct&&void 0===this.downTimeout_)&&this.handlePointerMove_(e):e.type===mt&&(n=!1),t.prototype.handleEvent.call(this,e)&&n},e.prototype.handleDownEvent=function(t){return this.shouldHandle_=!this.freehand_,this.freehand_?(this.downPx_=t.pixel,this.finishCoordinate_||this.startDrawing_(t),!0):!!this.condition_(t)&&(this.lastDragTime_=Date.now(),this.downTimeout_=setTimeout(function(){this.handlePointerMove_(new Ft(xt,t.map,t.pointerEvent,!1,t.frameState))}.bind(this),this.dragVertexDelay_),this.downPx_=t.pixel,!0)},e.prototype.handleUpEvent=function(t){var e=!0;this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0),this.handlePointerMove_(t);var i=this.mode_===Vn;return this.shouldHandle_?(this.finishCoordinate_?this.freehand_||i?this.finishDrawing():this.atFinish_(t)?this.finishCondition_(t)&&this.finishDrawing():this.addToDrawing_(t):(this.startDrawing_(t),this.mode_===qn&&this.finishDrawing()),e=!1):this.freehand_&&(this.finishCoordinate_=null,this.abortDrawing_()),!e&&this.stopClick_&&t.stopPropagation(),e},e.prototype.handlePointerMove_=function(t){if(this.downPx_&&(!this.freehand_&&this.shouldHandle_||this.freehand_&&!this.shouldHandle_)){var e=this.downPx_,i=t.pixel,n=e[0]-i[0],r=e[1]-i[1],o=n*n+r*r;if(this.shouldHandle_=this.freehand_?o>this.squaredClickTolerance_:o<=this.squaredClickTolerance_,!this.shouldHandle_)return!0}return this.finishCoordinate_?this.modifyDrawing_(t):this.createOrUpdateSketchPoint_(t),!0},e.prototype.atFinish_=function(t){var e=!1;if(this.sketchFeature_){var i=!1,n=[this.finishCoordinate_];if(this.mode_===Bn)i=this.sketchCoords_.length>this.minPoints_;else if(this.mode_===Wn){var r=this.sketchCoords_;i=r[0].length>this.minPoints_,n=[r[0][0],r[0][r[0].length-2]]}if(i)for(var o=t.map,s=0,a=n.length;s=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),this.geometryFunction_(i,r)):this.mode_===Wn&&((i=this.sketchCoords_[0]).length>=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),e&&(this.finishCoordinate_=i[0]),this.geometryFunction_(this.sketchCoords_,r)),this.updateSketchFeatures_(),e&&this.finishDrawing()},e.prototype.removeLastPoint=function(){if(this.sketchFeature_){var t,e=this.sketchFeature_.getGeometry();this.mode_===Bn?((t=this.sketchCoords_).splice(-2,1),this.geometryFunction_(t,e),t.length>=2&&(this.finishCoordinate_=t[t.length-2].slice())):this.mode_===Wn&&((t=this.sketchCoords_[0]).splice(-2,1),this.sketchLine_.getGeometry().setCoordinates(t),this.geometryFunction_(this.sketchCoords_,e)),0===t.length&&(this.finishCoordinate_=null),this.updateSketchFeatures_()}},e.prototype.finishDrawing=function(){var t=this.abortDrawing_();if(t){var e=this.sketchCoords_,i=t.getGeometry();this.mode_===Bn?(e.pop(),this.geometryFunction_(e,i)):this.mode_===Wn&&(e[0].pop(),this.geometryFunction_(e,i),e=i.getCoordinates()),this.type_===pe?t.setGeometry(new Ai([e])):this.type_===fe?t.setGeometry(new bi([e])):this.type_===de&&t.setGeometry(new Vi([e])),this.dispatchEvent(new Hn(Un,t)),this.features_&&this.features_.push(t),this.source_&&this.source_.addFeature(t)}},e.prototype.abortDrawing_=function(){this.finishCoordinate_=null;var t=this.sketchFeature_;return t&&(this.sketchFeature_=null,this.sketchPoint_=null,this.sketchLine_=null,this.overlay_.getSource().clear(!0)),t},e.prototype.extend=function(t){var e=t.getGeometry();this.sketchFeature_=t,this.sketchCoords_=e.getCoordinates();var i=this.sketchCoords_[this.sketchCoords_.length-1];this.finishCoordinate_=i.slice(),this.sketchCoords_.push(i.slice()),this.updateSketchFeatures_(),this.dispatchEvent(new Hn(zn,this.sketchFeature_))},e.prototype.updateSketchFeatures_=function(){var t=[];this.sketchFeature_&&t.push(this.sketchFeature_),this.sketchLine_&&t.push(this.sketchLine_),this.sketchPoint_&&t.push(this.sketchPoint_);var e=this.overlay_.getSource();e.clear(!0),e.addFeatures(t)},e.prototype.updateState_=function(){var t=this.getMap(),e=this.getActive();t&&e||this.abortDrawing_(),this.overlay_.setMap(e?t:null)},e}(Ui),$n=Vue.resource("/api/v1/volumes{/id}/export-area"),Zn="modifystart",Qn="modifyend",tr=function(t){function e(e,i,n){t.call(this,e),this.features=i,this.mapBrowserEvent=n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(q);function er(t,e){return t.index-e.index}function ir(t,e){var i,n,r=e.geometry;if(r.getType()===ge){var o=r;if(1===e.index){var s=Mt(o.getCenter(),t),a=Math.sqrt(s)-o.getRadius();return a*a}}return i=t,n=e.segment,Mt(i,St(i,n))}function nr(t,e){var i=e.geometry;return i.getType()===ge&&1===e.index||i.getType()===ve||i.getType()===ye?i.getClosestPoint(t):St(t,e.segment)}var rr=function(t){function e(e){var i,n;if(t.call(this,e),this.condition_=e.condition?e.condition:At,this.defaultDeleteCondition_=function(t){return function(t){var e=t.originalEvent;return e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey}(t)&&function(t){return t.type==vt}(t)},this.deleteCondition_=e.deleteCondition?e.deleteCondition:this.defaultDeleteCondition_,this.insertVertexCondition_=e.insertVertexCondition?e.insertVertexCondition:Pt,this.vertexFeature_=null,this.vertexSegments_=null,this.lastPixel_=[0,0],this.ignoreNextSingleClick_=!1,this.modified_=!1,this.rBush_=new Ln,this.pixelTolerance_=void 0!==e.pixelTolerance?e.pixelTolerance:10,this.snappedToVertex_=!1,this.changingFeature_=!1,this.dragSegments_=[],this.overlay_=new xn({source:new Yn({useSpatialIndex:!1,wrapX:!!e.wrapX}),style:e.style?e.style:(i=gn(),function(t,e){return i[he]}),updateWhileAnimating:!0,updateWhileInteracting:!0}),this.SEGMENT_WRITERS_={Point:this.writePointGeometry_,LineString:this.writeLineStringGeometry_,LinearRing:this.writeLineStringGeometry_,Polygon:this.writePolygonGeometry_,MultiPoint:this.writeMultiPointGeometry_,MultiLineString:this.writeMultiLineStringGeometry_,MultiPolygon:this.writeMultiPolygonGeometry_,Rectangle:this.writePolygonGeometry_,Ellipse:this.writePolygonGeometry_,Circle:this.writeCircleGeometry_,GeometryCollection:this.writeGeometryCollectionGeometry_},this.source_=null,e.source?(this.source_=e.source,n=new gt(this.source_.getFeatures()),O(this.source_,Rn,this.handleSourceAdd_,this),O(this.source_,An,this.handleSourceRemove_,this)):n=e.features,!n)throw new Error("The modify interaction requires features or a source");this.features_=n,this.features_.forEach(this.addFeature_.bind(this)),O(this.features_,st,this.handleFeatureAdd_,this),O(this.features_,at,this.handleFeatureRemove_,this),this.lastPointerEvent_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.addFeature_=function(t){var e=t.getGeometry();e&&e.getType()in this.SEGMENT_WRITERS_&&this.SEGMENT_WRITERS_[e.getType()].call(this,t,e);var i=this.getMap();i&&i.isRendered()&&this.getActive()&&this.handlePointerAtPixel_(this.lastPixel_,i),O(t,W,this.handleFeatureChange_,this)},e.prototype.willModifyFeatures_=function(t){this.modified_||(this.modified_=!0,this.dispatchEvent(new tr(Zn,this.features_,t)))},e.prototype.removeFeature_=function(t){this.removeFeatureSegmentData_(t),this.vertexFeature_&&0===this.features_.getLength()&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),T(t,W,this.handleFeatureChange_,this)},e.prototype.removeFeatureSegmentData_=function(t){var e=this.rBush_,i=[];e.forEach((function(e){t===e.feature&&i.push(e)}));for(var n=i.length-1;n>=0;--n)e.remove(i[n])},e.prototype.setActive=function(e){this.vertexFeature_&&!e&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),t.prototype.setActive.call(this,e)},e.prototype.setMap=function(e){this.overlay_.setMap(e),t.prototype.setMap.call(this,e)},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleSourceAdd_=function(t){t.feature&&this.features_.push(t.feature)},e.prototype.handleSourceRemove_=function(t){t.feature&&this.features_.remove(t.feature)},e.prototype.handleFeatureAdd_=function(t){this.addFeature_(t.element)},e.prototype.handleFeatureChange_=function(t){if(!this.changingFeature_){var e=t.target;this.removeFeature_(e),this.addFeature_(e)}},e.prototype.handleFeatureRemove_=function(t){var e=t.element;this.removeFeature_(e)},e.prototype.writePointGeometry_=function(t,e){var i=e.getCoordinates(),n={feature:t,geometry:e,segment:[i,i]};this.rBush_.insert(e.getExtent(),n)},e.prototype.writeMultiPointGeometry_=function(t,e){for(var i=e.getCoordinates(),n=0,r=i.length;n=0;--_)this.insertVertex_.apply(this,n[_])}return!!this.vertexFeature_},e.prototype.handleUpEvent=function(t){for(var e=this.dragSegments_.length-1;e>=0;--e){var i=this.dragSegments_[e][0],n=i.geometry;if(n.getType()===ye||n.getType()===ve)this.features_.remove(i.feature),this.features_.push(i.feature);else if(n.getType()===ge){var r=n.getCenter(),o=i.featureSegments[0],s=i.featureSegments[1];o.segment[0]=o.segment[1]=r,s.segment[0]=s.segment[1]=r,this.rBush_.update(Ut(r),o),this.rBush_.update(n.getExtent(),s)}else this.rBush_.update(jt(i.segment),i)}return this.modified_&&(this.dispatchEvent(new tr(Qn,this.features_,t)),this.modified_=!1),!1},e.prototype.handlePointerMove_=function(t){this.lastPixel_=t.pixel,this.handlePointerAtPixel_(t.pixel,t.map)},e.prototype.handlePointerAtPixel_=function(t,e){var i,n,r,s=e.getCoordinateFromPixel(t),a=(i=Ut(s),n=e.getView().getResolution()*this.pixelTolerance_,r?(r[0]=i[0]-n,r[1]=i[1]-n,r[2]=i[2]+n,r[3]=i[3]+n,r):[i[0]-n,i[1]-n,i[2]+n,i[3]+n]),h=this.rBush_.getInExtent(a);if(h.length>0){h.sort((function(t,e){return ir(s,t)-ir(s,e)}));var u=h[0],l=u.segment,c=nr(s,u),p=e.getPixelFromCoordinate(c),f=It(t,p);if(f<=this.pixelTolerance_){var d={};if(u.geometry.getType()===ge&&1===u.index)this.snappedToVertex_=!0,this.createOrUpdateVertexFeature_(c);else{var _=e.getPixelFromCoordinate(l[0]),g=e.getPixelFromCoordinate(l[1]),y=Mt(p,_),v=Mt(p,g);f=Math.sqrt(Math.min(y,v)),this.snappedToVertex_=f<=this.pixelTolerance_,this.snappedToVertex_&&(c=y>v?l[1]:l[0]),this.createOrUpdateVertexFeature_(c);for(var m=1,C=h.length;m=0;--r)c=o((l=(i=p[r])[0]).feature),l.depth&&(c+="-"+l.depth.join("-")),c in f||(f[c]={}),0===i[1]?(f[c].right=l,f[c].index=l.index):1==i[1]&&(f[c].left=l,f[c].index=l.index+1);for(c in f){switch(u=f[c].right,a=f[c].left,(h=(s=f[c].index)-1)<0&&(h=0),t=e=(n=(l=void 0!==a?a:u).geometry).getCoordinates(),d=!1,n.getType()){case fe:e[l.depth[0]].length>2&&(e[l.depth[0]].splice(s,1),d=!0);break;case ue:e.length>2&&(e.splice(s,1),d=!0);break;case de:t=t[l.depth[1]];case ce:(t=t[l.depth[0]]).length>4&&(s==t.length-1&&(s=0),t.splice(s,1),d=!0,0===s&&(t.pop(),t.push(t[0]),h=t.length-1))}if(d){this.setGeometryCoordinates_(n,e);var _=[];if(void 0!==a&&(this.rBush_.remove(a),_.push(a.segment[0])),void 0!==u&&(this.rBush_.remove(u),_.push(u.segment[1])),void 0!==a&&void 0!==u){var g={depth:l.depth,feature:l.feature,geometry:l.geometry,index:h,segment:_};this.rBush_.insert(jt(g.segment),g)}this.updateSegmentIndices_(n,s,l.depth,-1),this.vertexFeature_&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),p.length=0}}return d},e.prototype.setGeometryCoordinates_=function(t,e){this.changingFeature_=!0,t.setCoordinates(e),this.changingFeature_=!1},e.prototype.updateSegmentIndices_=function(t,e,i,n){this.rBush_.forEachInExtent(t.getExtent(),(function(r){r.geometry===t&&(void 0===i||void 0===r.depth||function(t,e){var i=t.length;if(i!==e.length)return!1;for(var n=0;ne&&(r.index+=n)}))},e}(Ui),or=biigle.$require("events"),sr=biigle.$require("messages").handleErrorResponse,ar=biigle.$require("annotations.components.settingsTabPlugins"),hr={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null,volumeId:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},layer:function(){return new xn({source:new Yn({features:new gt}),style:[new vn({stroke:new pn({color:"white",width:4}),image:new ot({radius:6,fill:new ln({color:"#666666"}),stroke:new pn({color:"white",width:2,lineDash:[2]})})}),new vn({stroke:new pn({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new Jn({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(t,e){t.length>1&&(t=[t[0],[t[0][0],t[1][1]],t[1],[t[1][0],t[0][1]]]);var i=e;return i?i.setCoordinates([t]):i=new jn([t]),i}})},modifyInteraction:function(){return new rr({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:Rt})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){var t=this;if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),$n.delete({id:this.volumeId}).then((function(){return t.exportArea=null})).catch((function(t){e.addFeature(i),sr(t)}))}},updateCurrentImage:function(t,e){this.currentImage=e},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var t=this.currentImage.tiled?0:this.height,e=new jn([[[this.exportArea[0],t-this.exportArea[1]],[this.exportArea[0],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[1]]]]);this.layer.getSource().addFeature(new yt({geometry:e}))}},handleModifyend:function(t){this.updateExportArea(t.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(t){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),this.updateExportArea(t.feature).catch((function(){e.clear(),i&&e.addFeature(i)}))},updateExportArea:function(t){var e=this,i=t.getGeometry().getCoordinates()[0],n=this.currentImage.tiled?0:this.height;i=[i[0][0],n-i[0][1],i[2][0],n-i[2][1]].map(Math.round);var r=$n.save({id:this.volumeId},{coordinates:i}).then((function(){return e.exportArea=i}));return r.catch(sr),r},extendMap:function(t){t.addLayer(this.layer),t.addInteraction(this.drawInteraction),t.addInteraction(this.modifyInteraction)}},watch:{opacity:function(t){t<1?this.settings.set("exportAreaOpacity",t):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(t)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.volumeId=biigle.$require("annotations.volumeId"),this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend),or.$on("images.change",this.updateCurrentImage),or.$on("annotations.map.init",this.extendMap)}},ur=i("KHd+"),lr=Object(ur.a)(hr,void 0,void 0,!1,null,null,null).exports;ar&&(ar.exportArea=lr)},"A1R+":function(t,e,i){"use strict";t.exports=r,t.exports.default=r;var n=i("YcpW");function r(t,e){if(!(this instanceof r))return new r(t,e);this._maxEntries=Math.max(4,t||9),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),e&&this._initFormat(e),this.clear()}function o(t,e,i){if(!i)return e.indexOf(t);for(var n=0;n=t.minX&&e.maxY>=t.minY}function _(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function g(t,e,i,r,o){for(var s,a=[e,i];a.length;)(i=a.pop())-(e=a.pop())<=r||(s=e+Math.ceil((i-e)/r/2)*r,n(t,s,e,i,o),a.push(e,s,s,i))}r.prototype={all:function(){return this._all(this.data,[])},search:function(t){var e=this.data,i=[],n=this.toBBox;if(!d(t,e))return i;for(var r,o,s,a,h=[];e;){for(r=0,o=e.children.length;r=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(r,o,e)},_split:function(t,e){var i=t[e],n=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,n);var o=this._chooseSplitIndex(i,r,n),a=_(i.children.splice(o,i.children.length-o));a.height=i.height,a.leaf=i.leaf,s(i,this.toBBox),s(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(i,a)},_splitRoot:function(t,e){this.data=_([t,e]),this.data.height=t.height+1,this.data.leaf=!1,s(this.data,this.toBBox)},_chooseSplitIndex:function(t,e,i){var n,r,o,s,h,u,l,p,f,d,_,g,y,v;for(u=l=1/0,n=e;n<=i-e;n++)r=a(t,0,n,this.toBBox),o=a(t,n,i,this.toBBox),f=r,d=o,_=void 0,g=void 0,y=void 0,v=void 0,_=Math.max(f.minX,d.minX),g=Math.max(f.minY,d.minY),y=Math.min(f.maxX,d.maxX),v=Math.min(f.maxY,d.maxY),s=Math.max(0,y-_)*Math.max(0,v-g),h=c(r)+c(o),s=e;r--)o=t.children[r],h(l,t.leaf?s(o):o),c+=p(l);return c},_adjustParentBBoxes:function(t,e,i){for(var n=i;n>=0;n--)h(e[n],t)},_condense:function(t){for(var e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children).splice(e.indexOf(t[i]),1):this.clear():s(t[i],this.toBBox)},_initFormat:function(t){var e=["return a"," - b",";"];this.compareMinX=new Function("a","b",e.join(t[0])),this.compareMinY=new Function("a","b",e.join(t[1])),this.toBBox=new Function("a","return {minX: a"+t[0]+", minY: a"+t[1]+", maxX: a"+t[2]+", maxY: a"+t[3]+"};")}}},"KHd+":function(t,e,i){"use strict";function n(t,e,i,n,r,o,s,a){var h,u="function"==typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=i,u._compiled=!0),n&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),s?(h=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),r&&r.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(s)},u._ssrRegister=h):r&&(h=a?function(){r.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:r),h)if(u.functional){u._injectStyles=h;var l=u.render;u.render=function(t,e){return h.call(e),l(t,e)}}else{var c=u.beforeCreate;u.beforeCreate=c?[].concat(c,h):[h]}return{exports:t,options:u}}i.d(e,"a",(function(){return n}))},YcpW:function(t,e,i){t.exports=function(){"use strict";function t(t,e,i){var n=t[e];t[e]=t[i],t[i]=n}function e(t,e){return te?1:0}return function(i,n,r,o,s){!function e(i,n,r,o,s){for(;o>r;){if(o-r>600){var a=o-r+1,h=n-r+1,u=Math.log(a),l=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*l*(a-l)/a)*(h-a/2<0?-1:1),p=Math.max(r,Math.floor(n-h*l/a+c)),f=Math.min(o,Math.floor(n+(a-h)*l/a+c));e(i,n,p,f,s)}var d=i[n],_=r,g=o;for(t(i,r,n),s(i[o],d)>0&&t(i,r,o);_0;)g--}0===s(i[r],d)?t(i,r,g):(g++,t(i,g,o)),g<=n&&(r=g+1),n<=g&&(o=g-1)}}(i,n,r||0,o||i.length-1,s||e)}}()}}); \ No newline at end of file +(()=>{var t={166:function(t){t.exports=function(){"use strict";function t(t,i,r,o,s){e(t,i,r||0,o||t.length-1,s||n)}function e(t,n,r,o,s){for(;o>r;){if(o-r>600){var a=o-r+1,h=n-r+1,u=Math.log(a),l=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*l*(a-l)/a)*(h-a/2<0?-1:1);e(t,n,Math.max(r,Math.floor(n-h*l/a+c)),Math.min(o,Math.floor(n+(a-h)*l/a+c)),s)}var p=t[n],f=r,d=o;for(i(t,r,n),s(t[o],p)>0&&i(t,r,o);f0;)d--}0===s(t[r],p)?i(t,r,d):i(t,++d,o),d<=n&&(r=d+1),n<=d&&(o=d-1)}}function i(t,e,i){var n=t[e];t[e]=t[i],t[i]=n}function n(t,e){return te?1:0}return t}()},510:(t,e,i)=>{"use strict";t.exports=r,t.exports.default=r;var n=i(166);function r(t,e){if(!(this instanceof r))return new r(t,e);this._maxEntries=Math.max(4,t||9),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),e&&this._initFormat(e),this.clear()}function o(t,e,i){if(!i)return e.indexOf(t);for(var n=0;n=t.minX&&e.maxY>=t.minY}function _(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function g(t,e,i,r,o){for(var s,a=[e,i];a.length;)(i=a.pop())-(e=a.pop())<=r||(s=e+Math.ceil((i-e)/r/2)*r,n(t,s,e,i,o),a.push(e,s,s,i))}r.prototype={all:function(){return this._all(this.data,[])},search:function(t){var e=this.data,i=[],n=this.toBBox;if(!d(t,e))return i;for(var r,o,s,a,h=[];e;){for(r=0,o=e.children.length;r=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(r,o,e)},_split:function(t,e){var i=t[e],n=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,n);var o=this._chooseSplitIndex(i,r,n),a=_(i.children.splice(o,i.children.length-o));a.height=i.height,a.leaf=i.leaf,s(i,this.toBBox),s(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(i,a)},_splitRoot:function(t,e){this.data=_([t,e]),this.data.height=t.height+1,this.data.leaf=!1,s(this.data,this.toBBox)},_chooseSplitIndex:function(t,e,i){var n,r,o,s,h,u,l,p,f,d,_,g,y,v;for(u=l=1/0,n=e;n<=i-e;n++)r=a(t,0,n,this.toBBox),o=a(t,n,i,this.toBBox),f=r,d=o,_=void 0,g=void 0,y=void 0,v=void 0,_=Math.max(f.minX,d.minX),g=Math.max(f.minY,d.minY),y=Math.min(f.maxX,d.maxX),v=Math.min(f.maxY,d.maxY),s=Math.max(0,y-_)*Math.max(0,v-g),h=c(r)+c(o),s=e;r--)o=t.children[r],h(l,t.leaf?s(o):o),c+=p(l);return c},_adjustParentBBoxes:function(t,e,i){for(var n=i;n>=0;n--)h(e[n],t)},_condense:function(t){for(var e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children).splice(e.indexOf(t[i]),1):this.clear():s(t[i],this.toBBox)},_initFormat:function(t){var e=["return a"," - b",";"];this.compareMinX=new Function("a","b",e.join(t[0])),this.compareMinY=new Function("a","b",e.join(t[1])),this.toBBox=new Function("a","return {minX: a"+t[0]+", minY: a"+t[1]+", maxX: a"+t[2]+", maxY: a"+t[3]+"};")}}}},e={};function i(n){var r=e[n];if(void 0!==r)return r.exports;var o=e[n]={exports:{}};return t[n].call(o.exports,o,o.exports,i),o.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";function t(){return function(){throw new Error("Unimplemented abstract method.")}()}var e=0;function n(t){return t.ol_uid||(t.ol_uid=String(++e))}var r="5.3.0";const o=function(t){function e(e){var i="Assertion failed. See https://openlayers.org/en/"+("v"+r.split("-")[0])+"/doc/errors/#"+e+" for details.";t.call(this,i),this.code=e,this.name="AssertionError",this.message=i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error);function s(t,e){if(!t)throw new o(e)}function a(t,e,i){return Math.min(Math.max(t,e),i)}var h="cosh"in Math?Math.cosh:function(t){var e=Math.exp(t);return(e+1/e)/2};function u(t,e,i,n,r,o){var s=r-i,a=o-n;if(0!==s||0!==a){var h=((t-i)*s+(e-n)*a)/(s*s+a*a);h>1?(i=r,n=o):h>0&&(i+=s*h,n+=a*h)}return l(t,e,i,n)}function l(t,e,i,n){var r=i-t,o=n-e;return r*r+o*o}function c(t,e,i){return t+i*(e-t)}var p=/^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i,f=/^([a-z]*)$/i;function d(t){return"string"==typeof t?t:g(t)}!function(){var t={},e=0}();function _(t){return t[0]=a(t[0]+.5|0,0,255),t[1]=a(t[1]+.5|0,0,255),t[2]=a(t[2]+.5|0,0,255),t[3]=a(t[3],0,1),t}function g(t){var e=t[0];e!=(0|e)&&(e=e+.5|0);var i=t[1];i!=(0|i)&&(i=i+.5|0);var n=t[2];return n!=(0|n)&&(n=n+.5|0),"rgba("+e+","+i+","+n+","+(void 0===t[3]?1:t[3])+")"}function y(t){return Array.isArray(t)?g(t):t}function v(t,e){var i=document.createElement("canvas");return t&&(i.width=t),e&&(i.height=e),i.getContext("2d")}var m="undefined"!=typeof navigator?navigator.userAgent.toLowerCase():"",C=(m.indexOf("firefox"),-1!==m.indexOf("safari")&&m.indexOf("chrom"),-1!==m.indexOf("webkit")&&m.indexOf("edge"),m.indexOf("macintosh"),window.devicePixelRatio,function(){var t=!1;try{t=!!document.createElement("canvas").getContext("2d").setLineDash}catch(t){}return t}());navigator,window,window,navigator.msPointerEnabled;const x=2;var w=function(){var t,e={};return function(i){if(t||(t=document.createElement("div").style),!(i in e)){t.font=i;var n=t.fontFamily;if(t.font="",!n)return null;e[i]=n.split(/,\s?/)}return e[i]}}(),E="function"==typeof Object.assign?Object.assign:function(t,e){var i=arguments;if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(t),r=1,o=arguments.length;r0},e.prototype.removeEventListener=function(t,e){var i=this.listeners_[t];if(i){var n=i.indexOf(e);t in this.pendingRemovals_?(i[n]=Y,++this.pendingRemovals_[t]):(i.splice(n,1),0===i.length&&delete this.listeners_[t])}},e}(I),B="change",W="clear",V="contextmenu",z="dblclick";const K=function(t){function e(e){t.call(this),this.highWaterMark=void 0!==e?e:2048,this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.canExpireCache=function(){return this.getCount()>this.highWaterMark},e.prototype.clear=function(){this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null,this.dispatchEvent(W)},e.prototype.containsKey=function(t){return this.entries_.hasOwnProperty(t)},e.prototype.forEach=function(t,e){for(var i=this.oldest_;i;)t.call(e,i.value_,i.key_,this),i=i.newer},e.prototype.get=function(t){var e=this.entries_[t];return s(void 0!==e,15),e===this.newest_||(e===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(e.newer.older=e.older,e.older.newer=e.newer),e.newer=null,e.older=this.newest_,this.newest_.newer=e,this.newest_=e),e.value_},e.prototype.remove=function(t){var e=this.entries_[t];return s(void 0!==e,15),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_},e.prototype.getCount=function(){return this.count_},e.prototype.getKeys=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.key_;return e},e.prototype.getValues=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.value_;return e},e.prototype.peekLast=function(){return this.oldest_.value_},e.prototype.peekLastKey=function(){return this.oldest_.key_},e.prototype.peekFirstKey=function(){return this.newest_.key_},e.prototype.pop=function(){var t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_},e.prototype.replace=function(t,e){this.get(t),this.entries_[t].value_=e},e.prototype.set=function(t,e){s(!(t in this.entries_),16);var i={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=i:this.oldest_=i,this.newest_=i,this.entries_[t]=i,++this.count_},e.prototype.setSize=function(t){this.highWaterMark=t},e.prototype.prune=function(){for(;this.canExpireCache();)this.pop()},e}(q);new Array(6);var U=[0,0,0,1],H=[0,0,0,1],J=new K,$={},Z=null,Q={};!function(){var t,e,i=$,n="32px ",r=["monospace","serif"],o=r.length,s="wmytzilWMYTZIL@#/&?$%10";function a(t){for(var i=tt(),a=100;a<=700;a+=300){for(var h=a+" ",u=!0,l=0;l0;)this.pop()},e.prototype.extend=function(t){for(var e=0,i=t.length;e=1?(i=l,n=c):(i=h+d*p,n=u+d*f),[i,n]}function St(t,e){for(var i=!0,n=t.length-1;n>=0;--n)if(t[n]!=e[n]){i=!1;break}return i}function kt(t,e){var i=t[0]-e[0],n=t[1]-e[1];return i*i+n*n}function Mt(t,e){return Math.sqrt(kt(t,e))}var It=L,Pt=X,Rt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey},Dt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&e.shiftKey},bt=function(t){var e=t.pointerEvent;return s(void 0!==e,56),e.isPrimary&&0===e.button};const At=0,Gt=1,Ot=2,Tt=4,Lt=8,Xt=16;function Yt(t){for(var e=Wt(),i=0,n=t.length;ir&&(h|=Tt),ao&&(h|=Ot),h===At&&(h=Gt),h}function Wt(){return[1/0,1/0,-1/0,-1/0]}function Vt(t,e,i,n,r){return r?(r[0]=t,r[1]=e,r[2]=i,r[3]=n,r):[t,e,i,n]}function zt(t){return Vt(1/0,1/0,-1/0,-1/0,t)}function Kt(t,e){var i=t[0],n=t[1];return Vt(i,n,i,n,e)}function Ut(t,e,i,n,r){return $t(zt(r),t,e,i,n)}function Ht(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function Jt(t,e){e[0]t[2]&&(t[2]=e[0]),e[1]t[3]&&(t[3]=e[1])}function $t(t,e,i,n,r){for(;i=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}const ae="Point",he="LineString",ue="LinearRing",le="Polygon",ce="MultiPoint",pe="MultiLineString",fe="MultiPolygon",de="GeometryCollection",_e="Circle",ge="Rectangle",ye="Ellipse";var ve={DEGREES:"degrees",FEET:"ft",METERS:"m",PIXELS:"pixels",TILE_PIXELS:"tile-pixels",USFEET:"us-ft"},me={};me[ve.DEGREES]=2*Math.PI*6370997/360,me[ve.FEET]=.3048,me[ve.METERS]=1,me[ve.USFEET]=1200/3937;const Ce=ve;var xe=function(t){this.code_=t.code,this.units_=t.units,this.extent_=void 0!==t.extent?t.extent:null,this.worldExtent_=void 0!==t.worldExtent?t.worldExtent:null,this.axisOrientation_=void 0!==t.axisOrientation?t.axisOrientation:"enu",this.global_=void 0!==t.global&&t.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=t.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=t.metersPerUnit};xe.prototype.canWrapX=function(){return this.canWrapX_},xe.prototype.getCode=function(){return this.code_},xe.prototype.getExtent=function(){return this.extent_},xe.prototype.getUnits=function(){return this.units_},xe.prototype.getMetersPerUnit=function(){return this.metersPerUnit_||me[this.units_]},xe.prototype.getWorldExtent=function(){return this.worldExtent_},xe.prototype.getAxisOrientation=function(){return this.axisOrientation_},xe.prototype.isGlobal=function(){return this.global_},xe.prototype.setGlobal=function(t){this.global_=t,this.canWrapX_=!(!t||!this.extent_)},xe.prototype.getDefaultTileGrid=function(){return this.defaultTileGrid_},xe.prototype.setDefaultTileGrid=function(t){this.defaultTileGrid_=t},xe.prototype.setExtent=function(t){this.extent_=t,this.canWrapX_=!(!this.global_||!t)},xe.prototype.setWorldExtent=function(t){this.worldExtent_=t},xe.prototype.setGetPointResolution=function(t){this.getPointResolutionFunc_=t},xe.prototype.getPointResolutionFunc=function(){return this.getPointResolutionFunc_};const we=xe;var Ee=6378137,Fe=Math.PI*Ee,Se=[-Fe,-Fe,Fe,Fe],ke=[-180,-85,180,85],Me=function(t){function e(e){t.call(this,{code:e,units:Ce.METERS,extent:Se,global:!0,worldExtent:ke,getPointResolution:function(t,e){return t/h(e[1]/Ee)}})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(we),Ie=[new Me("EPSG:3857"),new Me("EPSG:102100"),new Me("EPSG:102113"),new Me("EPSG:900913"),new Me("urn:ogc:def:crs:EPSG:6.18:3:3857"),new Me("urn:ogc:def:crs:EPSG::3857"),new Me("http://www.opengis.net/gml/srs/epsg.xml#3857")];function Pe(t,e,i){var n=t.length,r=i>1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=Fe,a=0;as?h=s:h<-s&&(h=-s),o[a+1]=h}return o}function Re(t,e,i){var n=t.length,r=i>1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=0;s=e[0]||(t[1]<=e[1]&&t[3]>=e[1]||Qt(t,this.intersectsCoordinate,this))}return!1},e.prototype.setCenter=function(t){var e=this.stride,i=this.flatCoordinates[e]-this.flatCoordinates[0],n=t.slice();n[e]=n[0]+i;for(var r=1;re?1:t1)a=i;else{if(f>0){for(var d=0;dr&&(r=u),o=a,s=h}return r}function li(t,e,i,n,r){for(var o=0,s=i.length;o>1)],e))<0?s=n+1:(a=n,h=!r);return h?s:~s}(f,y);if(v<0){var m=(y-f[-v-2])/(f[-v-1]-f[-v-2]),C=e+(-v-2)*n;s=c(t[C],t[C+n],m),a=c(t[C+1],t[C+n+1],m)}else s=t[e+v*n],a=t[e+v*n+1]}return o?(o[0]=s,o[1]=a,o):[s,a]}function gi(t,e,i,n,r,o){if(i==e)return null;var s;if(r>1;ro&&(u-a)*(o-h)-(r-a)*(l-h)>0&&s++:l<=o&&(u-a)*(o-h)-(r-a)*(l-h)<0&&s--,a=u,h=l}return 0!==s}function mi(t,e,i,n,r,o){if(0===i.length)return!1;if(!vi(t,e,i[0],n,r,o))return!1;for(var s=1,a=i.length;s=r[0]&&o[2]<=r[2]||(o[1]>=r[1]&&o[3]<=r[3]||Ci(t,e,i,n,(function(t,e){return function(t,e,i){var n=!1,r=Bt(t,e),o=Bt(t,i);if(r===Gt||o===Gt)n=!0;else{var s,a,h=t[0],u=t[1],l=t[2],c=t[3],p=e[0],f=e[1],d=i[0],_=i[1],g=(_-f)/(d-p);o&Ot&&!(r&Ot)&&(n=(s=d-(_-c)/g)>=h&&s<=l),n||!(o&Tt)||r&Tt||(n=(a=_-(d-l)*g)>=u&&a<=c),n||!(o&Lt)||r&Lt||(n=(s=d-(_-u)/g)>=h&&s<=l),n||!(o&Xt)||r&Xt||(n=(a=_-(d-h)*g)>=u&&a<=c)}return n}(r,t,e)})))))}function wi(t,e,i,n,r){if(!function(t,e,i,n,r){return!!(xi(t,e,i,n,r)||vi(t,e,i,n,r[0],r[1])||vi(t,e,i,n,r[0],r[3])||vi(t,e,i,n,r[2],r[1])||vi(t,e,i,n,r[2],r[3]))}(t,e,i[0],n,r))return!1;if(1===i.length)return!0;for(var o=1,s=i.length;o0;){for(var p=l.pop(),f=l.pop(),d=0,_=t[f],g=t[f+1],y=t[p],v=t[p+1],m=f+n;md&&(c=m,d=C)}d>r&&(h[(c-e)/n]=1,f+n0&&_>f)&&(d<0&&g0&&g>d)?(a=c,h=p):(o[s++]=a,o[s++]=h,u=a,l=h,a=c,h=p)}}return o[s++]=a,o[s++]=h,s}function Ii(t,e,i,n,r,o,s,a){for(var h=0,u=i.length;hC&&mi(t,e,i,n,u=(l+c)/2,d)&&(m=u,C=x),l=c}return isNaN(m)&&(m=r[o]),s?(s.push(m,d,C),s):[m,d,C]}function Li(t,e,i,n){for(;e0}function Yi(t,e,i,n,r){for(var o=void 0!==r&&r,s=0,a=i.length;s0}}else if(t.type==xt){var n=this.handleDownEvent(t);n&&t.preventDefault(),this.handlingDownUpSequence=n,e=this.stopDown(n)}else t.type==Ct&&this.handleMoveEvent(t);return!e},e.prototype.handleMoveEvent=function(t){},e.prototype.handleUpEvent=function(t){return!1},e.prototype.stopDown=function(t){return t},e.prototype.updateTrackedPointers_=function(t){if(function(t){var e=t.type;return e===xt||e===mt||e===wt}(t)){var e=t.pointerEvent,i=e.pointerId.toString();t.type==wt?delete this.trackedPointers_[i]:(t.type==xt||i in this.trackedPointers_)&&(this.trackedPointers_[i]=e),this.targetPointers=S(this.trackedPointers_)}},e}(function(t){function e(e){t.call(this),e.handleEvent&&(this.handleEvent=e.handleEvent),this.map_=null,this.setActive(!0)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getActive=function(){return this.get(Ki)},e.prototype.getMap=function(){return this.map_},e.prototype.handleEvent=function(t){return!0},e.prototype.setActive=function(t){this.set(Ki,t)},e.prototype.setMap=function(t){this.map_=t},e}(pt)),Hi="VECTOR",Ji="opacity",$i="visible",Zi="extent",Qi="zIndex",tn="maxResolution",en="minResolution",nn="source";const rn="precompose",on="undefined",sn="ready";const an=function(t){function e(e){var i=E({},e);delete i.source,t.call(this,i),this.mapPrecomposeKey_=null,this.mapRenderKey_=null,this.sourceChangeKey_=null,e.map&&this.setMap(e.map),A(this,ct(nn),this.handleSourcePropertyChange_,this);var n=e.source?e.source:null;this.setSource(n)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getLayersArray=function(t){var e=t||[];return e.push(this),e},e.prototype.getLayerStatesArray=function(t){var e=t||[];return e.push(this.getLayerState()),e},e.prototype.getSource=function(){return this.get(nn)||null},e.prototype.getSourceState=function(){var t=this.getSource();return t?t.getState():on},e.prototype.handleSourceChange_=function(){this.changed()},e.prototype.handleSourcePropertyChange_=function(){this.sourceChangeKey_&&(T(this.sourceChangeKey_),this.sourceChangeKey_=null);var t=this.getSource();t&&(this.sourceChangeKey_=A(t,B,this.handleSourceChange_,this)),this.changed()},e.prototype.setMap=function(t){this.mapPrecomposeKey_&&(T(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(T(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=A(t,rn,(function(t){var e=t,i=this.getLayerState();i.managed=!1,void 0===this.getZIndex()&&(i.zIndex=1/0),e.frameState.layerStatesArray.push(i),e.frameState.layerStates[n(this)]=i}),this),this.mapRenderKey_=A(this,B,t.render,t),this.changed())},e.prototype.setSource=function(t){this.set(nn,t)},e}(function(e){function i(t){e.call(this);var i=E({},t);i[Ji]=void 0!==t.opacity?t.opacity:1,i[$i]=void 0===t.visible||t.visible,i[Qi]=t.zIndex,i[tn]=void 0!==t.maxResolution?t.maxResolution:1/0,i[en]=void 0!==t.minResolution?t.minResolution:0,this.setProperties(i),this.state_=null,this.type}return e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i,i.prototype.getType=function(){return this.type},i.prototype.getLayerState=function(){var t=this.state_||{layer:this,managed:!0};return t.opacity=a(this.getOpacity(),0,1),t.sourceState=this.getSourceState(),t.visible=this.getVisible(),t.extent=this.getExtent(),t.zIndex=this.getZIndex()||0,t.maxResolution=this.getMaxResolution(),t.minResolution=Math.max(this.getMinResolution(),0),this.state_=t,t},i.prototype.getLayersArray=function(e){return t()},i.prototype.getLayerStatesArray=function(e){return t()},i.prototype.getExtent=function(){return this.get(Zi)},i.prototype.getMaxResolution=function(){return this.get(tn)},i.prototype.getMinResolution=function(){return this.get(en)},i.prototype.getOpacity=function(){return this.get(Ji)},i.prototype.getSourceState=function(){return t()},i.prototype.getVisible=function(){return this.get($i)},i.prototype.getZIndex=function(){return this.get(Qi)},i.prototype.setExtent=function(t){this.set(Zi,t)},i.prototype.setMaxResolution=function(t){this.set(tn,t)},i.prototype.setMinResolution=function(t){this.set(en,t)},i.prototype.setOpacity=function(t){this.set(Ji,t)},i.prototype.setVisible=function(t){this.set($i,t)},i.prototype.setZIndex=function(t){this.set(Qi,t)},i}(pt)),hn="vector";var un=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.checksum_=void 0};un.prototype.clone=function(){var t=this.getColor();return new un({color:Array.isArray(t)?t.slice():t||void 0})},un.prototype.getColor=function(){return this.color_},un.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},un.prototype.getChecksum=function(){if(void 0===this.checksum_){var t=this.color_;t?Array.isArray(t)||"string"==typeof t?this.checksum_="f"+d(t):this.checksum_=n(this.color_):this.checksum_="f-"}return this.checksum_};const ln=un;var cn=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.lineCap_=e.lineCap,this.lineDash_=void 0!==e.lineDash?e.lineDash:null,this.lineDashOffset_=e.lineDashOffset,this.lineJoin_=e.lineJoin,this.miterLimit_=e.miterLimit,this.width_=e.width,this.checksum_=void 0};cn.prototype.clone=function(){var t=this.getColor();return new cn({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})},cn.prototype.getColor=function(){return this.color_},cn.prototype.getLineCap=function(){return this.lineCap_},cn.prototype.getLineDash=function(){return this.lineDash_},cn.prototype.getLineDashOffset=function(){return this.lineDashOffset_},cn.prototype.getLineJoin=function(){return this.lineJoin_},cn.prototype.getMiterLimit=function(){return this.miterLimit_},cn.prototype.getWidth=function(){return this.width_},cn.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},cn.prototype.setLineCap=function(t){this.lineCap_=t,this.checksum_=void 0},cn.prototype.setLineDash=function(t){this.lineDash_=t,this.checksum_=void 0},cn.prototype.setLineDashOffset=function(t){this.lineDashOffset_=t,this.checksum_=void 0},cn.prototype.setLineJoin=function(t){this.lineJoin_=t,this.checksum_=void 0},cn.prototype.setMiterLimit=function(t){this.miterLimit_=t,this.checksum_=void 0},cn.prototype.setWidth=function(t){this.width_=t,this.checksum_=void 0},cn.prototype.getChecksum=function(){return void 0===this.checksum_&&(this.checksum_="s",this.color_?"string"==typeof this.color_?this.checksum_+=this.color_:this.checksum_+=n(this.color_):this.checksum_+="-",this.checksum_+=","+(void 0!==this.lineCap_?this.lineCap_.toString():"-")+","+(this.lineDash_?this.lineDash_.toString():"-")+","+(void 0!==this.lineDashOffset_?this.lineDashOffset_:"-")+","+(void 0!==this.lineJoin_?this.lineJoin_:"-")+","+(void 0!==this.miterLimit_?this.miterLimit_.toString():"-")+","+(void 0!==this.width_?this.width_.toString():"-")),this.checksum_};const pn=cn;var fn=function(t){var e=t||{};this.geometry_=null,this.geometryFunction_=yn,void 0!==e.geometry&&this.setGeometry(e.geometry),this.fill_=void 0!==e.fill?e.fill:null,this.image_=void 0!==e.image?e.image:null,this.renderer_=void 0!==e.renderer?e.renderer:null,this.stroke_=void 0!==e.stroke?e.stroke:null,this.text_=void 0!==e.text?e.text:null,this.zIndex_=e.zIndex};fn.prototype.clone=function(){var t=this.getGeometry();return t&&"object"==typeof t&&(t=t.clone()),new fn({geometry:t,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})},fn.prototype.getRenderer=function(){return this.renderer_},fn.prototype.setRenderer=function(t){this.renderer_=t},fn.prototype.getGeometry=function(){return this.geometry_},fn.prototype.getGeometryFunction=function(){return this.geometryFunction_},fn.prototype.getFill=function(){return this.fill_},fn.prototype.setFill=function(t){this.fill_=t},fn.prototype.getImage=function(){return this.image_},fn.prototype.setImage=function(t){this.image_=t},fn.prototype.getStroke=function(){return this.stroke_},fn.prototype.setStroke=function(t){this.stroke_=t},fn.prototype.getText=function(){return this.text_},fn.prototype.setText=function(t){this.text_=t},fn.prototype.getZIndex=function(){return this.zIndex_},fn.prototype.setGeometry=function(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=yn,this.geometry_=t},fn.prototype.setZIndex=function(t){this.zIndex_=t};var dn=null;function _n(t,e){if(!dn){var i=new ln({color:"rgba(255,255,255,0.4)"}),n=new pn({color:"#3399CC",width:1.25});dn=[new fn({image:new rt({fill:i,stroke:n,radius:5}),fill:i,stroke:n})]}return dn}function gn(){var t={},e=[255,255,255,1],i=[0,153,255,1];return t[le]=[new fn({fill:new ln({color:[255,255,255,.5]})})],t[fe]=t[le],t[he]=[new fn({stroke:new pn({color:e,width:5})}),new fn({stroke:new pn({color:i,width:3})})],t[pe]=t[he],t[_e]=t[le].concat(t[he]),t[ae]=[new fn({image:new rt({radius:6,fill:new ln({color:i}),stroke:new pn({color:e,width:1.5})}),zIndex:1/0})],t[ce]=t[ae],t[de]=t[le].concat(t[he],t[ae]),t}function yn(t){return t.getGeometry()}const vn=fn;var mn="renderOrder",Cn=function(t){function e(e){var i=e||{},n=E({},i);delete n.style,delete n.renderBuffer,delete n.updateWhileAnimating,delete n.updateWhileInteracting,t.call(this,n),this.declutter_=void 0!==i.declutter&&i.declutter,this.renderBuffer_=void 0!==i.renderBuffer?i.renderBuffer:100,this.style_=null,this.styleFunction_=void 0,this.setStyle(i.style),this.updateWhileAnimating_=void 0!==i.updateWhileAnimating&&i.updateWhileAnimating,this.updateWhileInteracting_=void 0!==i.updateWhileInteracting&&i.updateWhileInteracting,this.renderMode_=i.renderMode||hn,this.type=Hi}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDeclutter=function(){return this.declutter_},e.prototype.setDeclutter=function(t){this.declutter_=t},e.prototype.getRenderBuffer=function(){return this.renderBuffer_},e.prototype.getRenderOrder=function(){return this.get(mn)},e.prototype.getStyle=function(){return this.style_},e.prototype.getStyleFunction=function(){return this.styleFunction_},e.prototype.getUpdateWhileAnimating=function(){return this.updateWhileAnimating_},e.prototype.getUpdateWhileInteracting=function(){return this.updateWhileInteracting_},e.prototype.setRenderOrder=function(t){this.set(mn,t)},e.prototype.setStyle=function(t){this.style_=void 0!==t?t:_n,this.styleFunction_=null===t?void 0:function(t){var e;if("function"==typeof t)e=t;else{var i;Array.isArray(t)?i=t:(s("function"==typeof t.getZIndex,41),i=[t]),e=function(){return i}}return e}(this.style_),this.changed()},e.prototype.getRenderMode=function(){return this.renderMode_},e}(an);Cn.prototype.getSource;const xn=Cn,wn="arraybuffer",En="json",Fn="text",Sn="xml";function kn(t,e){return function(t,e,i,n){return function(r,o,s){var a=new XMLHttpRequest;a.open("GET","function"==typeof t?t(r,o,s):t,!0),e.getType()==wn&&(a.responseType="arraybuffer"),a.onload=function(t){if(!a.status||a.status>=200&&a.status<300){var r,o=e.getType();o==En||o==Fn?r=a.responseText:o==Sn?(r=a.responseXML)||(r=(new DOMParser).parseFromString(a.responseText,"application/xml")):o==wn&&(r=a.response),r?i.call(this,e.readFeatures(r,{featureProjection:s}),e.readProjection(r),e.getLastExtent()):n.call(this)}else n.call(this)}.bind(this),a.onerror=function(){n.call(this)}.bind(this),a.send()}}(t,e,(function(t,e){"function"==typeof this.addFeatures&&this.addFeatures(t)}),Y)}function Mn(t,e){return[[-1/0,-1/0,1/0,1/0]]}function In(t){return t?Array.isArray(t)?function(e){return t}:"function"==typeof t?t:function(e){return[t]}:null}const Pn=function(e){function i(t){e.call(this),this.projection_=We(t.projection),this.attributions_=In(t.attributions),this.attributionsCollapsible_=void 0===t.attributionsCollapsible||t.attributionsCollapsible,this.loading=!1,this.state_=void 0!==t.state?t.state:sn,this.wrapX_=void 0!==t.wrapX&&t.wrapX}return e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i,i.prototype.getAttributions=function(){return this.attributions_},i.prototype.getAttributionsCollapsible=function(){return this.attributionsCollapsible_},i.prototype.getProjection=function(){return this.projection_},i.prototype.getResolutions=function(){return t()},i.prototype.getState=function(){return this.state_},i.prototype.getWrapX=function(){return this.wrapX_},i.prototype.refresh=function(){this.changed()},i.prototype.setAttributions=function(t){this.attributions_=In(t),this.changed()},i.prototype.setState=function(t){this.state_=t,this.changed()},i}(pt),Rn="addfeature",Dn="changefeature",bn="clear",An="removefeature";var Gn=i(510),On=i.n(Gn),Tn=function(t){this.rbush_=On()(t,void 0),this.items_={}};Tn.prototype.insert=function(t,e){var i={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3],value:e};this.rbush_.insert(i),this.items_[n(e)]=i},Tn.prototype.load=function(t,e){for(var i=new Array(e.length),r=0,o=e.length;r2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]];if(0===o[1])t=[[i,i,i,i]];else{var s=[-1*o[1],o[0]],a=o[0]/o[1],h=(r[0]+a*(n[1]-r[1])-n[0])/(s[0]-s[1]*a),u=[h*s[0],h*s[1]];t=[[[i[0]-u[0],i[1]-u[1]],[n[0]-u[0],n[1]-u[1]],[n[0]+u[0],n[1]+u[1]],[i[0]+u[0],i[1]+u[1]]]]}}else t=[t];var l=e;return l?l.setCoordinates(t):l=new jn(t),l};else if(this.type_===ye)this.minPoints_=3,this.maxPoints_=3,r=function(t,e){if(t.length>2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]],s=[i[0]+.5*o[0],i[1]+.5*o[1]];if(0===o[1])t=[[i,i,i,i]];else{var a=[-1*o[1],o[0]],h=o[0]/o[1],u=(r[0]+h*(n[1]-r[1])-n[0])/(a[0]-a[1]*h),l=[u*a[0],u*a[1]];t=[[[i[0],i[1]],[s[0]-l[0],s[1]-l[1]],[n[0],n[1]],[s[0]+l[0],s[1]+l[1]]]]}}else t=[t];var c=e;return c?c.setCoordinates(t):c=new Nn(t),c};else{var o,s=this.mode_;s===qn?o=Di:s===Bn?o=Pi:s===Wn&&(o=Bi),r=function(t,e){var i=e;return i?s===Wn?t[0].length?i.setCoordinates([t[0].concat([t[0][0]])]):i.setCoordinates([]):i.setCoordinates(t):i=new o(t),i}}this.geometryFunction_=r,this.dragVertexDelay_=void 0!==e.dragVertexDelay?e.dragVertexDelay:500,this.finishCoordinate_=null,this.sketchFeature_=null,this.sketchPoint_=null,this.sketchCoords_=null,this.sketchLine_=null,this.sketchLineCoords_=null,this.squaredClickTolerance_=e.clickTolerance?e.clickTolerance*e.clickTolerance:36,this.overlay_=new xn({source:new Yn({useSpatialIndex:!1,wrapX:!!e.wrapX&&e.wrapX}),style:e.style?e.style:(n=gn(),function(t,e){return n[t.getGeometry().getType()]}),updateWhileInteracting:!0}),this.geometryName_=e.geometryName,this.condition_=e.condition?e.condition:Rt,this.freehandCondition_,e.freehand?this.freehandCondition_=It:this.freehandCondition_=e.freehandCondition?e.freehandCondition:Dt,A(this,ct(Ki),this.updateState_,this)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setMap=function(e){t.prototype.setMap.call(this,e),this.updateState_()},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleEvent=function(e){e.originalEvent.type===V&&e.preventDefault(),this.freehand_=this.mode_!==qn&&this.freehandCondition_(e);var i=e.type===Ct,n=!0;!this.freehand_&&this.lastDragTime_&&e.type===mt&&(Date.now()-this.lastDragTime_>=this.dragVertexDelay_?(this.downPx_=e.pixel,this.shouldHandle_=!this.freehand_,i=!0):this.lastDragTime_=void 0,this.shouldHandle_&&void 0!==this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0));return this.freehand_&&e.type===mt&&null!==this.sketchFeature_?(this.addToDrawing_(e),n=!1):this.freehand_&&e.type===xt?n=!1:i?(n=e.type===Ct)&&this.freehand_?n=this.handlePointerMove_(e):(e.pointerEvent.pointerType==zi||e.type===mt&&void 0===this.downTimeout_)&&this.handlePointerMove_(e):e.type===vt&&(n=!1),t.prototype.handleEvent.call(this,e)&&n},e.prototype.handleDownEvent=function(t){return this.shouldHandle_=!this.freehand_,this.freehand_?(this.downPx_=t.pixel,this.finishCoordinate_||this.startDrawing_(t),!0):!!this.condition_(t)&&(this.lastDragTime_=Date.now(),this.downTimeout_=setTimeout(function(){this.handlePointerMove_(new Et(Ct,t.map,t.pointerEvent,!1,t.frameState))}.bind(this),this.dragVertexDelay_),this.downPx_=t.pixel,!0)},e.prototype.handleUpEvent=function(t){var e=!0;this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0),this.handlePointerMove_(t);var i=this.mode_===Vn;return this.shouldHandle_?(this.finishCoordinate_?this.freehand_||i?this.finishDrawing():this.atFinish_(t)?this.finishCondition_(t)&&this.finishDrawing():this.addToDrawing_(t):(this.startDrawing_(t),this.mode_===qn&&this.finishDrawing()),e=!1):this.freehand_&&(this.finishCoordinate_=null,this.abortDrawing_()),!e&&this.stopClick_&&t.stopPropagation(),e},e.prototype.handlePointerMove_=function(t){if(this.downPx_&&(!this.freehand_&&this.shouldHandle_||this.freehand_&&!this.shouldHandle_)){var e=this.downPx_,i=t.pixel,n=e[0]-i[0],r=e[1]-i[1],o=n*n+r*r;if(this.shouldHandle_=this.freehand_?o>this.squaredClickTolerance_:o<=this.squaredClickTolerance_,!this.shouldHandle_)return!0}return this.finishCoordinate_?this.modifyDrawing_(t):this.createOrUpdateSketchPoint_(t),!0},e.prototype.atFinish_=function(t){var e=!1;if(this.sketchFeature_){var i=!1,n=[this.finishCoordinate_];if(this.mode_===Bn)i=this.sketchCoords_.length>this.minPoints_;else if(this.mode_===Wn){var r=this.sketchCoords_;i=r[0].length>this.minPoints_,n=[r[0][0],r[0][r[0].length-2]]}if(i)for(var o=t.map,s=0,a=n.length;s=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),this.geometryFunction_(i,r)):this.mode_===Wn&&((i=this.sketchCoords_[0]).length>=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),e&&(this.finishCoordinate_=i[0]),this.geometryFunction_(this.sketchCoords_,r)),this.updateSketchFeatures_(),e&&this.finishDrawing()},e.prototype.removeLastPoint=function(){if(this.sketchFeature_){var t,e=this.sketchFeature_.getGeometry();this.mode_===Bn?((t=this.sketchCoords_).splice(-2,1),this.geometryFunction_(t,e),t.length>=2&&(this.finishCoordinate_=t[t.length-2].slice())):this.mode_===Wn&&((t=this.sketchCoords_[0]).splice(-2,1),this.sketchLine_.getGeometry().setCoordinates(t),this.geometryFunction_(this.sketchCoords_,e)),0===t.length&&(this.finishCoordinate_=null),this.updateSketchFeatures_()}},e.prototype.finishDrawing=function(){var t=this.abortDrawing_();if(t){var e=this.sketchCoords_,i=t.getGeometry();this.mode_===Bn?(e.pop(),this.geometryFunction_(e,i)):this.mode_===Wn&&(e[0].pop(),this.geometryFunction_(e,i),e=i.getCoordinates()),this.type_===ce?t.setGeometry(new bi([e])):this.type_===pe?t.setGeometry(new Ri([e])):this.type_===fe&&t.setGeometry(new Wi([e])),this.dispatchEvent(new Hn(Un,t)),this.features_&&this.features_.push(t),this.source_&&this.source_.addFeature(t)}},e.prototype.abortDrawing_=function(){this.finishCoordinate_=null;var t=this.sketchFeature_;return t&&(this.sketchFeature_=null,this.sketchPoint_=null,this.sketchLine_=null,this.overlay_.getSource().clear(!0)),t},e.prototype.extend=function(t){var e=t.getGeometry();this.sketchFeature_=t,this.sketchCoords_=e.getCoordinates();var i=this.sketchCoords_[this.sketchCoords_.length-1];this.finishCoordinate_=i.slice(),this.sketchCoords_.push(i.slice()),this.updateSketchFeatures_(),this.dispatchEvent(new Hn(Kn,this.sketchFeature_))},e.prototype.updateSketchFeatures_=function(){var t=[];this.sketchFeature_&&t.push(this.sketchFeature_),this.sketchLine_&&t.push(this.sketchLine_),this.sketchPoint_&&t.push(this.sketchPoint_);var e=this.overlay_.getSource();e.clear(!0),e.addFeatures(t)},e.prototype.updateState_=function(){var t=this.getMap(),e=this.getActive();t&&e||this.abortDrawing_(),this.overlay_.setMap(e?t:null)},e}(Ui),$n=Vue.resource("/api/v1/volumes{/id}/export-area");var Zn="modifystart",Qn="modifyend",tr=function(t){function e(e,i,n){t.call(this,e),this.features=i,this.mapBrowserEvent=n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(N);function er(t,e){return t.index-e.index}function ir(t,e){var i,n,r=e.geometry;if(r.getType()===_e){var o=r;if(1===e.index){var s=kt(o.getCenter(),t),a=Math.sqrt(s)-o.getRadius();return a*a}}return i=t,n=e.segment,kt(i,Ft(i,n))}function nr(t,e){var i=e.geometry;return i.getType()===_e&&1===e.index||i.getType()===ye||i.getType()===ge?i.getClosestPoint(t):Ft(t,e.segment)}const rr=function(t){function e(e){var i,n;if(t.call(this,e),this.condition_=e.condition?e.condition:bt,this.defaultDeleteCondition_=function(t){return function(t){var e=t.originalEvent;return e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey}(t)&&function(t){return t.type==yt}(t)},this.deleteCondition_=e.deleteCondition?e.deleteCondition:this.defaultDeleteCondition_,this.insertVertexCondition_=e.insertVertexCondition?e.insertVertexCondition:It,this.vertexFeature_=null,this.vertexSegments_=null,this.lastPixel_=[0,0],this.ignoreNextSingleClick_=!1,this.modified_=!1,this.rBush_=new Ln,this.pixelTolerance_=void 0!==e.pixelTolerance?e.pixelTolerance:10,this.snappedToVertex_=!1,this.changingFeature_=!1,this.dragSegments_=[],this.overlay_=new xn({source:new Yn({useSpatialIndex:!1,wrapX:!!e.wrapX}),style:e.style?e.style:(i=gn(),function(t,e){return i[ae]}),updateWhileAnimating:!0,updateWhileInteracting:!0}),this.SEGMENT_WRITERS_={Point:this.writePointGeometry_,LineString:this.writeLineStringGeometry_,LinearRing:this.writeLineStringGeometry_,Polygon:this.writePolygonGeometry_,MultiPoint:this.writeMultiPointGeometry_,MultiLineString:this.writeMultiLineStringGeometry_,MultiPolygon:this.writeMultiPolygonGeometry_,Rectangle:this.writePolygonGeometry_,Ellipse:this.writePolygonGeometry_,Circle:this.writeCircleGeometry_,GeometryCollection:this.writeGeometryCollectionGeometry_},this.source_=null,e.source?(this.source_=e.source,n=new _t(this.source_.getFeatures()),A(this.source_,Rn,this.handleSourceAdd_,this),A(this.source_,An,this.handleSourceRemove_,this)):n=e.features,!n)throw new Error("The modify interaction requires features or a source");this.features_=n,this.features_.forEach(this.addFeature_.bind(this)),A(this.features_,ot,this.handleFeatureAdd_,this),A(this.features_,st,this.handleFeatureRemove_,this),this.lastPointerEvent_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.addFeature_=function(t){var e=t.getGeometry();e&&e.getType()in this.SEGMENT_WRITERS_&&this.SEGMENT_WRITERS_[e.getType()].call(this,t,e);var i=this.getMap();i&&i.isRendered()&&this.getActive()&&this.handlePointerAtPixel_(this.lastPixel_,i),A(t,B,this.handleFeatureChange_,this)},e.prototype.willModifyFeatures_=function(t){this.modified_||(this.modified_=!0,this.dispatchEvent(new tr(Zn,this.features_,t)))},e.prototype.removeFeature_=function(t){this.removeFeatureSegmentData_(t),this.vertexFeature_&&0===this.features_.getLength()&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),O(t,B,this.handleFeatureChange_,this)},e.prototype.removeFeatureSegmentData_=function(t){var e=this.rBush_,i=[];e.forEach((function(e){t===e.feature&&i.push(e)}));for(var n=i.length-1;n>=0;--n)e.remove(i[n])},e.prototype.setActive=function(e){this.vertexFeature_&&!e&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),t.prototype.setActive.call(this,e)},e.prototype.setMap=function(e){this.overlay_.setMap(e),t.prototype.setMap.call(this,e)},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleSourceAdd_=function(t){t.feature&&this.features_.push(t.feature)},e.prototype.handleSourceRemove_=function(t){t.feature&&this.features_.remove(t.feature)},e.prototype.handleFeatureAdd_=function(t){this.addFeature_(t.element)},e.prototype.handleFeatureChange_=function(t){if(!this.changingFeature_){var e=t.target;this.removeFeature_(e),this.addFeature_(e)}},e.prototype.handleFeatureRemove_=function(t){var e=t.element;this.removeFeature_(e)},e.prototype.writePointGeometry_=function(t,e){var i=e.getCoordinates(),n={feature:t,geometry:e,segment:[i,i]};this.rBush_.insert(e.getExtent(),n)},e.prototype.writeMultiPointGeometry_=function(t,e){for(var i=e.getCoordinates(),n=0,r=i.length;n=0;--_)this.insertVertex_.apply(this,r[_])}return!!this.vertexFeature_},e.prototype.handleUpEvent=function(t){for(var e=this.dragSegments_.length-1;e>=0;--e){var i=this.dragSegments_[e][0],n=i.geometry;if(n.getType()===ge||n.getType()===ye)this.features_.remove(i.feature),this.features_.push(i.feature);else if(n.getType()===_e){var r=n.getCenter(),o=i.featureSegments[0],s=i.featureSegments[1];o.segment[0]=o.segment[1]=r,s.segment[0]=s.segment[1]=r,this.rBush_.update(Kt(r),o),this.rBush_.update(n.getExtent(),s)}else this.rBush_.update(Yt(i.segment),i)}return this.modified_&&(this.dispatchEvent(new tr(Qn,this.features_,t)),this.modified_=!1),!1},e.prototype.handlePointerMove_=function(t){this.lastPixel_=t.pixel,this.handlePointerAtPixel_(t.pixel,t.map)},e.prototype.handlePointerAtPixel_=function(t,e){var i,r,o,s=e.getCoordinateFromPixel(t),a=(i=Kt(s),r=e.getView().getResolution()*this.pixelTolerance_,o?(o[0]=i[0]-r,o[1]=i[1]-r,o[2]=i[2]+r,o[3]=i[3]+r,o):[i[0]-r,i[1]-r,i[2]+r,i[3]+r]),h=this.rBush_.getInExtent(a);if(h.length>0){h.sort((function(t,e){return ir(s,t)-ir(s,e)}));var u=h[0],l=u.segment,c=nr(s,u),p=e.getPixelFromCoordinate(c),f=Mt(t,p);if(f<=this.pixelTolerance_){var d={};if(u.geometry.getType()===_e&&1===u.index)this.snappedToVertex_=!0,this.createOrUpdateVertexFeature_(c);else{var _=e.getPixelFromCoordinate(l[0]),g=e.getPixelFromCoordinate(l[1]),y=kt(p,_),v=kt(p,g);f=Math.sqrt(Math.min(y,v)),this.snappedToVertex_=f<=this.pixelTolerance_,this.snappedToVertex_&&(c=y>v?l[1]:l[0]),this.createOrUpdateVertexFeature_(c);for(var m=1,C=h.length;m=0;--o)c=n((l=(i=p[o])[0]).feature),l.depth&&(c+="-"+l.depth.join("-")),c in f||(f[c]={}),0===i[1]?(f[c].right=l,f[c].index=l.index):1==i[1]&&(f[c].left=l,f[c].index=l.index+1);for(c in f){switch(u=f[c].right,a=f[c].left,(h=(s=f[c].index)-1)<0&&(h=0),t=e=(r=(l=void 0!==a?a:u).geometry).getCoordinates(),d=!1,r.getType()){case pe:e[l.depth[0]].length>2&&(e[l.depth[0]].splice(s,1),d=!0);break;case he:e.length>2&&(e.splice(s,1),d=!0);break;case fe:t=t[l.depth[1]];case le:(t=t[l.depth[0]]).length>4&&(s==t.length-1&&(s=0),t.splice(s,1),d=!0,0===s&&(t.pop(),t.push(t[0]),h=t.length-1))}if(d){this.setGeometryCoordinates_(r,e);var _=[];if(void 0!==a&&(this.rBush_.remove(a),_.push(a.segment[0])),void 0!==u&&(this.rBush_.remove(u),_.push(u.segment[1])),void 0!==a&&void 0!==u){var g={depth:l.depth,feature:l.feature,geometry:l.geometry,index:h,segment:_};this.rBush_.insert(Yt(g.segment),g)}this.updateSegmentIndices_(r,s,l.depth,-1),this.vertexFeature_&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),p.length=0}}return d},e.prototype.setGeometryCoordinates_=function(t,e){this.changingFeature_=!0,t.setCoordinates(e),this.changingFeature_=!1},e.prototype.updateSegmentIndices_=function(t,e,i,n){this.rBush_.forEachInExtent(t.getExtent(),(function(r){r.geometry===t&&(void 0===i||void 0===r.depth||function(t,e){var i=t.length;if(i!==e.length)return!1;for(var n=0;ne&&(r.index+=n)}))},e}(Ui);var or=biigle.$require("events"),sr=biigle.$require("messages").handleErrorResponse,ar=biigle.$require("annotations.components.settingsTabPlugins");const hr=function(t,e,i,n,r,o,s,a){var h,u="function"==typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=i,u._compiled=!0),n&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),s?(h=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),r&&r.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(s)},u._ssrRegister=h):r&&(h=a?function(){r.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:r),h)if(u.functional){u._injectStyles=h;var l=u.render;u.render=function(t,e){return h.call(e),l(t,e)}}else{var c=u.beforeCreate;u.beforeCreate=c?[].concat(c,h):[h]}return{exports:t,options:u}}({props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null,volumeId:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},layer:function(){return new xn({source:new Yn({features:new _t}),style:[new vn({stroke:new pn({color:"white",width:4}),image:new rt({radius:6,fill:new ln({color:"#666666"}),stroke:new pn({color:"white",width:2,lineDash:[2]})})}),new vn({stroke:new pn({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new Jn({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(t,e){t.length>1&&(t=[t[0],[t[0][0],t[1][1]],t[1],[t[1][0],t[0][1]]]);var i=e;return i?i.setCoordinates([t]):i=new jn([t]),i}})},modifyInteraction:function(){return new rr({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:Pt})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){var t=this;if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),$n.delete({id:this.volumeId}).then((function(){return t.exportArea=null})).catch((function(t){e.addFeature(i),sr(t)}))}},updateCurrentImage:function(t,e){this.currentImage=e},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var t=this.currentImage.tiled?0:this.height,e=new jn([[[this.exportArea[0],t-this.exportArea[1]],[this.exportArea[0],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[1]]]]);this.layer.getSource().addFeature(new gt({geometry:e}))}},handleModifyend:function(t){this.updateExportArea(t.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(t){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),this.updateExportArea(t.feature).catch((function(){e.clear(),i&&e.addFeature(i)}))},updateExportArea:function(t){var e=this,i=t.getGeometry().getCoordinates()[0],n=this.currentImage.tiled?0:this.height;i=[i[0][0],n-i[0][1],i[2][0],n-i[2][1]].map(Math.round);var r=$n.save({id:this.volumeId},{coordinates:i}).then((function(){return e.exportArea=i}));return r.catch(sr),r},extendMap:function(t){t.addLayer(this.layer),t.addInteraction(this.drawInteraction),t.addInteraction(this.modifyInteraction)}},watch:{opacity:function(t){t<1?this.settings.set("exportAreaOpacity",t):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(t)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.volumeId=biigle.$require("annotations.volumeId"),this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend),or.$on("images.change",this.updateCurrentImage),or.$on("annotations.map.init",this.extendMap)}},undefined,undefined,!1,null,null,null).exports;ar&&(ar.exportArea=hr)})()})(); \ No newline at end of file diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index d708bb4db..a71d8fed9 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -!function(e){var t={};function r(s){if(t[s])return t[s].exports;var n=t[s]={i:s,l:!1,exports:{}};return e[s].call(n.exports,n,n.exports,r),n.l=!0,n.exports}r.m=e,r.c=t,r.d=function(e,t,s){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:s})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(r.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)r.d(s,n,function(t){return e[t]}.bind(null,n));return s},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="/",r(r.s=0)}({0:function(e,t,r){r("Or9D"),e.exports=r("zcrr")},"KHd+":function(e,t,r){"use strict";function s(e,t,r,s,n,a,i,o){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=r,u._compiled=!0),s&&(u.functional=!0),a&&(u._scopeId="data-v-"+a),i?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),n&&n.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(i)},u._ssrRegister=l):n&&(l=o?function(){n.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:n),l)if(u.functional){u._injectStyles=l;var c=u.render;u.render=function(e,t){return l.call(t),c(e,t)}}else{var p=u.beforeCreate;u.beforeCreate=p?[].concat(p,l):[l]}return{exports:e,options:u}}r.d(t,"a",(function(){return s}))},Or9D:function(e,t,r){"use strict";r.r(t);var s=biigle.$require("messages").handleErrorResponse,n=biigle.$require("labelTrees.components.labelTrees"),a={mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:n},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,separate_users:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var r=t.name.split("\\");e.hasOwnProperty(r[0])||(e[r[0]]=[]),e[r[0]].push(r[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(r){t[r]=e.options[r]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(e){422===e.status?e.data.hasOwnProperty("errors")?this.errors=e.data.errors:this.errors=e.data:s(e)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))},"options.separate_label_trees":function(e){e&&(this.options.separate_users=!1)},"options.separate_users":function(e){e&&(this.options.separate_label_trees=!1)}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0];var e=biigle.$require("reports.labelTrees");e.forEach((function(e){e.labels.forEach((function(e){e.selected=!1}))})),this.labelTrees=e}},i=r("KHd+"),o=Object(i.a)(a,void 0,void 0,!1,null,null,null).exports,l=Vue.resource("/api/v1/projects{/id}/reports"),u={mixins:[o],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,l)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},c=Object(i.a)(u,void 0,void 0,!1,null,null,null).exports,p=Vue.resource("/api/v1/volumes{/id}/reports"),d={mixins:[o],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,p)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},f=Object(i.a)(d,void 0,void 0,!1,null,null,null).exports;biigle.$mount("project-report-form",c),biigle.$mount("volume-report-form",f)},zcrr:function(e,t){}}); \ No newline at end of file +(()=>{"use strict";var e,t={977:()=>{var e=biigle.$require("messages").handleErrorResponse,t=biigle.$require("labelTrees.components.labelTrees");function s(e,t,s,r,n,a,i,o){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=s,u._compiled=!0),r&&(u.functional=!0),a&&(u._scopeId="data-v-"+a),i?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),n&&n.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(i)},u._ssrRegister=l):n&&(l=o?function(){n.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:n),l)if(u.functional){u._injectStyles=l;var p=u.render;u.render=function(e,t){return l.call(t),p(e,t)}}else{var c=u.beforeCreate;u.beforeCreate=c?[].concat(c,l):[l]}return{exports:e,options:u}}const r=s({mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:t},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,separate_users:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var s=t.name.split("\\");e.hasOwnProperty(s[0])||(e[s[0]]=[]),e[s[0]].push(s[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(s){t[s]=e.options[s]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(t){422===t.status?t.data.hasOwnProperty("errors")?this.errors=t.data.errors:this.errors=t.data:e(t)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))},"options.separate_label_trees":function(e){e&&(this.options.separate_users=!1)},"options.separate_users":function(e){e&&(this.options.separate_label_trees=!1)}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0];var e=biigle.$require("reports.labelTrees");e.forEach((function(e){e.labels.forEach((function(e){e.selected=!1}))})),this.labelTrees=e}},undefined,undefined,!1,null,null,null).exports,n=Vue.resource("/api/v1/projects{/id}/reports");const a=s({mixins:[r],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,n)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},undefined,undefined,!1,null,null,null).exports,i=Vue.resource("/api/v1/volumes{/id}/reports");const o=s({mixins:[r],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,i)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},undefined,undefined,!1,null,null,null).exports;biigle.$mount("project-report-form",a),biigle.$mount("volume-report-form",o)},608:()=>{}},s={};function r(e){var n=s[e];if(void 0!==n)return n.exports;var a=s[e]={exports:{}};return t[e](a,a.exports,r),a.exports}r.m=t,e=[],r.O=(t,s,n,a)=>{if(!s){var i=1/0;for(u=0;u=a)&&Object.keys(r.O).every((e=>r.O[e](s[l])))?s.splice(l--,1):(o=!1,a0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[s,n,a]},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={355:0,392:0};r.O.j=t=>0===e[t];var t=(t,s)=>{var n,a,[i,o,l]=s,u=0;for(n in o)r.o(o,n)&&(r.m[n]=o[n]);for(l&&l(r),t&&t(s);ur(977)));var n=r.O(void 0,[392],(()=>r(608)));n=r.O(n)})(); \ No newline at end of file diff --git a/src/public/assets/styles/main.css b/src/public/assets/styles/main.css index b876bf18d..cedb8ade2 100644 --- a/src/public/assets/styles/main.css +++ b/src/public/assets/styles/main.css @@ -1 +1 @@ -.request-labels-well{height:500px} \ No newline at end of file +.request-labels-well{height:500px} diff --git a/src/public/mix-manifest.json b/src/public/mix-manifest.json index b52ed7ad1..c96ab78af 100644 --- a/src/public/mix-manifest.json +++ b/src/public/mix-manifest.json @@ -1,5 +1,5 @@ { - "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=30a9a1a72b6179458798", - "/assets/scripts/main.js": "/assets/scripts/main.js?id=48496487fff324e8cbd6", - "/assets/styles/main.css": "/assets/styles/main.css?id=9d45536e01d0a0b3c70b" + "/assets/scripts/main.js": "/assets/scripts/main.js?id=3b3918253ea9fd5377c5", + "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=700f3dd4e7b6a390cec3", + "/assets/styles/main.css": "/assets/styles/main.css?id=08891fcd37d185b1157e" } diff --git a/webpack.mix.js b/webpack.mix.js index 0775a8c2d..f3dffc9ce 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -17,8 +17,8 @@ mix.options({processCssUrls: false}); mix.setPublicPath('src/public'); -mix.js('src/resources/assets/js/reports/main.js', 'assets/scripts') - .js('src/resources/assets/js/annotations/annotations.js', 'assets/scripts') +mix.js('src/resources/assets/js/reports/main.js', 'assets/scripts').vue() + .js('src/resources/assets/js/annotations/annotations.js', 'assets/scripts').vue() .sass('src/resources/assets/sass/main.scss', 'assets/styles') .publish({ provider: 'Biigle\\Modules\\Reports\\ReportsServiceProvider', From c09f99d37abfb58f37afda5827f06127c5b8f156 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 30 Apr 2021 15:03:45 +0200 Subject: [PATCH 271/407] Apply CS fixes --- src/Http/Requests/StoreProjectReport.php | 2 +- src/Support/Reports/Projects/ProjectReportGenerator.php | 1 - src/Support/Reports/ReportGenerator.php | 4 ++-- .../ImageAnnotations/AnnotationLocationReportGenerator.php | 4 ++-- .../Reports/Volumes/ImageAnnotations/BasicReportGenerator.php | 2 +- .../Reports/Volumes/ImageAnnotations/CsvReportGenerator.php | 2 +- .../Volumes/ImageAnnotations/ExtendedReportGenerator.php | 2 +- .../Reports/Volumes/ImageAnnotations/FullReportGenerator.php | 2 +- .../Volumes/ImageAnnotations/ImageLocationReportGenerator.php | 2 +- .../Reports/Volumes/ImageLabels/BasicReportGenerator.php | 2 +- .../Reports/Volumes/ImageLabels/CsvReportGenerator.php | 2 +- .../Volumes/ImageLabels/ImageLocationReportGenerator.php | 2 +- .../Reports/Volumes/VideoAnnotations/CsvReportGenerator.php | 2 +- .../Reports/Volumes/VideoLabels/CsvReportGenerator.php | 2 +- .../AnnotationLocationReportGeneratorTest.php | 2 +- .../ImageAnnotations/ImageLocationReportGeneratorTest.php | 2 +- .../Projects/ImageLabels/ImageLocationReportGeneratorTest.php | 2 +- tests/Support/Reports/ReportGeneratorTest.php | 2 +- .../Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php | 4 ++-- 19 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/Http/Requests/StoreProjectReport.php b/src/Http/Requests/StoreProjectReport.php index 7d6efb9ea..aefe87340 100644 --- a/src/Http/Requests/StoreProjectReport.php +++ b/src/Http/Requests/StoreProjectReport.php @@ -2,8 +2,8 @@ namespace Biigle\Modules\Reports\Http\Requests; -use Biigle\Modules\Reports\ReportType; use Biigle\Image; +use Biigle\Modules\Reports\ReportType; use Biigle\Project; use Illuminate\Validation\Rule; diff --git a/src/Support/Reports/Projects/ProjectReportGenerator.php b/src/Support/Reports/Projects/ProjectReportGenerator.php index 0044436d8..eeb4ad86d 100644 --- a/src/Support/Reports/Projects/ProjectReportGenerator.php +++ b/src/Support/Reports/Projects/ProjectReportGenerator.php @@ -60,5 +60,4 @@ protected function getReportGenerator() { return new $this->reportClass($this->options); } - } diff --git a/src/Support/Reports/ReportGenerator.php b/src/Support/Reports/ReportGenerator.php index b11732338..e8a7910e4 100644 --- a/src/Support/Reports/ReportGenerator.php +++ b/src/Support/Reports/ReportGenerator.php @@ -3,10 +3,10 @@ namespace Biigle\Modules\Reports\Support\Reports; use Biigle\Label; -use Biigle\Video; -use Biigle\Volume; use Biigle\Modules\Reports\ReportType; use Biigle\Modules\Reports\Support\File as FileHelper; +use Biigle\Video; +use Biigle\Volume; use Exception; use File; use ReflectionClass; diff --git a/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php index 98864ebcf..7174b0759 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php @@ -223,8 +223,8 @@ protected function estimateAnnotationPosition($item) // The ratio of meter per pixel. $scalingFactor = $imageWidthInM / $item->width; - $rotatedOffsetInM = array_map(function($point) use ($scalingFactor) { - return [ + $rotatedOffsetInM = array_map(function ($point) use ($scalingFactor) { + return [ $point[0] * $scalingFactor, $point[1] * $scalingFactor, ]; diff --git a/src/Support/Reports/Volumes/ImageAnnotations/BasicReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/BasicReportGenerator.php index 059169cdf..cf88cf4f1 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/BasicReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/BasicReportGenerator.php @@ -3,8 +3,8 @@ namespace Biigle\Modules\Reports\Support\Reports\Volumes\ImageAnnotations; use Biigle\LabelTree; -use Biigle\User; use Biigle\Modules\Reports\Support\CsvFile; +use Biigle\User; use DB; class BasicReportGenerator extends AnnotationReportGenerator diff --git a/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php index efcb48277..59e07b5b8 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php @@ -3,9 +3,9 @@ namespace Biigle\Modules\Reports\Support\Reports\Volumes\ImageAnnotations; use Biigle\LabelTree; -use Biigle\User; use Biigle\Modules\Reports\Support\CsvFile; use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; +use Biigle\User; use DB; class CsvReportGenerator extends AnnotationReportGenerator diff --git a/src/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGenerator.php index 273991d4e..fbfdb1e0c 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGenerator.php @@ -3,8 +3,8 @@ namespace Biigle\Modules\Reports\Support\Reports\Volumes\ImageAnnotations; use Biigle\LabelTree; -use Biigle\User; use Biigle\Modules\Reports\Support\CsvFile; +use Biigle\User; class ExtendedReportGenerator extends AnnotationReportGenerator { diff --git a/src/Support/Reports/Volumes/ImageAnnotations/FullReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/FullReportGenerator.php index b462af115..2543b4f38 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/FullReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/FullReportGenerator.php @@ -4,8 +4,8 @@ use Arr; use Biigle\LabelTree; -use Biigle\User; use Biigle\Modules\Reports\Support\CsvFile; +use Biigle\User; use DB; class FullReportGenerator extends AnnotationReportGenerator diff --git a/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php index c17d45637..9e91d6a55 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php @@ -4,9 +4,9 @@ use Biigle\ImageAnnotationLabel; use Biigle\LabelTree; -use Biigle\User; use Biigle\Modules\Reports\Support\File; use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; +use Biigle\User; use DB; use GeoJson\Feature\Feature; use GeoJson\Feature\FeatureCollection; diff --git a/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php index 0f123707a..4a9f9e5ba 100644 --- a/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php @@ -3,9 +3,9 @@ namespace Biigle\Modules\Reports\Support\Reports\Volumes\ImageLabels; use Biigle\LabelTree; -use Biigle\User; use Biigle\Modules\Reports\Support\CsvFile; use Biigle\Modules\Reports\Support\Reports\Volumes\VolumeReportGenerator; +use Biigle\User; use DB; class BasicReportGenerator extends VolumeReportGenerator diff --git a/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php index 6d0806788..6496d601b 100644 --- a/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php @@ -3,10 +3,10 @@ namespace Biigle\Modules\Reports\Support\Reports\Volumes\ImageLabels; use Biigle\LabelTree; -use Biigle\User; use Biigle\Modules\Reports\Support\CsvFile; use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; use Biigle\Modules\Reports\Support\Reports\Volumes\VolumeReportGenerator; +use Biigle\User; use DB; class CsvReportGenerator extends VolumeReportGenerator diff --git a/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php index 98ca6b229..9c29d60d1 100644 --- a/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php @@ -4,10 +4,10 @@ use Biigle\ImageLabel; use Biigle\LabelTree; -use Biigle\User; use Biigle\Modules\Reports\Support\File; use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; use Biigle\Modules\Reports\Support\Reports\Volumes\VolumeReportGenerator; +use Biigle\User; use DB; use GeoJson\Feature\Feature; use GeoJson\Feature\FeatureCollection; diff --git a/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php b/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php index 5d75ffcc4..7965f681a 100644 --- a/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php @@ -4,10 +4,10 @@ use Biigle\Label; use Biigle\LabelTree; -use Biigle\User; use Biigle\Modules\Reports\Support\CsvFile; use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; use Biigle\Modules\Reports\Support\Reports\Volumes\VolumeReportGenerator; +use Biigle\User; use DB; use Illuminate\Support\Str; diff --git a/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php b/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php index bf043d47d..eefef8ad6 100644 --- a/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php @@ -3,10 +3,10 @@ namespace Biigle\Modules\Reports\Support\Reports\Volumes\VideoLabels; use Biigle\LabelTree; -use Biigle\User; use Biigle\Modules\Reports\Support\CsvFile; use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; use Biigle\Modules\Reports\Support\Reports\Volumes\VolumeReportGenerator; +use Biigle\User; use DB; class CsvReportGenerator extends VolumeReportGenerator diff --git a/tests/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGeneratorTest.php b/tests/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGeneratorTest.php index 060f2580b..93355315f 100644 --- a/tests/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGeneratorTest.php @@ -3,10 +3,10 @@ namespace Biigle\Tests\Modules\Reports\Support\Reports\Projects\ImageAnnotations; use Biigle\Modules\Reports\Support\Reports\Projects\ImageAnnotations\AnnotationLocationReportGenerator; -use TestCase; use Biigle\Tests\ImageTest; use Biigle\Tests\ProjectTest; use Biigle\Tests\VolumeTest; +use TestCase; class AnnotationLocationReportGeneratorTest extends TestCase { diff --git a/tests/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGeneratorTest.php b/tests/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGeneratorTest.php index 37fb7125b..41d709157 100644 --- a/tests/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGeneratorTest.php @@ -3,10 +3,10 @@ namespace Biigle\Tests\Modules\Reports\Support\Reports\Projects\ImageAnnotations; use Biigle\Modules\Reports\Support\Reports\Projects\ImageAnnotations\ImageLocationReportGenerator; -use TestCase; use Biigle\Tests\ImageTest; use Biigle\Tests\ProjectTest; use Biigle\Tests\VolumeTest; +use TestCase; class ImageLocationReportGeneratorTest extends TestCase { diff --git a/tests/Support/Reports/Projects/ImageLabels/ImageLocationReportGeneratorTest.php b/tests/Support/Reports/Projects/ImageLabels/ImageLocationReportGeneratorTest.php index 19dc0380c..381ee6585 100644 --- a/tests/Support/Reports/Projects/ImageLabels/ImageLocationReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/ImageLabels/ImageLocationReportGeneratorTest.php @@ -3,10 +3,10 @@ namespace Biigle\Tests\Modules\Reports\Support\Reports\Projects\ImageLabels; use Biigle\Modules\Reports\Support\Reports\Projects\ImageLabels\ImageLocationReportGenerator; -use TestCase; use Biigle\Tests\ImageTest; use Biigle\Tests\ProjectTest; use Biigle\Tests\VolumeTest; +use TestCase; class ImageLocationReportGeneratorTest extends TestCase { diff --git a/tests/Support/Reports/ReportGeneratorTest.php b/tests/Support/Reports/ReportGeneratorTest.php index f4cc5a01f..783d274e1 100644 --- a/tests/Support/Reports/ReportGeneratorTest.php +++ b/tests/Support/Reports/ReportGeneratorTest.php @@ -5,9 +5,9 @@ use Biigle\Modules\Reports\ReportType; use Biigle\Modules\Reports\Support\Reports\ReportGenerator; use Biigle\Modules\Reports\Support\Reports\Volumes\ImageAnnotations\BasicReportGenerator; +use Biigle\Project; use Biigle\Tests\LabelTest; use Biigle\Tests\VolumeTest; -use Biigle\Project; use Biigle\Video; use Biigle\Volume; use Exception; diff --git a/tests/Support/Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php b/tests/Support/Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php index ff3226f3c..13ba62f91 100644 --- a/tests/Support/Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php @@ -5,11 +5,11 @@ use App; use Biigle\Modules\Reports\Support\CsvFile; use Biigle\Modules\Reports\Support\Reports\Volumes\VideoLabels\CsvReportGenerator; -use Biigle\Tests\VideoLabelTest; -use Biigle\Tests\VideoTest; use Biigle\Tests\LabelTest; use Biigle\Tests\LabelTreeTest; use Biigle\Tests\UserTest; +use Biigle\Tests\VideoLabelTest; +use Biigle\Tests\VideoTest; use Biigle\Tests\VolumeTest; use Mockery; use TestCase; From 173b8c0c96b4f2b1c636db6d0bcb0e635cba9da5 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 7 May 2021 10:52:30 +0200 Subject: [PATCH 272/407] Update .eslintrc --- .eslintrc.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index b3cfa6f9f..e230a7454 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -21,7 +21,6 @@ }, "globals": { "biigle": "readonly", - "Vue": "readonly", - "VueStrap": "readonly" + "Vue": "readonly" } } From 8c4187349ed1bd6dacf6a908d89e6ef8c67f8df0 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 18 May 2021 12:18:25 +0200 Subject: [PATCH 273/407] Update JS dependencies --- package-lock.json | 3057 ++++++++++++++--------------- src/public/assets/scripts/main.js | 2 +- src/public/mix-manifest.json | 2 +- 3 files changed, 1432 insertions(+), 1629 deletions(-) diff --git a/package-lock.json b/package-lock.json index b9c2f37b8..8c204e510 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,26 +34,26 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", - "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", "dev": true }, "node_modules/@babel/core": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.14.tgz", - "integrity": "sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.13", + "@babel/generator": "^7.14.3", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.3", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.13", - "@babel/types": "^7.13.14", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -88,12 +88,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", "dev": true, "dependencies": { - "@babel/types": "^7.13.0", + "@babel/types": "^7.14.2", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -118,12 +118,12 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", - "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.12", + "@babel/compat-data": "^7.13.15", "@babel/helper-validator-option": "^7.12.17", "browserslist": "^4.14.5", "semver": "^6.3.0" @@ -142,15 +142,16 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz", - "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz", + "integrity": "sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-replace-supers": "^7.14.3", "@babel/helper-split-export-declaration": "^7.12.13" }, "peerDependencies": { @@ -158,9 +159,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", - "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", + "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.12.13", @@ -171,9 +172,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", - "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", + "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.13.0", @@ -208,14 +209,14 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", "dev": true, "dependencies": { "@babel/helper-get-function-arity": "^7.12.13", "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.2" } }, "node_modules/@babel/helper-get-function-arity": { @@ -228,13 +229,13 @@ } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", - "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", "dev": true, "dependencies": { - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" } }, "node_modules/@babel/helper-member-expression-to-functions": { @@ -256,19 +257,19 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", - "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", + "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.13.12", "@babel/helper-replace-supers": "^7.13.12", "@babel/helper-simple-access": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.13", - "@babel/types": "^7.13.14" + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" } }, "node_modules/@babel/helper-optimise-call-expression": { @@ -298,15 +299,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", + "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", "dev": true, "dependencies": { "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" } }, "node_modules/@babel/helper-simple-access": { @@ -337,9 +338,9 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", "dev": true }, "node_modules/@babel/helper-validator-option": { @@ -361,23 +362,23 @@ } }, "node_modules/@babel/helpers": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", - "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, "dependencies": { "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "node_modules/@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" } @@ -445,9 +446,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", + "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -471,9 +472,9 @@ } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", - "integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", + "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", @@ -497,10 +498,24 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", + "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.14.3", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-class-static-block": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", - "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", + "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", @@ -511,12 +526,12 @@ } }, "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", - "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", + "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "peerDependencies": { @@ -524,9 +539,9 @@ } }, "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", - "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", + "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", @@ -537,9 +552,9 @@ } }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", - "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", + "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", @@ -550,9 +565,9 @@ } }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", - "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", + "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", @@ -563,12 +578,12 @@ } }, "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", - "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", + "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "peerDependencies": { @@ -576,25 +591,25 @@ } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", - "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz", + "integrity": "sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.8", - "@babel/helper-compilation-targets": "^7.13.8", + "@babel/compat-data": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.13.0" + "@babel/plugin-transform-parameters": "^7.14.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", - "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", + "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", @@ -605,9 +620,9 @@ } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", - "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", + "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.13.0", @@ -631,6 +646,21 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-create-class-features-plugin": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", @@ -671,6 +701,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", + "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -779,6 +821,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.13.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-top-level-await": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", @@ -830,28 +884,28 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz", - "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz", + "integrity": "sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.13.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", - "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz", + "integrity": "sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", + "@babel/helper-function-name": "^7.14.2", "@babel/helper-optimise-call-expression": "^7.12.13", "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13", "globals": "^11.1.0" }, @@ -881,9 +935,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", - "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", + "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.13.0" @@ -980,12 +1034,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", - "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", + "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.2", "@babel/helper-plugin-utils": "^7.13.0", "babel-plugin-dynamic-import-node": "^2.3.3" }, @@ -994,14 +1048,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", - "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-simple-access": "^7.13.12", "babel-plugin-dynamic-import-node": "^2.3.3" }, "peerDependencies": { @@ -1025,12 +1079,12 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", - "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0" }, "peerDependencies": { @@ -1075,9 +1129,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", - "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", + "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.13.0" @@ -1099,9 +1153,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz", - "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", "dev": true, "dependencies": { "regenerator-transform": "^0.14.2" @@ -1123,16 +1177,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.10.tgz", - "integrity": "sha512-Y5k8ipgfvz5d/76tx7JYbKQTcgFSU6VgJ3kKQv4zGTKr+a9T/KBvfRvGtSFgKDQGt/DBykQixV0vNWKIdzWErA==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz", + "integrity": "sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-module-imports": "^7.13.12", "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.1.4", - "babel-plugin-polyfill-corejs3": "^0.1.3", - "babel-plugin-polyfill-regenerator": "^0.1.2", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", "semver": "^6.3.0" }, "peerDependencies": { @@ -1235,31 +1289,34 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.12.tgz", - "integrity": "sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.2.tgz", + "integrity": "sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.12", - "@babel/helper-compilation-targets": "^7.13.10", + "@babel/compat-data": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-validator-option": "^7.12.17", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.13.8", + "@babel/plugin-proposal-async-generator-functions": "^7.14.2", "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-dynamic-import": "^7.13.8", - "@babel/plugin-proposal-export-namespace-from": "^7.12.13", - "@babel/plugin-proposal-json-strings": "^7.13.8", - "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-numeric-separator": "^7.12.13", - "@babel/plugin-proposal-object-rest-spread": "^7.13.8", - "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-class-static-block": "^7.13.11", + "@babel/plugin-proposal-dynamic-import": "^7.14.2", + "@babel/plugin-proposal-export-namespace-from": "^7.14.2", + "@babel/plugin-proposal-json-strings": "^7.14.2", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", + "@babel/plugin-proposal-numeric-separator": "^7.14.2", + "@babel/plugin-proposal-object-rest-spread": "^7.14.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", + "@babel/plugin-proposal-optional-chaining": "^7.14.2", "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-private-property-in-object": "^7.14.0", "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.12.13", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", @@ -1269,14 +1326,15 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0", "@babel/plugin-syntax-top-level-await": "^7.12.13", "@babel/plugin-transform-arrow-functions": "^7.13.0", "@babel/plugin-transform-async-to-generator": "^7.13.0", "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.12.13", - "@babel/plugin-transform-classes": "^7.13.0", + "@babel/plugin-transform-block-scoping": "^7.14.2", + "@babel/plugin-transform-classes": "^7.14.2", "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.17", "@babel/plugin-transform-dotall-regex": "^7.12.13", "@babel/plugin-transform-duplicate-keys": "^7.12.13", "@babel/plugin-transform-exponentiation-operator": "^7.12.13", @@ -1284,16 +1342,16 @@ "@babel/plugin-transform-function-name": "^7.12.13", "@babel/plugin-transform-literals": "^7.12.13", "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.13.0", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/plugin-transform-modules-amd": "^7.14.2", + "@babel/plugin-transform-modules-commonjs": "^7.14.0", "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.13.0", + "@babel/plugin-transform-modules-umd": "^7.14.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", "@babel/plugin-transform-new-target": "^7.12.13", "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.13.0", + "@babel/plugin-transform-parameters": "^7.14.2", "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", "@babel/plugin-transform-reserved-words": "^7.12.13", "@babel/plugin-transform-shorthand-properties": "^7.12.13", "@babel/plugin-transform-spread": "^7.13.0", @@ -1303,10 +1361,10 @@ "@babel/plugin-transform-unicode-escapes": "^7.12.13", "@babel/plugin-transform-unicode-regex": "^7.12.13", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.13.12", - "babel-plugin-polyfill-corejs2": "^0.1.4", - "babel-plugin-polyfill-corejs3": "^0.1.3", - "babel-plugin-polyfill-regenerator": "^0.1.2", + "@babel/types": "^7.14.2", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", "core-js-compat": "^3.9.0", "semver": "^6.3.0" }, @@ -1340,9 +1398,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", - "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.4" @@ -1369,17 +1427,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-function-name": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", "debug": "^4.1.0", "globals": "^11.1.0" } @@ -1403,13 +1461,12 @@ } }, "node_modules/@babel/types": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", - "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", + "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.0", "to-fast-properties": "^2.0.0" } }, @@ -1430,18 +1487,18 @@ } }, "node_modules/@discoveryjs/json-ext": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", - "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", + "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", "dev": true, "engines": { "node": ">=10.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", - "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -1699,60 +1756,45 @@ "polygon-clipping": "^0.15.2" } }, - "node_modules/@types/babel-core": { - "version": "6.25.6", - "resolved": "https://registry.npmjs.org/@types/babel-core/-/babel-core-6.25.6.tgz", - "integrity": "sha512-OzYuLL6Lw0wpE8qXFIuyS0GsagzCr3beo/+AIttM7slM9cUhbgHjU3oWvgVE+uOhcZYS4NesBilF2iZj3gM4LQ==", - "dev": true, - "dependencies": { - "@types/babel-generator": "*", - "@types/babel-template": "*", - "@types/babel-traverse": "*", - "@types/babel-types": "*", - "@types/babylon": "*" - } - }, - "node_modules/@types/babel-generator": { - "version": "6.25.3", - "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.3.tgz", - "integrity": "sha512-pGgnuxVddKcYIc+VJkRDop7gxLhqclNKBdlsm/5Vp8d+37pQkkDK7fef8d9YYImRzw9xcojEPc18pUYnbxmjqA==", + "node_modules/@types/babel__core": { + "version": "7.1.14", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", + "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", "dev": true, "dependencies": { - "@types/babel-types": "*" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/@types/babel-template": { - "version": "6.25.2", - "resolved": "https://registry.npmjs.org/@types/babel-template/-/babel-template-6.25.2.tgz", - "integrity": "sha512-QKtDQRJmAz3Y1HSxfMl0syIHebMc/NnOeH/8qeD0zjgU2juD0uyC922biMxCy5xjTNvHinigML2l8kxE8eEBmw==", + "node_modules/@types/babel__generator": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", "dev": true, "dependencies": { - "@types/babel-types": "*", - "@types/babylon": "*" + "@babel/types": "^7.0.0" } }, - "node_modules/@types/babel-traverse": { - "version": "6.25.5", - "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.5.tgz", - "integrity": "sha512-WrMbwmu+MWf8FiUMbmVOGkc7bHPzndUafn1CivMaBHthBBoo0VNIcYk1KV71UovYguhsNOwf3UF5oRmkkGOU3w==", + "node_modules/@types/babel__template": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", "dev": true, "dependencies": { - "@types/babel-types": "*" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/@types/babel-types": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.9.tgz", - "integrity": "sha512-qZLoYeXSTgQuK1h7QQS16hqLGdmqtRmN8w/rl3Au/l5x/zkHx+a4VHrHyBsi1I1vtK2oBHxSzKIu0R5p6spdOA==", - "dev": true - }, - "node_modules/@types/babylon": { - "version": "6.16.5", - "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz", - "integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==", + "node_modules/@types/babel__traverse": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", + "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", "dev": true, "dependencies": { - "@types/babel-types": "*" + "@babel/types": "^7.3.0" } }, "node_modules/@types/browser-sync": { @@ -1961,6 +2003,18 @@ "node": ">=0.10.0" } }, + "node_modules/@types/browser-sync/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@types/browser-sync/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -2050,9 +2104,9 @@ } }, "node_modules/@types/clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-ET0ldU/vpXecy5vO8JRIhtJWSrk1vzXdJcp3Bjf8bARZynl6vfkhEKY/A7njfNIRlmyTGuVFuqnD6I3tOGdXpQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-x8xEbfTtcv5uyQDrBXKg9Beo5QhTPqO4vM0uq4iU27/nhyRRWNEMKHjxvAb0WDvp2Mnt4Sw0jKmIi5yQF/k2Ag==", "dev": true, "dependencies": { "@types/node": "*", @@ -2179,9 +2233,9 @@ } }, "node_modules/@types/eslint": { - "version": "7.2.8", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.8.tgz", - "integrity": "sha512-RTKvBsfz0T8CKOGZMfuluDNyMFHnu5lvNr4hWEsQeHXH6FcmIDIozOyWMh36nLGMwVd5UFNXC2xztA8lln22MQ==", + "version": "7.2.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", + "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==", "dev": true, "dependencies": { "@types/estree": "*", @@ -2199,9 +2253,9 @@ } }, "node_modules/@types/estree": { - "version": "0.0.46", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz", - "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==", + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", + "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", "dev": true }, "node_modules/@types/glob": { @@ -2215,9 +2269,9 @@ } }, "node_modules/@types/http-proxy": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.5.tgz", - "integrity": "sha512-GNkDE7bTv6Sf8JbV2GksknKOsk7OznNYHSdrtvPJXO0qJ9odZig6IZKUi5RFGi6d1bf6dgIAe4uXi3DBc7069Q==", + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.6.tgz", + "integrity": "sha512-+qsjqR75S/ib0ig0R9WN+CDoZeOBU6F2XLewgC4KVgdXiNHiKKHFEMRHOrs5PbYE97D5vataw5wPj4KLYfUkuQ==", "dev": true, "dependencies": { "@types/node": "*" @@ -2297,9 +2351,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "14.14.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", - "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.0.tgz", + "integrity": "sha512-8/bnjSZD86ZfpBsDlCIkNXIvm+h6wi9g7IqL+kmFkQ+Wvu3JrasgLElfiPgoo8V8vVfnEi0QVS12gbl94h9YsQ==", "dev": true }, "node_modules/@types/parse-glob": { @@ -2609,9 +2663,9 @@ } }, "node_modules/@webpack-cli/configtest": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz", - "integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz", + "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==", "dev": true, "peerDependencies": { "webpack": "4.x.x || 5.x.x", @@ -2619,9 +2673,9 @@ } }, "node_modules/@webpack-cli/info": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz", - "integrity": "sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz", + "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==", "dev": true, "dependencies": { "envinfo": "^7.7.3" @@ -2631,9 +2685,9 @@ } }, "node_modules/@webpack-cli/serve": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz", - "integrity": "sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", + "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", "dev": true, "peerDependencies": { "webpack-cli": "4.x.x" @@ -2820,9 +2874,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -2874,12 +2928,6 @@ "node": ">=0.10.0" } }, - "node_modules/array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", - "dev": true - }, "node_modules/array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -3028,21 +3076,6 @@ "postcss": "^8.1.0" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", - "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", - "dev": true, - "dependencies": { - "array-filter": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/babel-loader": { "version": "8.2.2", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", @@ -3106,19 +3139,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/babel-merge": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/babel-merge/-/babel-merge-3.0.0.tgz", - "integrity": "sha512-eBOBtHnzt9xvnjpYNI5HmaPp/b2vMveE5XggzqHnQeHJ8mFIBrBv6WZEVIj5jJ2uwTItkqKo9gWzEEcBxEq0yw==", - "dev": true, - "dependencies": { - "deepmerge": "^2.2.1", - "object.omit": "^3.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, "node_modules/babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", @@ -3129,13 +3149,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz", - "integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", + "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.0", - "@babel/helper-define-polyfill-provider": "^0.1.5", + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.0", "semver": "^6.1.1" }, "peerDependencies": { @@ -3152,34 +3172,34 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", - "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", + "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.1.5", - "core-js-compat": "^3.8.1" + "@babel/helper-define-polyfill-provider": "^0.2.0", + "core-js-compat": "^3.9.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz", - "integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", + "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.1.5" + "@babel/helper-define-polyfill-provider": "^0.2.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "node_modules/base": { @@ -3517,16 +3537,16 @@ } }, "node_modules/browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", - "node-releases": "^1.1.70" + "node-releases": "^1.1.71" }, "bin": { "browserslist": "cli.js" @@ -3692,15 +3712,19 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001205", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001205.tgz", - "integrity": "sha512-TL1GrS5V6LElbitPazidkBMD9sa448bQDDLrumDqaggmKFcuU2JW1wTOHJPukAcOMtEmLcmDJEzfRrf+GjM0Og==", - "dev": true + "version": "1.0.30001228", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", + "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } }, "node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", @@ -3744,23 +3768,14 @@ } }, "node_modules/chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, "engines": { "node": ">=6.0" } }, - "node_modules/chrome-trace-event/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/ci-info": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", @@ -3793,15 +3808,15 @@ } }, "node_modules/clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz", + "integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==", "dev": true, "dependencies": { "source-map": "~0.6.0" }, "engines": { - "node": ">= 4.0" + "node": ">= 10.0" } }, "node_modules/clean-css/node_modules/source-map": { @@ -4028,12 +4043,12 @@ } }, "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 10" } }, "node_modules/commondir": { @@ -4223,12 +4238,12 @@ } }, "node_modules/core-js-compat": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.10.0.tgz", - "integrity": "sha512-9yVewub2MXNYyGvuLnMHcN1k9RkvB7/ofktpeKTIaASyB88YYqGzUnu0ywMMhJrDHOMiTjSHWGzR+i7Wb9Z1kQ==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz", + "integrity": "sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==", "dev": true, "dependencies": { - "browserslist": "^4.16.3", + "browserslist": "^4.16.6", "semver": "7.0.0" }, "funding": { @@ -4530,23 +4545,22 @@ } }, "node_modules/css-loader": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.0.tgz", - "integrity": "sha512-MfRo2MjEeLXMlUkeUwN71Vx5oc6EJnx5UQ4Yi9iUtYQvrPtwLUucYptz0hc6n++kdNcyF5olYBS4vPjJDAcLkw==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.4.tgz", + "integrity": "sha512-OFYGyINCKkdQsTrSYxzGSFnGS4gNjcXkKkQgWxK138jgnPt+lepxdjSZNc8sHAl5vP3DhsJUxufWIjOwI8PMMw==", "dev": true, "dependencies": { "camelcase": "^6.2.0", - "cssesc": "^3.0.0", "icss-utils": "^5.1.0", "loader-utils": "^2.0.0", - "postcss": "^8.2.8", + "postcss": "^8.2.10", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.1.0", "schema-utils": "^3.0.0", - "semver": "^7.3.4" + "semver": "^7.3.5" }, "engines": { "node": ">= 10.13.0" @@ -4692,13 +4706,13 @@ } }, "node_modules/cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", "dev": true, "dependencies": { "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", + "cssnano-preset-default": "^4.0.8", "is-resolvable": "^1.0.0", "postcss": "^7.0.0" }, @@ -4707,9 +4721,9 @@ } }, "node_modules/cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", "dev": true, "dependencies": { "css-declaration-sorter": "^4.0.1", @@ -4740,7 +4754,7 @@ "postcss-ordered-values": "^4.1.2", "postcss-reduce-initial": "^4.0.3", "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", + "postcss-svgo": "^4.0.3", "postcss-unique-selectors": "^4.0.1" }, "engines": { @@ -5193,15 +5207,6 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "node_modules/deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -5314,9 +5319,9 @@ "dev": true }, "node_modules/detect-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.5.tgz", - "integrity": "sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, "node_modules/diffie-hellman": { @@ -5386,13 +5391,13 @@ } }, "node_modules/dom-serializer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", - "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "dependencies": { "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", + "domhandler": "^4.2.0", "entities": "^2.0.0" }, "funding": { @@ -5400,12 +5405,12 @@ } }, "node_modules/dom-serializer/node_modules/domhandler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", - "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "dependencies": { - "domelementtype": "^2.1.0" + "domelementtype": "^2.2.0" }, "engines": { "node": ">= 4" @@ -5425,9 +5430,9 @@ } }, "node_modules/domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true, "funding": [ { @@ -5452,26 +5457,26 @@ } }, "node_modules/domutils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.0.tgz", - "integrity": "sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", + "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", "dev": true, "dependencies": { "dom-serializer": "^1.0.1", - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0" + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/domutils/node_modules/domhandler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", - "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "dependencies": { - "domelementtype": "^2.1.0" + "domelementtype": "^2.2.0" }, "engines": { "node": ">= 4" @@ -5503,12 +5508,12 @@ } }, "node_modules/dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/dotenv-expand": { @@ -5524,9 +5529,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.3.703", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.703.tgz", - "integrity": "sha512-SVBVhNB+4zPL+rvtWLw7PZQkw/Eqj1HQZs22xtcqW36+xoifzEOEEDEpkxSMfB6RFeSIOcG00w6z5mSqLr1Y6w==", + "version": "1.3.730", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.730.tgz", + "integrity": "sha512-1Tr3h09wXhmqXnvDyrRe6MFgTeU0ZXy3+rMJWTrOHh/HNesWwBBrKnMxRJWZ86dzs8qQdw2c7ZE1/qeGHygImA==", "dev": true }, "node_modules/elliptic": { @@ -5575,9 +5580,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", - "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -5609,9 +5614,9 @@ } }, "node_modules/envinfo": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz", - "integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -5739,13 +5744,13 @@ } }, "node_modules/eslint": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", - "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", + "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", + "@eslint/eslintrc": "^0.4.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -5793,9 +5798,9 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.8.0.tgz", - "integrity": "sha512-OGrnPz+PuYL2HmVyBHxm4mRjxW2kfFCQE6Hw9G6qOHs/Pcu0srOlCCW0FMa8SLzIEqxl8WuKoBSPcMnrjUG2vw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.9.0.tgz", + "integrity": "sha512-2Q0qQp5+5h+pZvJKCbG1/jCRUYrdgAz5BYKGyTlp2NU8mx09u3Hp7PsH6d5qef6ojuPoCXMnrbbDxeoplihrSw==", "dev": true, "dependencies": { "eslint-utils": "^2.1.0", @@ -5881,9 +5886,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, "engines": { "node": ">=10" @@ -6101,18 +6106,6 @@ "node": ">=0.8.x" } }, - "node_modules/eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", - "dev": true, - "dependencies": { - "original": "^1.0.0" - }, - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -6327,15 +6320,6 @@ "node": ">=0.10.0" } }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", @@ -6625,9 +6609,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", - "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", "dev": true, "funding": [ { @@ -6653,12 +6637,6 @@ "node": ">=0.10.0" } }, - "node_modules/foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, "node_modules/forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -6669,9 +6647,9 @@ } }, "node_modules/fraction.js": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz", - "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.0.tgz", + "integrity": "sha512-o9lSKpK0TDqDwTL24Hxqi6I99s942l6TYkfl6WvGWgLOIFz/YonSGKfiSeMadoiNvTfqnfOa9mjb5SGVbBK9/w==", "dev": true, "engines": { "node": "*" @@ -6714,9 +6692,9 @@ } }, "node_modules/fs-monkey": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.1.tgz", - "integrity": "sha512-fcSa+wyTqZa46iWweI7/ZiUfegOZl0SG8+dltIwFXo7+zYU9J9kpS3NB6pZcSlJdhvIwp81Adx2XhZorncxiaA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", "dev": true }, "node_modules/fs.realpath": { @@ -6801,9 +6779,9 @@ } }, "node_modules/get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "engines": { "node": ">=10" @@ -6822,9 +6800,9 @@ } }, "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -6860,9 +6838,9 @@ "dev": true }, "node_modules/globals": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.7.0.tgz", - "integrity": "sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA==", + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -7137,12 +7115,6 @@ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", "dev": true }, - "node_modules/html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, "node_modules/html-entities": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", @@ -7192,6 +7164,18 @@ "node": ">=6" } }, + "node_modules/html-minifier-terser/node_modules/clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, "node_modules/html-minifier-terser/node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -7294,13 +7278,12 @@ } }, "node_modules/http-proxy-middleware": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.1.0.tgz", - "integrity": "sha512-OnjU5vyVgcZVe2AjLJyMrk8YLNOC2lspCHirB5ldM+B/dwEfZ5bgVTrFyzE9R7xRWAP/i/FXtvIqKjTNEZBhBg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", + "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", "dev": true, "dependencies": { "@types/http-proxy": "^1.17.5", - "camelcase": "^6.2.0", "http-proxy": "^1.18.1", "is-glob": "^4.0.1", "is-plain-obj": "^3.0.0", @@ -7556,6 +7539,15 @@ "url": "https://github.com/sindresorhus/internal-ip?sponsor=1" } }, + "node_modules/internal-ip/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", @@ -7581,12 +7573,12 @@ } }, "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.0.tgz", + "integrity": "sha512-S54H9mIj0rbxRIyrDMEuuER86LdlgUg9FSeZ8duQb6CUG2iRrA36MYVQBSprTF/ZeAwvyQ5mDGuNvIPM0BIl3w==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 10" } }, "node_modules/is-absolute-url": { @@ -7643,9 +7635,9 @@ "dev": true }, "node_modules/is-bigint": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7664,12 +7656,12 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", "dev": true, "dependencies": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7711,9 +7703,9 @@ } }, "node_modules/is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -7747,9 +7739,9 @@ } }, "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", "engines": { "node": ">= 0.4" }, @@ -7790,9 +7782,9 @@ } }, "node_modules/is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, "bin": { "is-docker": "cli.js" @@ -7805,13 +7797,10 @@ } }, "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, "engines": { "node": ">=0.10.0" } @@ -7834,18 +7823,6 @@ "node": ">=8" } }, - "node_modules/is-generator-function": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz", - "integrity": "sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -7892,9 +7869,9 @@ } }, "node_modules/is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", "dev": true, "engines": { "node": ">= 0.4" @@ -7955,12 +7932,12 @@ } }, "node_modules/is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "dependencies": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7985,9 +7962,9 @@ } }, "node_modules/is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", "dev": true, "engines": { "node": ">= 0.4" @@ -7996,44 +7973,13 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "dev": true, - "dependencies": { - "html-comment-regex": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", - "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8153,12 +8099,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "node_modules/json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, "node_modules/json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -8220,9 +8160,9 @@ } }, "node_modules/laravel-mix": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.13.tgz", - "integrity": "sha512-2sFmYgX24dkKlQ3OX6363YHvjONnqt9uer0TcTxcZQmaRxrh1xcK/aJjhUiVYUNOjsg8OmEFzTDp4nokOpWVkQ==", + "version": "6.0.19", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.19.tgz", + "integrity": "sha512-SH//4h/bi2ff5hyBfwQ0DE0VfTkskGLU+a/l7HdmTz1F+cJdvakajziyBVRwa9U3+DyvZo9eo9Jgq1jdZWW3XQ==", "dev": true, "dependencies": { "@babel/core": "^7.12.3", @@ -8231,7 +8171,7 @@ "@babel/plugin-transform-runtime": "^7.12.1", "@babel/preset-env": "^7.12.1", "@babel/runtime": "^7.12.1", - "@types/babel-core": "^6.25.6", + "@types/babel__core": "^7.1.12", "@types/browser-sync": "^2.26.1", "@types/clean-css": "^4.2.2", "@types/cssnano": "^4.0.0", @@ -8241,16 +8181,15 @@ "@types/imagemin-svgo": "^8.0.0", "autoprefixer": "^10.0.1", "babel-loader": "^8.1.0", - "babel-merge": "^3.0.0", "chalk": "^4.1.0", "chokidar": "^3.4.3", - "clean-css": "^4.2.3", + "clean-css": "^4.2.3 || ^5.1.1", "cli-table3": "^0.6.0", "collect.js": "^4.28.4", - "commander": "^6.1.0", + "commander": "^7.1.0", "concat": "^1.0.3", "css-loader": "^5.0.0", - "cssnano": "^4.1.10", + "cssnano": "^4.1.11", "dotenv": "^8.2.0", "dotenv-expand": "^5.1.0", "file-loader": "^6.1.1", @@ -8264,14 +8203,16 @@ "mini-css-extract-plugin": "^1.1.0", "node-libs-browser": "^2.2.1", "postcss-load-config": "^3.0.0", - "postcss-loader": "^4.0.4", - "semver": "^5.7.1", + "postcss-loader": "^5.2.0", + "semver": "^7.3.4", + "strip-ansi": "^6.0.0", "style-loader": "^2.0.0", "terser": "^5.3.7", "terser-webpack-plugin": "^5.0.0", - "webpack": "^5.1.3", + "vue-style-loader": "^4.1.3", + "webpack": "^5.25.1", "webpack-cli": "^4.1.0", - "webpack-dev-server": "^4.0.0-beta.0", + "webpack-dev-server": "4.0.0-beta.2", "webpack-merge": "^5.2.0", "webpack-notifier": "^1.8.0", "webpackbar": "^5.0.0-3", @@ -8303,6 +8244,39 @@ "laravel-mix": "^4.0||^5.0||^6.0" } }, + "node_modules/laravel-mix/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/laravel-mix/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/laravel-mix/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -8375,12 +8349,6 @@ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -8476,9 +8444,9 @@ } }, "node_modules/martinez-polygon-clipping": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.7.0.tgz", - "integrity": "sha512-EBxKjlUqrVjzT1HRwJARaSwj66JZqEUl+JnqnrzHZLU4hd4XrCQWqShZx40264NR/pm5wIHRlNEaIrev44wvKA==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.7.1.tgz", + "integrity": "sha512-Xt5hOjAVkRoGN7kUb/0VmkxcG07Ja+OA3qU+7YcY2pAlJ78V1G181VTozHCXpzlj0paNBbcLno77mcGeGStI0A==", "dependencies": { "robust-predicates": "^2.0.4", "splaytree": "^0.1.4", @@ -8523,9 +8491,9 @@ } }, "node_modules/mem": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.0.tgz", - "integrity": "sha512-FIkgXo0kTi3XpvaznV5Muk6Y6w8SkdmRXcY7ZLonQesuYezp59UooLxAVBcGuN6PH2tXN84mR3vyzSc6oSMUfA==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", + "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", "dev": true, "dependencies": { "map-age-cleaner": "^0.1.3", @@ -8548,12 +8516,12 @@ } }, "node_modules/memfs": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.0.tgz", - "integrity": "sha512-f/xxz2TpdKv6uDn6GtHee8ivFyxwxmPuXatBb1FBwxYNuVpbM3k/Y1Z+vC0mH/dIXXrukYfe3qe5J32Dfjg93A==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz", + "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==", "dev": true, "dependencies": { - "fs-monkey": "1.0.1" + "fs-monkey": "1.0.3" }, "engines": { "node": ">= 4.0.0" @@ -8608,16 +8576,16 @@ } }, "node_modules/micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "dependencies": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" }, "engines": { - "node": ">=8" + "node": ">=8.6" } }, "node_modules/miller-rabin": { @@ -8652,21 +8620,21 @@ } }, "node_modules/mime-db": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", - "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", - "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", "dev": true, "dependencies": { - "mime-db": "1.46.0" + "mime-db": "1.47.0" }, "engines": { "node": ">= 0.6" @@ -8682,9 +8650,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.4.0.tgz", - "integrity": "sha512-DyQr5DhXXARKZoc4kwvCvD95kh69dUupfuKOmBUqZ4kBTmRaRZcU32lYu3cLd6nEGXhQ1l7LzZ3F/CjItaY6VQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", + "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", "dev": true, "dependencies": { "loader-utils": "^2.0.0", @@ -8745,6 +8713,18 @@ "node": ">=0.10.0" } }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", @@ -8790,9 +8770,9 @@ "optional": true }, "node_modules/nanoid": { - "version": "3.1.22", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz", - "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==", + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -8887,6 +8867,18 @@ "node": ">=0.10.0" } }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -9048,9 +9040,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", "dev": true }, "node_modules/normalize-path": { @@ -9146,9 +9138,9 @@ } }, "node_modules/object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9224,18 +9216,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.omit": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz", - "integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==", - "dev": true, - "dependencies": { - "is-extendable": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -9350,15 +9330,6 @@ "node": ">= 0.8.0" } }, - "node_modules/original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "dependencies": { - "url-parse": "^1.4.3" - } - }, "node_modules/os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -9641,9 +9612,9 @@ } }, "node_modules/pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "dependencies": { "create-hash": "^1.1.2", @@ -9657,9 +9628,9 @@ } }, "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", "dev": true, "engines": { "node": ">=8.6" @@ -9686,9 +9657,9 @@ } }, "node_modules/polygon-clipping": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.2.tgz", - "integrity": "sha512-qsUFQSY4nA++1/b76dy0BJGwL0FZAk05Y4hZprctLIhAddE8KUUr3TxIF4sAxIQtjH9xvaBe3raaRQrcSI4wlA==", + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.3.tgz", + "integrity": "sha512-ho0Xx5DLkgxRx/+n4O74XyJ67DcyN3Tu9bGYKsnTukGAW6ssnuak6Mwcyb1wHy9MZc9xsUWqIoiazkZB5weECg==", "dependencies": { "splaytree": "^3.1.0" } @@ -9731,13 +9702,13 @@ } }, "node_modules/postcss": { - "version": "8.2.9", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.9.tgz", - "integrity": "sha512-b+TmuIL4jGtCHtoLi+G/PisuIl9avxs8IZMSmlABRwNz5RLUUACrC+ws81dcomz1nRezm5YPdXiMEzBEKgYn+Q==", + "version": "8.2.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", + "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", "dev": true, "dependencies": { "colorette": "^1.2.2", - "nanoid": "^3.1.22", + "nanoid": "^3.1.23", "source-map": "^0.6.1" }, "engines": { @@ -10607,15 +10578,13 @@ } }, "node_modules/postcss-loader": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.2.0.tgz", - "integrity": "sha512-mqgScxHqbiz1yxbnNcPdKYo/6aVt+XExURmEbQlviFVWogDbM4AJ0A/B+ZBpYsJrTRxKw7HyRazg9x0Q9SWwLA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", + "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", "dev": true, "dependencies": { "cosmiconfig": "^7.0.0", "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", "semver": "^7.3.4" }, "engines": { @@ -10627,7 +10596,7 @@ }, "peerDependencies": { "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^5.0.0" } }, "node_modules/postcss-loader/node_modules/cosmiconfig": { @@ -12949,14 +12918,12 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "dev": true, "dependencies": { "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", "util-deprecate": "^1.0.2" }, "engines": { @@ -12964,12 +12931,11 @@ } }, "node_modules/postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", "dev": true, "dependencies": { - "is-svg": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" @@ -13288,6 +13254,15 @@ "node": ">= 0.10" } }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", @@ -13357,12 +13332,6 @@ "node": ">=0.4.x" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -13555,6 +13524,18 @@ "node": ">=0.10.0" } }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/regex-parser": { "version": "2.2.11", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", @@ -13648,9 +13629,9 @@ "dev": true }, "node_modules/repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -13757,9 +13738,9 @@ "dev": true }, "node_modules/resolve-url-loader": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", - "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.3.tgz", + "integrity": "sha512-WbDSNFiKPPLem1ln+EVTE+bFUBdTTytfQZWbmghroaFNFaAVmGq0Saqw6F/306CwgPXsGwXVxbODE+3xAo/YbA==", "dev": true, "dependencies": { "adjust-sourcemap-loader": "3.0.0", @@ -14055,12 +14036,12 @@ "dev": true }, "node_modules/sass": { - "version": "1.32.8", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.8.tgz", - "integrity": "sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==", + "version": "1.32.13", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.13.tgz", + "integrity": "sha512-dEgI9nShraqP7cXQH+lEXVf73WOPCse0QlFzSD8k+1TcOxCMwVXfQlr0jtoluZysQOyJGnfr21dLvYKDJq8HkA==", "dev": true, "dependencies": { - "chokidar": ">=2.0.0 <4.0.0" + "chokidar": ">=3.0.0 <4.0.0" }, "bin": { "sass": "sass.js" @@ -14190,9 +14171,9 @@ "dev": true }, "node_modules/selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", "dev": true, "dependencies": { "node-forge": "^0.10.0" @@ -14351,15 +14332,6 @@ "node": ">=0.10.0" } }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -14604,29 +14576,6 @@ "websocket-driver": "^0.7.4" } }, - "node_modules/sockjs-client": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", - "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", - "dev": true, - "dependencies": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.1" - } - }, - "node_modules/sockjs-client/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -14754,6 +14703,18 @@ "node": ">=0.10.0" } }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -15173,29 +15134,26 @@ } }, "node_modules/table": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.9.tgz", - "integrity": "sha512-F3cLs9a3hL1Z7N4+EkSscsel3z55XT950AvB05bwayrNg5T1/gykXtigioTAjbltvbMSJvvhFCbnf6mX+ntnJQ==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", "dev": true, "dependencies": { "ajv": "^8.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", "lodash.clonedeep": "^4.5.0", - "lodash.flatten": "^4.4.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10.0.0" } }, "node_modules/table/node_modules/ajv": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.0.2.tgz", - "integrity": "sha512-V0HGxJd0PiDF0ecHYIesTOqfd1gJguwQUOYfMfAWnRsWQEXfc5ifbUFhD3Wjc+O+y7VAqL+g07prq9gHQ/JOZQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.4.0.tgz", + "integrity": "sha512-7QD2l6+KBSLwf+7MuYocbWvRPdOu63/trReTLu2KFwkgctnub1auoF+Y1WYcm09CTM7quuscrzqmASaLHC/K4Q==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -15224,9 +15182,9 @@ } }, "node_modules/terser": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", - "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", + "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", "dev": true, "dependencies": { "commander": "^2.20.0", @@ -15241,9 +15199,9 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", - "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz", + "integrity": "sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q==", "dev": true, "dependencies": { "jest-worker": "^26.6.2", @@ -15251,7 +15209,7 @@ "schema-utils": "^3.0.0", "serialize-javascript": "^5.0.1", "source-map": "^0.6.1", - "terser": "^5.5.1" + "terser": "^5.7.0" }, "engines": { "node": ">= 10.13.0" @@ -15468,6 +15426,18 @@ "node": ">=0.10.0" } }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", @@ -15478,9 +15448,9 @@ } }, "node_modules/tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", "dev": true }, "node_modules/tty-browserify": { @@ -15602,15 +15572,6 @@ "node": ">=0.10.0" } }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/uniq": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", @@ -15740,16 +15701,6 @@ "querystring": "0.2.0" } }, - "node_modules/url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/url/node_modules/punycode": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", @@ -15903,9 +15854,9 @@ "dev": true }, "node_modules/vue-loader": { - "version": "15.9.6", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.6.tgz", - "integrity": "sha512-j0cqiLzwbeImIC6nVIby2o/ABAWhlppyL/m5oJ67R5MloP0hj/DtFgb0Zmq3J9CG7AJ+AXIvHVnJAPBvrLyuDg==", + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.7.tgz", + "integrity": "sha512-qzlsbLV1HKEMf19IqCJqdNvFJRCI58WNbS6XbPqK13MrLz65es75w392MSQ5TsARAfIjUw+ATm3vlCXUJSOH9Q==", "dev": true, "dependencies": { "@vue/component-compiler-utils": "^3.1.0", @@ -16028,20 +15979,20 @@ } }, "node_modules/webpack": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.28.0.tgz", - "integrity": "sha512-1xllYVmA4dIvRjHzwELgW4KjIU1fW4PEuEnjsylz7k7H5HgPOctIq7W1jrt3sKH9yG5d72//XWzsHhfoWvsQVg==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.37.0.tgz", + "integrity": "sha512-yvdhgcI6QkQkDe1hINBAJ1UNevqNGTVaCkD2SSJcB8rcrNNl922RI8i2DXUAuNfANoxwsiXXEA4ZPZI9q2oGLA==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.46", + "@types/estree": "^0.0.47", "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/wasm-edit": "1.11.0", "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.0.4", + "acorn": "^8.2.1", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.7.0", + "enhanced-resolve": "^5.8.0", "es-module-lexer": "^0.4.0", "eslint-scope": "^5.1.1", "events": "^3.2.0", @@ -16074,18 +16025,17 @@ } }, "node_modules/webpack-cli": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz", - "integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", + "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.2", - "@webpack-cli/info": "^1.2.3", - "@webpack-cli/serve": "^1.3.1", + "@webpack-cli/configtest": "^1.0.3", + "@webpack-cli/info": "^1.2.4", + "@webpack-cli/serve": "^1.4.0", "colorette": "^1.2.1", "commander": "^7.0.0", - "enquirer": "^2.3.6", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", @@ -16118,30 +16068,21 @@ } } }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/webpack-dev-middleware": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.1.0.tgz", - "integrity": "sha512-mpa/FY+DiBu5+r5JUIyTCYWRfkWgyA3/OOE9lwfzV9S70A4vJYLsVRKj5rMFEsezBroy2FmPyQ8oBRVW8QmK1A==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.2.0.tgz", + "integrity": "sha512-HVVpHw+5H4lfGasUKjpIkOy9TB27OyKiL13c+dhzVG1w77OQ87b408fp0qKDKQQkNGgShbStDzVJ8sK46JajXg==", "dev": true, "dependencies": { - "colorette": "^1.2.1", - "mem": "^8.0.0", - "memfs": "^3.2.0", - "mime-types": "^2.1.28", + "colorette": "^1.2.2", + "mem": "^8.1.1", + "memfs": "^3.2.2", + "mime-types": "^2.1.30", "range-parser": "^1.2.1", "schema-utils": "^3.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= v10.23.3" }, "funding": { "type": "opencollective", @@ -16152,9 +16093,9 @@ } }, "node_modules/webpack-dev-server": { - "version": "4.0.0-beta.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.0.0-beta.1.tgz", - "integrity": "sha512-rPSAfz1VKQDQ2kmRbOamc0mX+T7kfqi9acvHic1YYctHWfKKvtovwLm9sA48GdLiYb8Ynop79zdT3CUoFiT7YQ==", + "version": "4.0.0-beta.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.0.0-beta.2.tgz", + "integrity": "sha512-kbUAjQg1FLtCoIZ0NdcTZWRBVT1EDajBSvGAiAqQPJxBjsr0N3FQ57kJ/4SrIZPyAajn8kcHctwFsTKPwme1tQ==", "dev": true, "dependencies": { "ansi-html": "^0.0.7", @@ -16166,24 +16107,22 @@ "express": "^4.17.1", "find-cache-dir": "^3.3.1", "graceful-fs": "^4.2.6", - "html-entities": "^2.1.1", - "http-proxy-middleware": "^1.0.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^1.1.0", "internal-ip": "^6.2.0", - "ipaddr.js": "^1.9.1", + "ipaddr.js": "^2.0.0", "is-absolute-url": "^3.0.3", "killable": "^1.0.1", "open": "^7.4.2", - "p-retry": "^4.4.0", + "p-retry": "^4.5.0", "portfinder": "^1.0.28", "schema-utils": "^3.0.0", "selfsigned": "^1.10.8", "serve-index": "^1.9.1", "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", "spdy": "^4.0.2", "strip-ansi": "^6.0.0", "url": "^0.11.0", - "util": "^0.12.3", "webpack-dev-middleware": "^4.1.0", "ws": "^7.4.4" }, @@ -16211,20 +16150,6 @@ "node": ">=8" } }, - "node_modules/webpack-dev-server/node_modules/util": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", - "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } - }, "node_modules/webpack-merge": { "version": "5.7.3", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", @@ -16268,9 +16193,9 @@ } }, "node_modules/webpack/node_modules/acorn": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz", - "integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", + "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -16374,27 +16299,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/which-typed-array": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", - "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.0", - "es-abstract": "^1.18.0-next.1", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", @@ -16434,9 +16338,9 @@ "dev": true }, "node_modules/ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", "dev": true, "engines": { "node": ">=8.3.0" @@ -16464,9 +16368,9 @@ } }, "node_modules/y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "engines": { "node": ">=10" @@ -16538,26 +16442,26 @@ } }, "@babel/compat-data": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.12.tgz", - "integrity": "sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", + "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", "dev": true }, "@babel/core": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.14.tgz", - "integrity": "sha512-wZso/vyF4ki0l0znlgM4inxbdrUvCb+cVz8grxDq+6C9k6qbqoIJteQOKicaKjCipU3ISV+XedCqpL2RJJVehA==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", + "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-compilation-targets": "^7.13.13", - "@babel/helper-module-transforms": "^7.13.14", - "@babel/helpers": "^7.13.10", - "@babel/parser": "^7.13.13", + "@babel/generator": "^7.14.3", + "@babel/helper-compilation-targets": "^7.13.16", + "@babel/helper-module-transforms": "^7.14.2", + "@babel/helpers": "^7.14.0", + "@babel/parser": "^7.14.3", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.13", - "@babel/types": "^7.13.14", + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -16584,12 +16488,12 @@ } }, "@babel/generator": { - "version": "7.13.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", - "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", + "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", "dev": true, "requires": { - "@babel/types": "^7.13.0", + "@babel/types": "^7.14.2", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -16614,12 +16518,12 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", - "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", + "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.12", + "@babel/compat-data": "^7.13.15", "@babel/helper-validator-option": "^7.12.17", "browserslist": "^4.14.5", "semver": "^6.3.0" @@ -16634,22 +16538,23 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.13.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.11.tgz", - "integrity": "sha512-ays0I7XYq9xbjCSvT+EvysLgfc3tOkwCULHjrnscGT3A9qD4sk3wXnJ3of0MAWsWGjdinFvajHU2smYuqXKMrw==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz", + "integrity": "sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-member-expression-to-functions": "^7.13.0", + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-function-name": "^7.14.2", + "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-replace-supers": "^7.14.3", "@babel/helper-split-export-declaration": "^7.12.13" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.17.tgz", - "integrity": "sha512-p2VGmBu9oefLZ2nQpgnEnG0ZlRPvL8gAGvPUMQwUdaE8k49rOMuZpOwdQoy5qJf6K8jL3bcAMhVUlHAjIgJHUg==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", + "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.12.13", @@ -16657,9 +16562,9 @@ } }, "@babel/helper-define-polyfill-provider": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz", - "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", + "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.13.0", @@ -16690,14 +16595,14 @@ } }, "@babel/helper-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", - "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", + "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", "dev": true, "requires": { "@babel/helper-get-function-arity": "^7.12.13", "@babel/template": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.2" } }, "@babel/helper-get-function-arity": { @@ -16710,13 +16615,13 @@ } }, "@babel/helper-hoist-variables": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.0.tgz", - "integrity": "sha512-0kBzvXiIKfsCA0y6cFEIJf4OdzfpRuNk4+YTeHZpGGc666SATFKTz6sRncwFnQk7/ugJ4dSrCj6iJuvW4Qwr2g==", + "version": "7.13.16", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", + "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", "dev": true, "requires": { - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.16" } }, "@babel/helper-member-expression-to-functions": { @@ -16738,19 +16643,19 @@ } }, "@babel/helper-module-transforms": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", - "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", + "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.13.12", "@babel/helper-replace-supers": "^7.13.12", "@babel/helper-simple-access": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.13", - "@babel/types": "^7.13.14" + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" } }, "@babel/helper-optimise-call-expression": { @@ -16780,15 +16685,15 @@ } }, "@babel/helper-replace-supers": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", - "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", + "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", "dev": true, "requires": { "@babel/helper-member-expression-to-functions": "^7.13.12", "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.12" + "@babel/traverse": "^7.14.2", + "@babel/types": "^7.14.2" } }, "@babel/helper-simple-access": { @@ -16819,9 +16724,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", "dev": true }, "@babel/helper-validator-option": { @@ -16843,23 +16748,23 @@ } }, "@babel/helpers": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", - "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", + "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", "dev": true, "requires": { "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/traverse": "^7.14.0", + "@babel/types": "^7.14.0" } }, "@babel/highlight": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", - "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.0", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -16917,9 +16822,9 @@ } }, "@babel/parser": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.13.tgz", - "integrity": "sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", + "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", "dev": true }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { @@ -16934,9 +16839,9 @@ } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz", - "integrity": "sha512-rPBnhj+WgoSmgq+4gQUtXx/vOcU+UYtjy1AA/aeD61Hwj410fwYyqfUcRP3lR8ucgliVJL/G7sXcNUecC75IXA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", + "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0", @@ -16954,10 +16859,21 @@ "@babel/helper-plugin-utils": "^7.13.0" } }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", + "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.3", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-class-static-block": "^7.12.13" + } + }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.13.8.tgz", - "integrity": "sha512-ONWKj0H6+wIRCkZi9zSbZtE/r73uOhMVHh256ys0UzfM7I3d4n+spZNWjOnJv2gzopumP2Wxi186vI8N0Y2JyQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", + "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0", @@ -16965,19 +16881,19 @@ } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.13.tgz", - "integrity": "sha512-INAgtFo4OnLN3Y/j0VwAgw3HDXcDtX+C/erMvWzuV9v71r7urb6iyMXu7eM9IgLr1ElLlOkaHjJ0SbCmdOQ3Iw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", + "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.13.8.tgz", - "integrity": "sha512-w4zOPKUFPX1mgvTmL/fcEqy34hrQ1CRcGxdphBc6snDnnqJ47EZDIyop6IwXzAC8G916hsIuXB2ZMBCExC5k7Q==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", + "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0", @@ -16985,9 +16901,9 @@ } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.13.8.tgz", - "integrity": "sha512-aul6znYB4N4HGweImqKn59Su9RS8lbUIqxtXTOcAGtNIDczoEFv+l1EhmX8rUBp3G1jMjKJm8m0jXVp63ZpS4A==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", + "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0", @@ -16995,9 +16911,9 @@ } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.13.8.tgz", - "integrity": "sha512-iePlDPBn//UhxExyS9KyeYU7RM9WScAG+D3Hhno0PLJebAEpDZMocbDe64eqynhNAnwz/vZoL/q/QB2T1OH39A==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", + "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0", @@ -17005,32 +16921,32 @@ } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.13.tgz", - "integrity": "sha512-O1jFia9R8BUCl3ZGB7eitaAPu62TXJRHn7rh+ojNERCFyqRwJMTmhz+tJ+k0CwI6CLjX/ee4qW74FSqlq9I35w==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", + "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.13.8.tgz", - "integrity": "sha512-DhB2EuB1Ih7S3/IRX5AFVgZ16k3EzfRbq97CxAVI1KSYcW+lexV8VZb7G7L8zuPVSdQMRn0kiBpf/Yzu9ZKH0g==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz", + "integrity": "sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.8", - "@babel/helper-compilation-targets": "^7.13.8", + "@babel/compat-data": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", "@babel/helper-plugin-utils": "^7.13.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.13.0" + "@babel/plugin-transform-parameters": "^7.14.2" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.13.8.tgz", - "integrity": "sha512-0wS/4DUF1CuTmGo+NiaHfHcVSeSLj5S3e6RivPTg/2k3wOv3jO35tZ6/ZWsQhQMvdgI7CwphjQa/ccarLymHVA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", + "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0", @@ -17038,9 +16954,9 @@ } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.13.12.tgz", - "integrity": "sha512-fcEdKOkIB7Tf4IxrgEVeFC4zeJSTr78no9wTdBuZZbqF64kzllU0ybo2zrzm7gUQfxGhBgq4E39oRs8Zx/RMYQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", + "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0", @@ -17058,6 +16974,18 @@ "@babel/helper-plugin-utils": "^7.13.0" } }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-create-class-features-plugin": "^7.14.0", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + } + }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", @@ -17086,6 +17014,15 @@ "@babel/helper-plugin-utils": "^7.12.13" } }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", + "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, "@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", @@ -17167,6 +17104,15 @@ "@babel/helper-plugin-utils": "^7.8.0" } }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", + "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.13.0" + } + }, "@babel/plugin-syntax-top-level-await": { "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", @@ -17206,25 +17152,25 @@ } }, "@babel/plugin-transform-block-scoping": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.13.tgz", - "integrity": "sha512-Pxwe0iqWJX4fOOM2kEZeUuAxHMWb9nK+9oh5d11bsLoB0xMg+mkDpt0eYuDZB7ETrY9bbcVlKUGTOGWy7BHsMQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz", + "integrity": "sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.13.0" } }, "@babel/plugin-transform-classes": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.13.0.tgz", - "integrity": "sha512-9BtHCPUARyVH1oXGcSJD3YpsqRLROJx5ZNP6tN5vnk17N0SVf9WCtf8Nuh1CFmgByKKAIMstitKduoCmsaDK5g==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz", + "integrity": "sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.12.13", + "@babel/helper-function-name": "^7.14.2", "@babel/helper-optimise-call-expression": "^7.12.13", "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.0", + "@babel/helper-replace-supers": "^7.13.12", "@babel/helper-split-export-declaration": "^7.12.13", "globals": "^11.1.0" }, @@ -17247,9 +17193,9 @@ } }, "@babel/plugin-transform-destructuring": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.0.tgz", - "integrity": "sha512-zym5em7tePoNT9s964c0/KU3JPPnuq7VhIxPRefJ4/s82cD+q1mgKfuGRDMCPL0HTyKz4dISuQlCusfgCJ86HA==", + "version": "7.13.17", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", + "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0" @@ -17322,25 +17268,25 @@ } }, "@babel/plugin-transform-modules-amd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.13.0.tgz", - "integrity": "sha512-EKy/E2NHhY/6Vw5d1k3rgoobftcNUmp9fGjb9XZwQLtTctsRBOTRO7RHHxfIky1ogMN5BxN7p9uMA3SzPfotMQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", + "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.2", "@babel/helper-plugin-utils": "^7.13.0", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.13.8.tgz", - "integrity": "sha512-9QiOx4MEGglfYZ4XOnU79OHr6vIWUakIj9b4mioN8eQIoEh+pf5p/zEB36JpDFWA12nNMiRf7bfoRvl9Rn79Bw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", + "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.12.13", + "@babel/helper-simple-access": "^7.13.12", "babel-plugin-dynamic-import-node": "^2.3.3" } }, @@ -17358,12 +17304,12 @@ } }, "@babel/plugin-transform-modules-umd": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.13.0.tgz", - "integrity": "sha512-D/ILzAh6uyvkWjKKyFE/W0FzWwasv6vPTSqPcjxFqn6QpX3u8DjRVliq4F2BamO2Wee/om06Vyy+vPkNrd4wxw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", + "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.0", "@babel/helper-plugin-utils": "^7.13.0" } }, @@ -17396,9 +17342,9 @@ } }, "@babel/plugin-transform-parameters": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.13.0.tgz", - "integrity": "sha512-Jt8k/h/mIwE2JFEOb3lURoY5C85ETcYPnbuAJ96zRBzh1XHtQZfs62ChZ6EP22QlC8c7Xqr9q+e1SU5qttwwjw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", + "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.13.0" @@ -17414,9 +17360,9 @@ } }, "@babel/plugin-transform-regenerator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.13.tgz", - "integrity": "sha512-lxb2ZAvSLyJ2PEe47hoGWPmW22v7CtSl9jW8mingV4H2sEX/JOcrAj2nPuGWi56ERUm2bUpjKzONAuT6HCn2EA==", + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", + "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", "dev": true, "requires": { "regenerator-transform": "^0.14.2" @@ -17432,16 +17378,16 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.13.10.tgz", - "integrity": "sha512-Y5k8ipgfvz5d/76tx7JYbKQTcgFSU6VgJ3kKQv4zGTKr+a9T/KBvfRvGtSFgKDQGt/DBykQixV0vNWKIdzWErA==", + "version": "7.14.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz", + "integrity": "sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-module-imports": "^7.13.12", "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.1.4", - "babel-plugin-polyfill-corejs3": "^0.1.3", - "babel-plugin-polyfill-regenerator": "^0.1.2", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", "semver": "^6.3.0" }, "dependencies": { @@ -17519,31 +17465,34 @@ } }, "@babel/preset-env": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.13.12.tgz", - "integrity": "sha512-JzElc6jk3Ko6zuZgBtjOd01pf9yYDEIH8BcqVuYIuOkzOwDesoa/Nz4gIo4lBG6K861KTV9TvIgmFuT6ytOaAA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.2.tgz", + "integrity": "sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.12", - "@babel/helper-compilation-targets": "^7.13.10", + "@babel/compat-data": "^7.14.0", + "@babel/helper-compilation-targets": "^7.13.16", "@babel/helper-plugin-utils": "^7.13.0", "@babel/helper-validator-option": "^7.12.17", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.13.8", + "@babel/plugin-proposal-async-generator-functions": "^7.14.2", "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-dynamic-import": "^7.13.8", - "@babel/plugin-proposal-export-namespace-from": "^7.12.13", - "@babel/plugin-proposal-json-strings": "^7.13.8", - "@babel/plugin-proposal-logical-assignment-operators": "^7.13.8", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-numeric-separator": "^7.12.13", - "@babel/plugin-proposal-object-rest-spread": "^7.13.8", - "@babel/plugin-proposal-optional-catch-binding": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", + "@babel/plugin-proposal-class-static-block": "^7.13.11", + "@babel/plugin-proposal-dynamic-import": "^7.14.2", + "@babel/plugin-proposal-export-namespace-from": "^7.14.2", + "@babel/plugin-proposal-json-strings": "^7.14.2", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", + "@babel/plugin-proposal-numeric-separator": "^7.14.2", + "@babel/plugin-proposal-object-rest-spread": "^7.14.2", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", + "@babel/plugin-proposal-optional-chaining": "^7.14.2", "@babel/plugin-proposal-private-methods": "^7.13.0", + "@babel/plugin-proposal-private-property-in-object": "^7.14.0", "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.12.13", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", @@ -17553,14 +17502,15 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.0", "@babel/plugin-syntax-top-level-await": "^7.12.13", "@babel/plugin-transform-arrow-functions": "^7.13.0", "@babel/plugin-transform-async-to-generator": "^7.13.0", "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.12.13", - "@babel/plugin-transform-classes": "^7.13.0", + "@babel/plugin-transform-block-scoping": "^7.14.2", + "@babel/plugin-transform-classes": "^7.14.2", "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.0", + "@babel/plugin-transform-destructuring": "^7.13.17", "@babel/plugin-transform-dotall-regex": "^7.12.13", "@babel/plugin-transform-duplicate-keys": "^7.12.13", "@babel/plugin-transform-exponentiation-operator": "^7.12.13", @@ -17568,16 +17518,16 @@ "@babel/plugin-transform-function-name": "^7.12.13", "@babel/plugin-transform-literals": "^7.12.13", "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.13.0", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", + "@babel/plugin-transform-modules-amd": "^7.14.2", + "@babel/plugin-transform-modules-commonjs": "^7.14.0", "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.13.0", + "@babel/plugin-transform-modules-umd": "^7.14.0", "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", "@babel/plugin-transform-new-target": "^7.12.13", "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.13.0", + "@babel/plugin-transform-parameters": "^7.14.2", "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.12.13", + "@babel/plugin-transform-regenerator": "^7.13.15", "@babel/plugin-transform-reserved-words": "^7.12.13", "@babel/plugin-transform-shorthand-properties": "^7.12.13", "@babel/plugin-transform-spread": "^7.13.0", @@ -17587,10 +17537,10 @@ "@babel/plugin-transform-unicode-escapes": "^7.12.13", "@babel/plugin-transform-unicode-regex": "^7.12.13", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.13.12", - "babel-plugin-polyfill-corejs2": "^0.1.4", - "babel-plugin-polyfill-corejs3": "^0.1.3", - "babel-plugin-polyfill-regenerator": "^0.1.2", + "@babel/types": "^7.14.2", + "babel-plugin-polyfill-corejs2": "^0.2.0", + "babel-plugin-polyfill-corejs3": "^0.2.0", + "babel-plugin-polyfill-regenerator": "^0.2.0", "core-js-compat": "^3.9.0", "semver": "^6.3.0" }, @@ -17617,9 +17567,9 @@ } }, "@babel/runtime": { - "version": "7.13.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.10.tgz", - "integrity": "sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", + "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -17648,17 +17598,17 @@ } }, "@babel/traverse": { - "version": "7.13.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.13.tgz", - "integrity": "sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", + "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", "dev": true, "requires": { "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.13.9", - "@babel/helper-function-name": "^7.12.13", + "@babel/generator": "^7.14.2", + "@babel/helper-function-name": "^7.14.2", "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.13.13", - "@babel/types": "^7.13.13", + "@babel/parser": "^7.14.2", + "@babel/types": "^7.14.2", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -17681,13 +17631,12 @@ } }, "@babel/types": { - "version": "7.13.14", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", - "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", + "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", - "lodash": "^4.17.19", + "@babel/helper-validator-identifier": "^7.14.0", "to-fast-properties": "^2.0.0" } }, @@ -17707,15 +17656,15 @@ } }, "@discoveryjs/json-ext": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", - "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", + "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", "dev": true }, "@eslint/eslintrc": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", - "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -17954,60 +17903,45 @@ "polygon-clipping": "^0.15.2" } }, - "@types/babel-core": { - "version": "6.25.6", - "resolved": "https://registry.npmjs.org/@types/babel-core/-/babel-core-6.25.6.tgz", - "integrity": "sha512-OzYuLL6Lw0wpE8qXFIuyS0GsagzCr3beo/+AIttM7slM9cUhbgHjU3oWvgVE+uOhcZYS4NesBilF2iZj3gM4LQ==", + "@types/babel__core": { + "version": "7.1.14", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", + "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", "dev": true, "requires": { - "@types/babel-generator": "*", - "@types/babel-template": "*", - "@types/babel-traverse": "*", - "@types/babel-types": "*", - "@types/babylon": "*" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "@types/babel-generator": { - "version": "6.25.3", - "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.3.tgz", - "integrity": "sha512-pGgnuxVddKcYIc+VJkRDop7gxLhqclNKBdlsm/5Vp8d+37pQkkDK7fef8d9YYImRzw9xcojEPc18pUYnbxmjqA==", + "@types/babel__generator": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", "dev": true, "requires": { - "@types/babel-types": "*" + "@babel/types": "^7.0.0" } }, - "@types/babel-template": { - "version": "6.25.2", - "resolved": "https://registry.npmjs.org/@types/babel-template/-/babel-template-6.25.2.tgz", - "integrity": "sha512-QKtDQRJmAz3Y1HSxfMl0syIHebMc/NnOeH/8qeD0zjgU2juD0uyC922biMxCy5xjTNvHinigML2l8kxE8eEBmw==", + "@types/babel__template": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", "dev": true, "requires": { - "@types/babel-types": "*", - "@types/babylon": "*" + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "@types/babel-traverse": { - "version": "6.25.5", - "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.5.tgz", - "integrity": "sha512-WrMbwmu+MWf8FiUMbmVOGkc7bHPzndUafn1CivMaBHthBBoo0VNIcYk1KV71UovYguhsNOwf3UF5oRmkkGOU3w==", + "@types/babel__traverse": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", + "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", "dev": true, "requires": { - "@types/babel-types": "*" - } - }, - "@types/babel-types": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.9.tgz", - "integrity": "sha512-qZLoYeXSTgQuK1h7QQS16hqLGdmqtRmN8w/rl3Au/l5x/zkHx+a4VHrHyBsi1I1vtK2oBHxSzKIu0R5p6spdOA==", - "dev": true - }, - "@types/babylon": { - "version": "6.16.5", - "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz", - "integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==", - "dev": true, - "requires": { - "@types/babel-types": "*" + "@babel/types": "^7.3.0" } }, "@types/browser-sync": { @@ -18179,6 +18113,15 @@ "kind-of": "^6.0.2" } }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", @@ -18256,9 +18199,9 @@ } }, "@types/clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-ET0ldU/vpXecy5vO8JRIhtJWSrk1vzXdJcp3Bjf8bARZynl6vfkhEKY/A7njfNIRlmyTGuVFuqnD6I3tOGdXpQ==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-x8xEbfTtcv5uyQDrBXKg9Beo5QhTPqO4vM0uq4iU27/nhyRRWNEMKHjxvAb0WDvp2Mnt4Sw0jKmIi5yQF/k2Ag==", "dev": true, "requires": { "@types/node": "*", @@ -18363,9 +18306,9 @@ } }, "@types/eslint": { - "version": "7.2.8", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.8.tgz", - "integrity": "sha512-RTKvBsfz0T8CKOGZMfuluDNyMFHnu5lvNr4hWEsQeHXH6FcmIDIozOyWMh36nLGMwVd5UFNXC2xztA8lln22MQ==", + "version": "7.2.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", + "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==", "dev": true, "requires": { "@types/estree": "*", @@ -18383,9 +18326,9 @@ } }, "@types/estree": { - "version": "0.0.46", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.46.tgz", - "integrity": "sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg==", + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", + "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", "dev": true }, "@types/glob": { @@ -18399,9 +18342,9 @@ } }, "@types/http-proxy": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.5.tgz", - "integrity": "sha512-GNkDE7bTv6Sf8JbV2GksknKOsk7OznNYHSdrtvPJXO0qJ9odZig6IZKUi5RFGi6d1bf6dgIAe4uXi3DBc7069Q==", + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.6.tgz", + "integrity": "sha512-+qsjqR75S/ib0ig0R9WN+CDoZeOBU6F2XLewgC4KVgdXiNHiKKHFEMRHOrs5PbYE97D5vataw5wPj4KLYfUkuQ==", "dev": true, "requires": { "@types/node": "*" @@ -18481,9 +18424,9 @@ "dev": true }, "@types/node": { - "version": "14.14.37", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.37.tgz", - "integrity": "sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.0.tgz", + "integrity": "sha512-8/bnjSZD86ZfpBsDlCIkNXIvm+h6wi9g7IqL+kmFkQ+Wvu3JrasgLElfiPgoo8V8vVfnEi0QVS12gbl94h9YsQ==", "dev": true }, "@types/parse-glob": { @@ -18770,25 +18713,25 @@ } }, "@webpack-cli/configtest": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz", - "integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz", + "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==", "dev": true, "requires": {} }, "@webpack-cli/info": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz", - "integrity": "sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz", + "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==", "dev": true, "requires": { "envinfo": "^7.7.3" } }, "@webpack-cli/serve": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz", - "integrity": "sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", + "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", "dev": true, "requires": {} }, @@ -18917,9 +18860,9 @@ } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -18959,12 +18902,6 @@ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", - "dev": true - }, "array-flatten": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", @@ -19083,15 +19020,6 @@ "postcss-value-parser": "^4.1.0" } }, - "available-typed-arrays": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz", - "integrity": "sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ==", - "dev": true, - "requires": { - "array-filter": "^1.0.0" - } - }, "babel-loader": { "version": "8.2.2", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", @@ -19137,16 +19065,6 @@ } } }, - "babel-merge": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/babel-merge/-/babel-merge-3.0.0.tgz", - "integrity": "sha512-eBOBtHnzt9xvnjpYNI5HmaPp/b2vMveE5XggzqHnQeHJ8mFIBrBv6WZEVIj5jJ2uwTItkqKo9gWzEEcBxEq0yw==", - "dev": true, - "requires": { - "deepmerge": "^2.2.1", - "object.omit": "^3.0.0" - } - }, "babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", @@ -19157,13 +19075,13 @@ } }, "babel-plugin-polyfill-corejs2": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.1.10.tgz", - "integrity": "sha512-DO95wD4g0A8KRaHKi0D51NdGXzvpqVLnLu5BTvDlpqUEpTmeEtypgC1xqesORaWmiUOQI14UHKlzNd9iZ2G3ZA==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", + "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.0", - "@babel/helper-define-polyfill-provider": "^0.1.5", + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.0", "semver": "^6.1.1" }, "dependencies": { @@ -19176,28 +19094,28 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz", - "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", + "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5", - "core-js-compat": "^3.8.1" + "@babel/helper-define-polyfill-provider": "^0.2.0", + "core-js-compat": "^3.9.1" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.1.6.tgz", - "integrity": "sha512-OUrYG9iKPKz8NxswXbRAdSwF0GhRdIEMTloQATJi4bDuFqrXaXcCUT/VGNrr8pBcjMh1RxZ7Xt9cytVJTJfvMg==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", + "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.1.5" + "@babel/helper-define-polyfill-provider": "^0.2.0" } }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "base": { @@ -19480,16 +19398,16 @@ } }, "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", - "node-releases": "^1.1.70" + "node-releases": "^1.1.71" } }, "buffer": { @@ -19620,15 +19538,15 @@ } }, "caniuse-lite": { - "version": "1.0.30001205", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001205.tgz", - "integrity": "sha512-TL1GrS5V6LElbitPazidkBMD9sa448bQDDLrumDqaggmKFcuU2JW1wTOHJPukAcOMtEmLcmDJEzfRrf+GjM0Og==", + "version": "1.0.30001228", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", + "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", "dev": true }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -19658,21 +19576,10 @@ } }, "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true }, "ci-info": { "version": "3.1.1", @@ -19703,9 +19610,9 @@ } }, "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz", + "integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==", "dev": true, "requires": { "source-map": "~0.6.0" @@ -19903,9 +19810,9 @@ "optional": true }, "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true }, "commondir": { @@ -20069,12 +19976,12 @@ "dev": true }, "core-js-compat": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.10.0.tgz", - "integrity": "sha512-9yVewub2MXNYyGvuLnMHcN1k9RkvB7/ofktpeKTIaASyB88YYqGzUnu0ywMMhJrDHOMiTjSHWGzR+i7Wb9Z1kQ==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz", + "integrity": "sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==", "dev": true, "requires": { - "browserslist": "^4.16.3", + "browserslist": "^4.16.6", "semver": "7.0.0" }, "dependencies": { @@ -20331,23 +20238,22 @@ } }, "css-loader": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.0.tgz", - "integrity": "sha512-MfRo2MjEeLXMlUkeUwN71Vx5oc6EJnx5UQ4Yi9iUtYQvrPtwLUucYptz0hc6n++kdNcyF5olYBS4vPjJDAcLkw==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.4.tgz", + "integrity": "sha512-OFYGyINCKkdQsTrSYxzGSFnGS4gNjcXkKkQgWxK138jgnPt+lepxdjSZNc8sHAl5vP3DhsJUxufWIjOwI8PMMw==", "dev": true, "requires": { "camelcase": "^6.2.0", - "cssesc": "^3.0.0", "icss-utils": "^5.1.0", "loader-utils": "^2.0.0", - "postcss": "^8.2.8", + "postcss": "^8.2.10", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.1.0", "schema-utils": "^3.0.0", - "semver": "^7.3.4" + "semver": "^7.3.5" }, "dependencies": { "lru-cache": { @@ -20455,13 +20361,13 @@ "dev": true }, "cssnano": { - "version": "4.1.10", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", - "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", "dev": true, "requires": { "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.7", + "cssnano-preset-default": "^4.0.8", "is-resolvable": "^1.0.0", "postcss": "^7.0.0" }, @@ -20547,9 +20453,9 @@ } }, "cssnano-preset-default": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", - "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", "dev": true, "requires": { "css-declaration-sorter": "^4.0.1", @@ -20580,7 +20486,7 @@ "postcss-ordered-values": "^4.1.2", "postcss-reduce-initial": "^4.0.3", "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.2", + "postcss-svgo": "^4.0.3", "postcss-unique-selectors": "^4.0.1" }, "dependencies": { @@ -20854,12 +20760,6 @@ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", - "dev": true - }, "default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", @@ -20947,9 +20847,9 @@ "dev": true }, "detect-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.5.tgz", - "integrity": "sha512-qi86tE6hRcFHy8jI1m2VG+LaPUR1LhqDa5G8tVjuUXmOrpuAgqsA1pN0+ldgr3aKUH+QLI9hCY/OcRYisERejw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, "diffie-hellman": { @@ -21015,23 +20915,23 @@ } }, "dom-serializer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz", - "integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "requires": { "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", + "domhandler": "^4.2.0", "entities": "^2.0.0" }, "dependencies": { "domhandler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", - "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "requires": { - "domelementtype": "^2.1.0" + "domelementtype": "^2.2.0" } } } @@ -21043,9 +20943,9 @@ "dev": true }, "domelementtype": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", - "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, "domhandler": { @@ -21058,23 +20958,23 @@ } }, "domutils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.0.tgz", - "integrity": "sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", + "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", "dev": true, "requires": { "dom-serializer": "^1.0.1", - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0" + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, "dependencies": { "domhandler": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz", - "integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "requires": { - "domelementtype": "^2.1.0" + "domelementtype": "^2.2.0" } } } @@ -21099,9 +20999,9 @@ } }, "dotenv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", - "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", "dev": true }, "dotenv-expand": { @@ -21117,9 +21017,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.703", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.703.tgz", - "integrity": "sha512-SVBVhNB+4zPL+rvtWLw7PZQkw/Eqj1HQZs22xtcqW36+xoifzEOEEDEpkxSMfB6RFeSIOcG00w6z5mSqLr1Y6w==", + "version": "1.3.730", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.730.tgz", + "integrity": "sha512-1Tr3h09wXhmqXnvDyrRe6MFgTeU0ZXy3+rMJWTrOHh/HNesWwBBrKnMxRJWZ86dzs8qQdw2c7ZE1/qeGHygImA==", "dev": true }, "elliptic": { @@ -21164,9 +21064,9 @@ "dev": true }, "enhanced-resolve": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz", - "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==", + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -21189,9 +21089,9 @@ "dev": true }, "envinfo": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz", - "integrity": "sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ==", + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true }, "error-ex": { @@ -21295,13 +21195,13 @@ "dev": true }, "eslint": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.23.0.tgz", - "integrity": "sha512-kqvNVbdkjzpFy0XOszNwjkKzZ+6TcwCQ/h+ozlcIWwaimBBuhlQ4nN6kbiM2L+OjDcznkTJxzYfRFH92sx4a0Q==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", + "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.0", + "@eslint/eslintrc": "^0.4.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -21407,9 +21307,9 @@ } }, "eslint-plugin-vue": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.8.0.tgz", - "integrity": "sha512-OGrnPz+PuYL2HmVyBHxm4mRjxW2kfFCQE6Hw9G6qOHs/Pcu0srOlCCW0FMa8SLzIEqxl8WuKoBSPcMnrjUG2vw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.9.0.tgz", + "integrity": "sha512-2Q0qQp5+5h+pZvJKCbG1/jCRUYrdgAz5BYKGyTlp2NU8mx09u3Hp7PsH6d5qef6ojuPoCXMnrbbDxeoplihrSw==", "dev": true, "requires": { "eslint-utils": "^2.1.0", @@ -21472,9 +21372,9 @@ } }, "eslint-visitor-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", - "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, "espree": { @@ -21566,15 +21466,6 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, - "eventsource": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.1.0.tgz", - "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", - "dev": true, - "requires": { - "original": "^1.0.0" - } - }, "evp_bytestokey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", @@ -21762,14 +21653,6 @@ "dev": true, "requires": { "is-extendable": "^0.1.0" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } } }, "extglob": { @@ -22004,9 +21887,9 @@ "dev": true }, "follow-redirects": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", - "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", "dev": true }, "for-in": { @@ -22015,12 +21898,6 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", - "dev": true - }, "forwarded": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", @@ -22028,9 +21905,9 @@ "dev": true }, "fraction.js": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz", - "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.0.tgz", + "integrity": "sha512-o9lSKpK0TDqDwTL24Hxqi6I99s942l6TYkfl6WvGWgLOIFz/YonSGKfiSeMadoiNvTfqnfOa9mjb5SGVbBK9/w==", "dev": true }, "fragment-cache": { @@ -22061,9 +21938,9 @@ } }, "fs-monkey": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.1.tgz", - "integrity": "sha512-fcSa+wyTqZa46iWweI7/ZiUfegOZl0SG8+dltIwFXo7+zYU9J9kpS3NB6pZcSlJdhvIwp81Adx2XhZorncxiaA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", "dev": true }, "fs.realpath": { @@ -22132,9 +22009,9 @@ } }, "get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, "get-value": { @@ -22144,9 +22021,9 @@ "dev": true }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -22173,9 +22050,9 @@ "dev": true }, "globals": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.7.0.tgz", - "integrity": "sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA==", + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -22393,12 +22270,6 @@ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", "dev": true }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, "html-entities": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", @@ -22432,6 +22303,15 @@ "terser": "^4.6.3" }, "dependencies": { + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, "commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -22522,13 +22402,12 @@ } }, "http-proxy-middleware": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.1.0.tgz", - "integrity": "sha512-OnjU5vyVgcZVe2AjLJyMrk8YLNOC2lspCHirB5ldM+B/dwEfZ5bgVTrFyzE9R7xRWAP/i/FXtvIqKjTNEZBhBg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", + "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", "dev": true, "requires": { "@types/http-proxy": "^1.17.5", - "camelcase": "^6.2.0", "http-proxy": "^1.18.1", "is-glob": "^4.0.1", "is-plain-obj": "^3.0.0", @@ -22710,6 +22589,14 @@ "ipaddr.js": "^1.9.1", "is-ip": "^3.1.0", "p-event": "^4.2.0" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } } }, "interpret": { @@ -22731,9 +22618,9 @@ "dev": true }, "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.0.tgz", + "integrity": "sha512-S54H9mIj0rbxRIyrDMEuuER86LdlgUg9FSeZ8duQb6CUG2iRrA36MYVQBSprTF/ZeAwvyQ5mDGuNvIPM0BIl3w==", "dev": true }, "is-absolute-url": { @@ -22777,9 +22664,9 @@ "dev": true }, "is-bigint": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.1.tgz", - "integrity": "sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", "dev": true }, "is-binary-path": { @@ -22792,12 +22679,12 @@ } }, "is-boolean-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", - "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", "dev": true, "requires": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" } }, "is-buffer": { @@ -22827,9 +22714,9 @@ } }, "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dev": true, "requires": { "has": "^1.0.3" @@ -22856,9 +22743,9 @@ } }, "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" }, "is-descriptor": { "version": "0.1.6", @@ -22886,19 +22773,16 @@ "dev": true }, "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true }, "is-extglob": { "version": "2.1.1", @@ -22912,12 +22796,6 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "is-generator-function": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz", - "integrity": "sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ==", - "dev": true - }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", @@ -22949,9 +22827,9 @@ "dev": true }, "is-number-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", - "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", "dev": true }, "is-obj": { @@ -22988,12 +22866,12 @@ } }, "is-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz", - "integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" } }, "is-resolvable": { @@ -23009,40 +22887,18 @@ "dev": true }, "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", "dev": true }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", - "dev": true, - "requires": { - "html-comment-regex": "^1.1.0" - } - }, "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - } - }, - "is-typed-array": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", - "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.2", - "es-abstract": "^1.18.0-next.2", - "foreach": "^2.0.5", - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" } }, "is-windows": { @@ -23135,12 +22991,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json3": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", - "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==", - "dev": true - }, "json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", @@ -23185,9 +23035,9 @@ "dev": true }, "laravel-mix": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.13.tgz", - "integrity": "sha512-2sFmYgX24dkKlQ3OX6363YHvjONnqt9uer0TcTxcZQmaRxrh1xcK/aJjhUiVYUNOjsg8OmEFzTDp4nokOpWVkQ==", + "version": "6.0.19", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.19.tgz", + "integrity": "sha512-SH//4h/bi2ff5hyBfwQ0DE0VfTkskGLU+a/l7HdmTz1F+cJdvakajziyBVRwa9U3+DyvZo9eo9Jgq1jdZWW3XQ==", "dev": true, "requires": { "@babel/core": "^7.12.3", @@ -23196,7 +23046,7 @@ "@babel/plugin-transform-runtime": "^7.12.1", "@babel/preset-env": "^7.12.1", "@babel/runtime": "^7.12.1", - "@types/babel-core": "^6.25.6", + "@types/babel__core": "^7.1.12", "@types/browser-sync": "^2.26.1", "@types/clean-css": "^4.2.2", "@types/cssnano": "^4.0.0", @@ -23206,16 +23056,15 @@ "@types/imagemin-svgo": "^8.0.0", "autoprefixer": "^10.0.1", "babel-loader": "^8.1.0", - "babel-merge": "^3.0.0", "chalk": "^4.1.0", "chokidar": "^3.4.3", - "clean-css": "^4.2.3", + "clean-css": "^4.2.3 || ^5.1.1", "cli-table3": "^0.6.0", "collect.js": "^4.28.4", - "commander": "^6.1.0", + "commander": "^7.1.0", "concat": "^1.0.3", "css-loader": "^5.0.0", - "cssnano": "^4.1.10", + "cssnano": "^4.1.11", "dotenv": "^8.2.0", "dotenv-expand": "^5.1.0", "file-loader": "^6.1.1", @@ -23229,18 +23078,46 @@ "mini-css-extract-plugin": "^1.1.0", "node-libs-browser": "^2.2.1", "postcss-load-config": "^3.0.0", - "postcss-loader": "^4.0.4", - "semver": "^5.7.1", + "postcss-loader": "^5.2.0", + "semver": "^7.3.4", + "strip-ansi": "^6.0.0", "style-loader": "^2.0.0", "terser": "^5.3.7", "terser-webpack-plugin": "^5.0.0", - "webpack": "^5.1.3", + "vue-style-loader": "^4.1.3", + "webpack": "^5.25.1", "webpack-cli": "^4.1.0", - "webpack-dev-server": "^4.0.0-beta.0", + "webpack-dev-server": "4.0.0-beta.2", "webpack-merge": "^5.2.0", "webpack-notifier": "^1.8.0", "webpackbar": "^5.0.0-3", "yargs": "^16.1.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, "laravel-mix-artisan-publish": { @@ -23311,12 +23188,6 @@ "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true - }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -23396,9 +23267,9 @@ } }, "martinez-polygon-clipping": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.7.0.tgz", - "integrity": "sha512-EBxKjlUqrVjzT1HRwJARaSwj66JZqEUl+JnqnrzHZLU4hd4XrCQWqShZx40264NR/pm5wIHRlNEaIrev44wvKA==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.7.1.tgz", + "integrity": "sha512-Xt5hOjAVkRoGN7kUb/0VmkxcG07Ja+OA3qU+7YcY2pAlJ78V1G181VTozHCXpzlj0paNBbcLno77mcGeGStI0A==", "requires": { "robust-predicates": "^2.0.4", "splaytree": "^0.1.4", @@ -23440,9 +23311,9 @@ "dev": true }, "mem": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.0.tgz", - "integrity": "sha512-FIkgXo0kTi3XpvaznV5Muk6Y6w8SkdmRXcY7ZLonQesuYezp59UooLxAVBcGuN6PH2tXN84mR3vyzSc6oSMUfA==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", + "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", "dev": true, "requires": { "map-age-cleaner": "^0.1.3", @@ -23458,12 +23329,12 @@ } }, "memfs": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.0.tgz", - "integrity": "sha512-f/xxz2TpdKv6uDn6GtHee8ivFyxwxmPuXatBb1FBwxYNuVpbM3k/Y1Z+vC0mH/dIXXrukYfe3qe5J32Dfjg93A==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz", + "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==", "dev": true, "requires": { - "fs-monkey": "1.0.1" + "fs-monkey": "1.0.3" } }, "merge-descriptors": { @@ -23508,13 +23379,13 @@ "dev": true }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" } }, "miller-rabin": { @@ -23542,18 +23413,18 @@ "dev": true }, "mime-db": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", - "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", "dev": true }, "mime-types": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", - "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", "dev": true, "requires": { - "mime-db": "1.46.0" + "mime-db": "1.47.0" } }, "mimic-fn": { @@ -23563,9 +23434,9 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.4.0.tgz", - "integrity": "sha512-DyQr5DhXXARKZoc4kwvCvD95kh69dUupfuKOmBUqZ4kBTmRaRZcU32lYu3cLd6nEGXhQ1l7LzZ3F/CjItaY6VQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", + "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", "dev": true, "requires": { "loader-utils": "^2.0.0", @@ -23608,6 +23479,17 @@ "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "mkdirp": { @@ -23649,9 +23531,9 @@ "optional": true }, "nanoid": { - "version": "3.1.22", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz", - "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==", + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", "dev": true }, "nanomatch": { @@ -23721,6 +23603,15 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } } } }, @@ -23863,9 +23754,9 @@ } }, "node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", "dev": true }, "normalize-path": { @@ -23941,9 +23832,9 @@ } }, "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", + "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", "dev": true }, "object-is": { @@ -23992,15 +23883,6 @@ "es-abstract": "^1.18.0-next.2" } }, - "object.omit": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz", - "integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==", - "dev": true, - "requires": { - "is-extendable": "^1.0.0" - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -24085,15 +23967,6 @@ "word-wrap": "^1.2.3" } }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "requires": { - "url-parse": "^1.4.3" - } - }, "os-browserify": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", @@ -24307,9 +24180,9 @@ } }, "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "requires": { "create-hash": "^1.1.2", @@ -24320,9 +24193,9 @@ } }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", "dev": true }, "pixelworks": { @@ -24340,9 +24213,9 @@ } }, "polygon-clipping": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.2.tgz", - "integrity": "sha512-qsUFQSY4nA++1/b76dy0BJGwL0FZAk05Y4hZprctLIhAddE8KUUr3TxIF4sAxIQtjH9xvaBe3raaRQrcSI4wlA==", + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.3.tgz", + "integrity": "sha512-ho0Xx5DLkgxRx/+n4O74XyJ67DcyN3Tu9bGYKsnTukGAW6ssnuak6Mwcyb1wHy9MZc9xsUWqIoiazkZB5weECg==", "requires": { "splaytree": "^3.1.0" }, @@ -24383,13 +24256,13 @@ "dev": true }, "postcss": { - "version": "8.2.9", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.9.tgz", - "integrity": "sha512-b+TmuIL4jGtCHtoLi+G/PisuIl9avxs8IZMSmlABRwNz5RLUUACrC+ws81dcomz1nRezm5YPdXiMEzBEKgYn+Q==", + "version": "8.2.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", + "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", "dev": true, "requires": { "colorette": "^1.2.2", - "nanoid": "^3.1.22", + "nanoid": "^3.1.23", "source-map": "^0.6.1" }, "dependencies": { @@ -25081,15 +24954,13 @@ } }, "postcss-loader": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.2.0.tgz", - "integrity": "sha512-mqgScxHqbiz1yxbnNcPdKYo/6aVt+XExURmEbQlviFVWogDbM4AJ0A/B+ZBpYsJrTRxKw7HyRazg9x0Q9SWwLA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", + "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", "dev": true, "requires": { "cosmiconfig": "^7.0.0", "klona": "^2.0.4", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", "semver": "^7.3.4" }, "dependencies": { @@ -26935,24 +26806,21 @@ } }, "postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "dev": true, "requires": { "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", "util-deprecate": "^1.0.2" } }, "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", "dev": true, "requires": { - "is-svg": "^3.0.0", "postcss": "^7.0.0", "postcss-value-parser": "^3.0.0", "svgo": "^1.0.0" @@ -27191,6 +27059,14 @@ "requires": { "forwarded": "~0.1.2", "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } } }, "pseudomap": { @@ -27251,12 +27127,6 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -27414,6 +27284,15 @@ "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } } } }, @@ -27488,9 +27367,9 @@ "dev": true }, "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true }, "repeat-string": { @@ -27571,9 +27450,9 @@ "dev": true }, "resolve-url-loader": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.2.tgz", - "integrity": "sha512-QEb4A76c8Mi7I3xNKXlRKQSlLBwjUV/ULFMP+G7n3/7tJZ8MG5wsZ3ucxP1Jz8Vevn6fnJsxDx9cIls+utGzPQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.3.tgz", + "integrity": "sha512-WbDSNFiKPPLem1ln+EVTE+bFUBdTTytfQZWbmghroaFNFaAVmGq0Saqw6F/306CwgPXsGwXVxbODE+3xAo/YbA==", "dev": true, "requires": { "adjust-sourcemap-loader": "3.0.0", @@ -27809,12 +27688,12 @@ "dev": true }, "sass": { - "version": "1.32.8", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.8.tgz", - "integrity": "sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ==", + "version": "1.32.13", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.13.tgz", + "integrity": "sha512-dEgI9nShraqP7cXQH+lEXVf73WOPCse0QlFzSD8k+1TcOxCMwVXfQlr0jtoluZysQOyJGnfr21dLvYKDJq8HkA==", "dev": true, "requires": { - "chokidar": ">=2.0.0 <4.0.0" + "chokidar": ">=3.0.0 <4.0.0" } }, "sass-loader": { @@ -27893,9 +27772,9 @@ "dev": true }, "selfsigned": { - "version": "1.10.8", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", - "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", "dev": true, "requires": { "node-forge": "^0.10.0" @@ -28040,14 +27919,6 @@ "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } } }, "setimmediate": { @@ -28257,31 +28128,6 @@ "websocket-driver": "^0.7.4" } }, - "sockjs-client": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.5.1.tgz", - "integrity": "sha512-VnVAb663fosipI/m6pqRXakEOw7nvd7TUgdr3PlR/8V2I95QIdwT8L4nMxhyU8SmDBHYXU1TOElaKOmKLfYzeQ==", - "dev": true, - "requires": { - "debug": "^3.2.6", - "eventsource": "^1.0.7", - "faye-websocket": "^0.11.3", - "inherits": "^2.0.4", - "json3": "^3.3.3", - "url-parse": "^1.5.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -28394,6 +28240,15 @@ "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } } } }, @@ -28721,26 +28576,23 @@ } }, "table": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/table/-/table-6.0.9.tgz", - "integrity": "sha512-F3cLs9a3hL1Z7N4+EkSscsel3z55XT950AvB05bwayrNg5T1/gykXtigioTAjbltvbMSJvvhFCbnf6mX+ntnJQ==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", "dev": true, "requires": { "ajv": "^8.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", "lodash.clonedeep": "^4.5.0", - "lodash.flatten": "^4.4.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "dependencies": { "ajv": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.0.2.tgz", - "integrity": "sha512-V0HGxJd0PiDF0ecHYIesTOqfd1gJguwQUOYfMfAWnRsWQEXfc5ifbUFhD3Wjc+O+y7VAqL+g07prq9gHQ/JOZQ==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.4.0.tgz", + "integrity": "sha512-7QD2l6+KBSLwf+7MuYocbWvRPdOu63/trReTLu2KFwkgctnub1auoF+Y1WYcm09CTM7quuscrzqmASaLHC/K4Q==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -28764,9 +28616,9 @@ "dev": true }, "terser": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", - "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", + "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", "dev": true, "requires": { "commander": "^2.20.0", @@ -28789,9 +28641,9 @@ } }, "terser-webpack-plugin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", - "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz", + "integrity": "sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q==", "dev": true, "requires": { "jest-worker": "^26.6.2", @@ -28799,7 +28651,7 @@ "schema-utils": "^3.0.0", "serialize-javascript": "^5.0.1", "source-map": "^0.6.1", - "terser": "^5.5.1" + "terser": "^5.7.0" }, "dependencies": { "p-limit": { @@ -28943,6 +28795,15 @@ "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } } } }, @@ -28962,9 +28823,9 @@ "dev": true }, "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", "dev": true }, "tty-browserify": { @@ -29054,14 +28915,6 @@ "get-value": "^2.0.6", "is-extendable": "^0.1.1", "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - } } }, "uniq": { @@ -29181,16 +29034,6 @@ } } }, - "url-parse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.1.tgz", - "integrity": "sha512-HOfCOUJt7iSYzEx/UqgtwKRMC6EU91NFhsCHMv9oM03VJcVo2Qrp8T8kI9D7amFf1cu+/3CEhgb3rF9zL7k85Q==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -29308,9 +29151,9 @@ "dev": true }, "vue-loader": { - "version": "15.9.6", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.6.tgz", - "integrity": "sha512-j0cqiLzwbeImIC6nVIby2o/ABAWhlppyL/m5oJ67R5MloP0hj/DtFgb0Zmq3J9CG7AJ+AXIvHVnJAPBvrLyuDg==", + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.7.tgz", + "integrity": "sha512-qzlsbLV1HKEMf19IqCJqdNvFJRCI58WNbS6XbPqK13MrLz65es75w392MSQ5TsARAfIjUw+ATm3vlCXUJSOH9Q==", "dev": true, "requires": { "@vue/component-compiler-utils": "^3.1.0", @@ -29410,20 +29253,20 @@ } }, "webpack": { - "version": "5.28.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.28.0.tgz", - "integrity": "sha512-1xllYVmA4dIvRjHzwELgW4KjIU1fW4PEuEnjsylz7k7H5HgPOctIq7W1jrt3sKH9yG5d72//XWzsHhfoWvsQVg==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.37.0.tgz", + "integrity": "sha512-yvdhgcI6QkQkDe1hINBAJ1UNevqNGTVaCkD2SSJcB8rcrNNl922RI8i2DXUAuNfANoxwsiXXEA4ZPZI9q2oGLA==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.46", + "@types/estree": "^0.0.47", "@webassemblyjs/ast": "1.11.0", "@webassemblyjs/wasm-edit": "1.11.0", "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.0.4", + "acorn": "^8.2.1", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.7.0", + "enhanced-resolve": "^5.8.0", "es-module-lexer": "^0.4.0", "eslint-scope": "^5.1.1", "events": "^3.2.0", @@ -29441,9 +29284,9 @@ }, "dependencies": { "acorn": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.0.tgz", - "integrity": "sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", + "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", "dev": true }, "source-map": { @@ -29465,18 +29308,17 @@ } }, "webpack-cli": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz", - "integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", + "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.2", - "@webpack-cli/info": "^1.2.3", - "@webpack-cli/serve": "^1.3.1", + "@webpack-cli/configtest": "^1.0.3", + "@webpack-cli/info": "^1.2.4", + "@webpack-cli/serve": "^1.4.0", "colorette": "^1.2.1", "commander": "^7.0.0", - "enquirer": "^2.3.6", "execa": "^5.0.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", @@ -29484,34 +29326,26 @@ "rechoir": "^0.7.0", "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - } } }, "webpack-dev-middleware": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.1.0.tgz", - "integrity": "sha512-mpa/FY+DiBu5+r5JUIyTCYWRfkWgyA3/OOE9lwfzV9S70A4vJYLsVRKj5rMFEsezBroy2FmPyQ8oBRVW8QmK1A==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.2.0.tgz", + "integrity": "sha512-HVVpHw+5H4lfGasUKjpIkOy9TB27OyKiL13c+dhzVG1w77OQ87b408fp0qKDKQQkNGgShbStDzVJ8sK46JajXg==", "dev": true, "requires": { - "colorette": "^1.2.1", - "mem": "^8.0.0", - "memfs": "^3.2.0", - "mime-types": "^2.1.28", + "colorette": "^1.2.2", + "mem": "^8.1.1", + "memfs": "^3.2.2", + "mime-types": "^2.1.30", "range-parser": "^1.2.1", "schema-utils": "^3.0.0" } }, "webpack-dev-server": { - "version": "4.0.0-beta.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.0.0-beta.1.tgz", - "integrity": "sha512-rPSAfz1VKQDQ2kmRbOamc0mX+T7kfqi9acvHic1YYctHWfKKvtovwLm9sA48GdLiYb8Ynop79zdT3CUoFiT7YQ==", + "version": "4.0.0-beta.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.0.0-beta.2.tgz", + "integrity": "sha512-kbUAjQg1FLtCoIZ0NdcTZWRBVT1EDajBSvGAiAqQPJxBjsr0N3FQ57kJ/4SrIZPyAajn8kcHctwFsTKPwme1tQ==", "dev": true, "requires": { "ansi-html": "^0.0.7", @@ -29523,24 +29357,22 @@ "express": "^4.17.1", "find-cache-dir": "^3.3.1", "graceful-fs": "^4.2.6", - "html-entities": "^2.1.1", - "http-proxy-middleware": "^1.0.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^1.1.0", "internal-ip": "^6.2.0", - "ipaddr.js": "^1.9.1", + "ipaddr.js": "^2.0.0", "is-absolute-url": "^3.0.3", "killable": "^1.0.1", "open": "^7.4.2", - "p-retry": "^4.4.0", + "p-retry": "^4.5.0", "portfinder": "^1.0.28", "schema-utils": "^3.0.0", "selfsigned": "^1.10.8", "serve-index": "^1.9.1", "sockjs": "^0.3.21", - "sockjs-client": "^1.5.0", "spdy": "^4.0.2", "strip-ansi": "^6.0.0", "url": "^0.11.0", - "util": "^0.12.3", "webpack-dev-middleware": "^4.1.0", "ws": "^7.4.4" }, @@ -29550,20 +29382,6 @@ "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "dev": true - }, - "util": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.3.tgz", - "integrity": "sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "safe-buffer": "^5.1.2", - "which-typed-array": "^1.1.2" - } } } }, @@ -29660,21 +29478,6 @@ "is-symbol": "^1.0.3" } }, - "which-typed-array": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", - "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", - "dev": true, - "requires": { - "available-typed-arrays": "^1.0.2", - "call-bind": "^1.0.0", - "es-abstract": "^1.18.0-next.1", - "foreach": "^2.0.5", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.1", - "is-typed-array": "^1.1.3" - } - }, "wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", @@ -29705,9 +29508,9 @@ "dev": true }, "ws": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", - "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", + "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", "dev": true, "requires": {} }, @@ -29718,9 +29521,9 @@ "dev": true }, "y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yallist": { diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index a71d8fed9..52c857fae 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -(()=>{"use strict";var e,t={977:()=>{var e=biigle.$require("messages").handleErrorResponse,t=biigle.$require("labelTrees.components.labelTrees");function s(e,t,s,r,n,a,i,o){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=s,u._compiled=!0),r&&(u.functional=!0),a&&(u._scopeId="data-v-"+a),i?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),n&&n.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(i)},u._ssrRegister=l):n&&(l=o?function(){n.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:n),l)if(u.functional){u._injectStyles=l;var p=u.render;u.render=function(e,t){return l.call(t),p(e,t)}}else{var c=u.beforeCreate;u.beforeCreate=c?[].concat(c,l):[l]}return{exports:e,options:u}}const r=s({mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:t},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,separate_users:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var s=t.name.split("\\");e.hasOwnProperty(s[0])||(e[s[0]]=[]),e[s[0]].push(s[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(s){t[s]=e.options[s]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(t){422===t.status?t.data.hasOwnProperty("errors")?this.errors=t.data.errors:this.errors=t.data:e(t)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))},"options.separate_label_trees":function(e){e&&(this.options.separate_users=!1)},"options.separate_users":function(e){e&&(this.options.separate_label_trees=!1)}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0];var e=biigle.$require("reports.labelTrees");e.forEach((function(e){e.labels.forEach((function(e){e.selected=!1}))})),this.labelTrees=e}},undefined,undefined,!1,null,null,null).exports,n=Vue.resource("/api/v1/projects{/id}/reports");const a=s({mixins:[r],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,n)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},undefined,undefined,!1,null,null,null).exports,i=Vue.resource("/api/v1/volumes{/id}/reports");const o=s({mixins:[r],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,i)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},undefined,undefined,!1,null,null,null).exports;biigle.$mount("project-report-form",a),biigle.$mount("volume-report-form",o)},608:()=>{}},s={};function r(e){var n=s[e];if(void 0!==n)return n.exports;var a=s[e]={exports:{}};return t[e](a,a.exports,r),a.exports}r.m=t,e=[],r.O=(t,s,n,a)=>{if(!s){var i=1/0;for(u=0;u=a)&&Object.keys(r.O).every((e=>r.O[e](s[l])))?s.splice(l--,1):(o=!1,a0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[s,n,a]},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={355:0,392:0};r.O.j=t=>0===e[t];var t=(t,s)=>{var n,a,[i,o,l]=s,u=0;for(n in o)r.o(o,n)&&(r.m[n]=o[n]);for(l&&l(r),t&&t(s);ur(977)));var n=r.O(void 0,[392],(()=>r(608)));n=r.O(n)})(); \ No newline at end of file +(()=>{"use strict";var e,t={977:()=>{var e=biigle.$require("messages").handleErrorResponse,t=biigle.$require("labelTrees.components.labelTrees");function s(e,t,s,r,n,a,i,o){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=s,u._compiled=!0),r&&(u.functional=!0),a&&(u._scopeId="data-v-"+a),i?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),n&&n.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(i)},u._ssrRegister=l):n&&(l=o?function(){n.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:n),l)if(u.functional){u._injectStyles=l;var p=u.render;u.render=function(e,t){return l.call(t),p(e,t)}}else{var c=u.beforeCreate;u.beforeCreate=c?[].concat(c,l):[l]}return{exports:e,options:u}}const r=s({mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:t},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,separate_users:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var s=t.name.split("\\");e.hasOwnProperty(s[0])||(e[s[0]]=[]),e[s[0]].push(s[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(s){t[s]=e.options[s]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(t){422===t.status?t.data.hasOwnProperty("errors")?this.errors=t.data.errors:this.errors=t.data:e(t)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))},"options.separate_label_trees":function(e){e&&(this.options.separate_users=!1)},"options.separate_users":function(e){e&&(this.options.separate_label_trees=!1)}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0];var e=biigle.$require("reports.labelTrees");e.forEach((function(e){e.labels.forEach((function(e){e.selected=!1}))})),this.labelTrees=e}},undefined,undefined,!1,null,null,null).exports,n=Vue.resource("/api/v1/projects{/id}/reports");const a=s({mixins:[r],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,n)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},undefined,undefined,!1,null,null,null).exports,i=Vue.resource("/api/v1/volumes{/id}/reports");const o=s({mixins:[r],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,i)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},undefined,undefined,!1,null,null,null).exports;biigle.$mount("project-report-form",a),biigle.$mount("volume-report-form",o)},608:()=>{}},s={};function r(e){var n=s[e];if(void 0!==n)return n.exports;var a=s[e]={exports:{}};return t[e](a,a.exports,r),a.exports}r.m=t,e=[],r.O=(t,s,n,a)=>{if(!s){var i=1/0;for(u=0;u=a)&&Object.keys(r.O).every((e=>r.O[e](s[l])))?s.splice(l--,1):(o=!1,a0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[s,n,a]},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={355:0,392:0};r.O.j=t=>0===e[t];var t=(t,s)=>{var n,a,[i,o,l]=s,u=0;for(n in o)r.o(o,n)&&(r.m[n]=o[n]);if(l)var p=l(r);for(t&&t(s);ur(977)));var n=r.O(void 0,[392],(()=>r(608)));n=r.O(n)})(); \ No newline at end of file diff --git a/src/public/mix-manifest.json b/src/public/mix-manifest.json index c96ab78af..16d4623af 100644 --- a/src/public/mix-manifest.json +++ b/src/public/mix-manifest.json @@ -1,5 +1,5 @@ { - "/assets/scripts/main.js": "/assets/scripts/main.js?id=3b3918253ea9fd5377c5", + "/assets/scripts/main.js": "/assets/scripts/main.js?id=0fe00724891a09ff26eb", "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=700f3dd4e7b6a390cec3", "/assets/styles/main.css": "/assets/styles/main.css?id=08891fcd37d185b1157e" } From d9fb2720f8e8b66d3dc880ef526db6d74eec95e0 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 2 Jun 2021 14:51:02 +0200 Subject: [PATCH 274/407] Update @biigle/ol --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8c204e510..fb9c6f9c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1471,9 +1471,9 @@ } }, "node_modules/@biigle/ol": { - "version": "5.3.0", - "resolved": "https://npm.pkg.github.com/download/@biigle/ol/5.3.0/d0711bd8db11d47db8ae07a4fd210506e4003d93760aca7fb1b8f8583e3756e8", - "integrity": "sha512-CR91F5cK8QsagVSsudozkqT3rGTwsykMaV9sobAUPdI2ygxvXHRXwlEUT4eeQWq450wNcJOjDmwWa05gnuujoQ==", + "version": "5.3.1", + "resolved": "https://npm.pkg.github.com/download/@biigle/ol/5.3.1/7679746c6bc5e2fcfd95ae524430992bb7a377e13ea7b7eb4640b21b677fc3b3", + "integrity": "sha512-j2MofoJbYeHJB8GsrcOjED7e7wl9k6yhEOFzt8TXz4Fn2aogO19gBn8KovrIQ9xFpXueNTcLre7lRUdZ3AeYBQ==", "license": "BSD-2-Clause", "dependencies": { "@turf/boolean-contains": "^6.0.1", @@ -17641,9 +17641,9 @@ } }, "@biigle/ol": { - "version": "5.3.0", - "resolved": "https://npm.pkg.github.com/download/@biigle/ol/5.3.0/d0711bd8db11d47db8ae07a4fd210506e4003d93760aca7fb1b8f8583e3756e8", - "integrity": "sha512-CR91F5cK8QsagVSsudozkqT3rGTwsykMaV9sobAUPdI2ygxvXHRXwlEUT4eeQWq450wNcJOjDmwWa05gnuujoQ==", + "version": "5.3.1", + "resolved": "https://npm.pkg.github.com/download/@biigle/ol/5.3.1/7679746c6bc5e2fcfd95ae524430992bb7a377e13ea7b7eb4640b21b677fc3b3", + "integrity": "sha512-j2MofoJbYeHJB8GsrcOjED7e7wl9k6yhEOFzt8TXz4Fn2aogO19gBn8KovrIQ9xFpXueNTcLre7lRUdZ3AeYBQ==", "requires": { "@turf/boolean-contains": "^6.0.1", "@turf/boolean-overlap": "^6.0.1", From 6ff55ef59ada2becd94c37997b808ea624025d45 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 2 Jun 2021 14:51:18 +0200 Subject: [PATCH 275/407] Update vulnerable npm dependencies --- package-lock.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index fb9c6f9c9..d25a43b9a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5360,9 +5360,9 @@ "dev": true }, "node_modules/dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, "dependencies": { "ip": "^1.1.0", @@ -16338,9 +16338,9 @@ "dev": true }, "node_modules/ws": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", - "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "dev": true, "engines": { "node": ">=8.3.0" @@ -20887,9 +20887,9 @@ "dev": true }, "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, "requires": { "ip": "^1.1.0", @@ -29508,9 +29508,9 @@ "dev": true }, "ws": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.5.tgz", - "integrity": "sha512-xzyu3hFvomRfXKH8vOFMU3OguG6oOvhXMo3xsGy3xWExqaM2dxBbVxuD99O7m3ZUFMvvscsZDqxfgMaRr/Nr1g==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", "dev": true, "requires": {} }, From 5875adac98df6d3537fe316961c02d9edeffc966 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 21 Jun 2021 12:33:08 +0200 Subject: [PATCH 276/407] Update vulnerable NPM packages --- package-lock.json | 34208 ++++++++++++++++---------------------------- 1 file changed, 12083 insertions(+), 22125 deletions(-) diff --git a/package-lock.json b/package-lock.json index d25a43b9a..4eedc6106 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,26 +34,29 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", - "dev": true + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.5.tgz", + "integrity": "sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", - "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.3", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.3", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -70,12 +73,15 @@ } }, "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/core/node_modules/semver": { @@ -88,46 +94,58 @@ } }, "node_modules/@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "dev": true, "dependencies": { - "@babel/types": "^7.14.2", + "@babel/types": "^7.14.5", "jsesc": "^2.5.1", "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", "dev": true, "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", "semver": "^6.3.0" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0" } @@ -142,39 +160,45 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz", - "integrity": "sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.14.3", - "@babel/helper-split-export-declaration": "^7.12.13" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", - "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", + "@babel/helper-annotate-as-pure": "^7.14.5", "regexpu-core": "^4.7.1" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", - "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.13.0", @@ -200,187 +224,243 @@ } }, "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", "dev": true, "dependencies": { - "@babel/types": "^7.13.0" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", - "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dev": true, "dependencies": { - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz", + "integrity": "sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==", "dev": true, "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dev": true, "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", - "dev": true + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", - "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "dev": true, "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", "dev": true, "dependencies": { - "@babel/types": "^7.13.12" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", "dev": true, "dependencies": { - "@babel/types": "^7.12.1" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dev": true, "dependencies": { - "@babel/types": "^7.12.13" + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", - "dev": true + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", "dev": true, "dependencies": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/highlight/node_modules/ansi-styles": { @@ -446,9 +526,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", - "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.6.tgz", + "integrity": "sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -458,217 +538,262 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.13.0" } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", - "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.5.tgz", + "integrity": "sha512-tbD/CG3l43FIXxmu4a7RBe4zH7MLJ+S/lFowPFO7HetS2hyOZ/0nnnznegDuzFzfkyQYTxqdTH/hKmuBngaDAA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", "@babel/plugin-syntax-async-generators": "^7.8.4" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", - "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", + "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.3", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-class-static-block": "^7.12.13" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.12.0" } }, "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", - "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", - "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", - "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-json-strings": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", - "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", - "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", - "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz", - "integrity": "sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.5.tgz", + "integrity": "sha512-VzMyY6PWNPPT3pxc5hi9LloKNr4SSrVCg7Yr6aZpW4Ym07r7KqSU/QXYwjXLVxqwSv0t/XSXkFoKBPUkZ8vb2A==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/compat-data": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.2" + "@babel/plugin-transform-parameters": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", - "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-plugin-utils": "^7.14.5", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", - "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-create-class-features-plugin": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=4" @@ -702,12 +827,15 @@ } }, "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", - "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -822,93 +950,114 @@ } }, "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz", - "integrity": "sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz", - "integrity": "sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", + "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", "globals": "^11.1.0" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } @@ -923,272 +1072,335 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", - "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.5.tgz", + "integrity": "sha512-wU9tYisEbRMxqDezKUqC9GleLycCRoUsai9ddlsq54r8QRLaeEhc+d+9DqCG+kV9W2GgQjTZESPTpn5bAFMDww==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", - "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helper-plugin-utils": "^7.13.0", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", - "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", + "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", + "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", "babel-plugin-dynamic-import-node": "^2.3.3" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", - "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.5.tgz", + "integrity": "sha512-+Xe5+6MWFo311U8SchgeX5c1+lJM+eZDBZgD+tvXu9VVQPXwwVzeManMMjYX6xw2HczngfOSZjoFYKwdeB/Jvw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", - "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", - "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", "dev": true, "dependencies": { "regenerator-transform": "^0.14.2" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz", - "integrity": "sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", + "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", "semver": "^6.3.0" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } @@ -1203,120 +1415,141 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.13.0" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/preset-env": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.2.tgz", - "integrity": "sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.14.2", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-class-static-block": "^7.13.11", - "@babel/plugin-proposal-dynamic-import": "^7.14.2", - "@babel/plugin-proposal-export-namespace-from": "^7.14.2", - "@babel/plugin-proposal-json-strings": "^7.14.2", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", - "@babel/plugin-proposal-numeric-separator": "^7.14.2", - "@babel/plugin-proposal-object-rest-spread": "^7.14.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", - "@babel/plugin-proposal-optional-chaining": "^7.14.2", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-private-property-in-object": "^7.14.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.5.tgz", + "integrity": "sha512-ci6TsS0bjrdPpWGnQ+m4f+JSSzDKlckqKIJJt9UZ/+g7Zz9k0N8lYU8IeLg/01o2h8LyNZDMLGgRLDTxpudLsA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-async-generator-functions": "^7.14.5", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.14.5", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.14.5", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", "@babel/plugin-syntax-json-strings": "^7.8.3", @@ -1326,48 +1559,51 @@ "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.14.2", - "@babel/plugin-transform-classes": "^7.14.2", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.17", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.14.2", - "@babel/plugin-transform-modules-commonjs": "^7.14.0", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.14.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.14.2", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.13.15", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.14.5", + "@babel/plugin-transform-classes": "^7.14.5", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.5", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.14.5", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.14.5", + "@babel/plugin-transform-modules-systemjs": "^7.14.5", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.5", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.14.5", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@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.5", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.2", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "core-js-compat": "^3.9.0", + "@babel/types": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.14.0", "semver": "^6.3.0" }, + "engines": { + "node": ">=6.9.0" + }, "peerDependencies": { "@babel/core": "^7.0.0-0" } @@ -1398,57 +1634,73 @@ } }, "node_modules/@babel/runtime": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", - "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.5.tgz", + "integrity": "sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5", "debug": "^4.1.0", "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "dependencies": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/traverse/node_modules/globals": { @@ -1461,13 +1713,16 @@ } }, "node_modules/@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", + "@babel/helper-validator-identifier": "^7.14.5", "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@biigle/ol": { @@ -1540,12 +1795,12 @@ } }, "node_modules/@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.4", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" }, "engines": { @@ -1553,27 +1808,36 @@ } }, "node_modules/@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" }, "engines": { "node": ">= 8" } }, + "node_modules/@trysound/sax": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", + "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/@turf/area": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.3.0.tgz", @@ -1797,341 +2061,172 @@ "@babel/types": "^7.3.0" } }, - "node_modules/@types/browser-sync": { - "version": "2.26.1", - "resolved": "https://registry.npmjs.org/@types/browser-sync/-/browser-sync-2.26.1.tgz", - "integrity": "sha512-zuz0uF2QccSVbG4ubkjVDlQYpeBX/JXvmlqFFmp04FYOXunXZtx0y+UdWJxu7uryMMGkQykujUMm/ju85kqI7Q==", + "node_modules/@types/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-x8xEbfTtcv5uyQDrBXKg9Beo5QhTPqO4vM0uq4iU27/nhyRRWNEMKHjxvAb0WDvp2Mnt4Sw0jKmIi5yQF/k2Ag==", "dev": true, "dependencies": { - "@types/micromatch": "^2", "@types/node": "*", - "@types/serve-static": "*", - "chokidar": "^2.1.2" - } - }, - "node_modules/@types/browser-sync/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/@types/browser-sync/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "source-map": "^0.6.0" } }, - "node_modules/@types/browser-sync/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "node_modules/@types/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/@types/browser-sync/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/@types/eslint": { + "version": "7.2.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", + "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==", "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "@types/estree": "*", + "@types/json-schema": "*" } }, - "node_modules/@types/browser-sync/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "node_modules/@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", "dev": true, "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" + "@types/eslint": "*", + "@types/estree": "*" } }, - "node_modules/@types/browser-sync/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/@types/estree": { + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", + "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", + "dev": true }, - "node_modules/@types/browser-sync/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "dev": true, "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" + "@types/minimatch": "*", + "@types/node": "*" } }, - "node_modules/@types/browser-sync/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "node_modules/@types/http-proxy": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.6.tgz", + "integrity": "sha512-+qsjqR75S/ib0ig0R9WN+CDoZeOBU6F2XLewgC4KVgdXiNHiKKHFEMRHOrs5PbYE97D5vataw5wPj4KLYfUkuQ==", "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" + "@types/node": "*" } }, - "node_modules/@types/browser-sync/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "node_modules/@types/imagemin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-7.0.0.tgz", + "integrity": "sha512-BiNd5FazD5ZmJUYD9txsbrttL0P0welrb9yAPn6ykKK3kWufwFsxYqw5KdggfZQDjiNYwsBrX+Fwei0Xsw4oAw==", "dev": true, "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "@types/node": "*" } }, - "node_modules/@types/browser-sync/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "node_modules/@types/imagemin-gifsicle": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz", + "integrity": "sha512-RVFQZhPm/6vLC8wDvzHa34ZDrJECqmDV4XBS99AEk2ObyV4pcLQwObGYlmBv6fi9AtRLHf8mnKGczIHtF77u7w==", "dev": true, "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" + "@types/imagemin": "*" } }, - "node_modules/@types/browser-sync/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/@types/imagemin-mozjpeg": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz", + "integrity": "sha512-sR2nEZOrlbgnmVgG+lXetZOvhgtctLe1hBfvySnPnxDd2pOon9mMPq7SHFI89VZT1AXvFgRs8w6X8ik8potpgA==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@types/imagemin": "*" } }, - "node_modules/@types/browser-sync/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "node_modules/@types/imagemin-optipng": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.0.tgz", + "integrity": "sha512-Qn4gTV1fpPG2WIsUIl10yi2prudOuDIx+D+O0H3aKZRcTCwpMjszBVeRWUqkhG5wADhWO4giLut1sFNr3H2XIQ==", "dev": true, "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@types/imagemin": "*" } }, - "node_modules/@types/browser-sync/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/@types/imagemin-svgo": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-8.0.1.tgz", + "integrity": "sha512-YafkdrVAcr38U0Ln1C+L1n4SIZqC47VBHTyxCq7gTUSd1R9MdIvMcrljWlgU1M9O68WZDeQWUrKipKYfEOCOvQ==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@types/imagemin": "*", + "@types/svgo": "^1" } }, - "node_modules/@types/browser-sync/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true }, - "node_modules/@types/browser-sync/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/@types/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", + "dev": true }, - "node_modules/@types/browser-sync/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/@types/node": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.0.tgz", + "integrity": "sha512-8/bnjSZD86ZfpBsDlCIkNXIvm+h6wi9g7IqL+kmFkQ+Wvu3JrasgLElfiPgoo8V8vVfnEi0QVS12gbl94h9YsQ==", + "dev": true }, - "node_modules/@types/browser-sync/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@types/browser-sync/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true }, - "node_modules/@types/browser-sync/node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true }, - "node_modules/@types/browser-sync/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } + "node_modules/@types/svgo": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.5.tgz", + "integrity": "sha512-y9Pw8IK50OqFRDpdI9Is29KlWiENVW9FDvlTmGHelvTfR2brYFJbsClvulZfeq6YKacFrDsG9a39w0kJZdHLaw==", + "dev": true }, - "node_modules/@types/browser-sync/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "node_modules/@vue/component-compiler-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz", + "integrity": "sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.14", + "postcss-selector-parser": "^6.0.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@types/clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-x8xEbfTtcv5uyQDrBXKg9Beo5QhTPqO4vM0uq4iU27/nhyRRWNEMKHjxvAb0WDvp2Mnt4Sw0jKmIi5yQF/k2Ag==", - "dev": true, - "dependencies": { - "@types/node": "*", - "source-map": "^0.6.0" - } - }, - "node_modules/@types/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@types/cssnano": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/cssnano/-/cssnano-4.0.0.tgz", - "integrity": "sha512-BC/2ibKZfPIaBLBNzkitdW1IvvX/LKW6/QXGc4Su/tAJ7mQ3f2CKBuGCCKaqGAnoKwzfuC7G/recpkARwdOwuA==", - "dev": true, - "dependencies": { - "postcss": "5 - 7" + "optionalDependencies": { + "prettier": "^1.18.2" } }, - "node_modules/@types/cssnano/node_modules/ansi-styles": { + "node_modules/@vue/component-compiler-utils/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", @@ -2143,7 +2238,7 @@ "node": ">=4" } }, - "node_modules/@types/cssnano/node_modules/chalk": { + "node_modules/@vue/component-compiler-utils/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", @@ -2157,7 +2252,7 @@ "node": ">=4" } }, - "node_modules/@types/cssnano/node_modules/chalk/node_modules/supports-color": { + "node_modules/@vue/component-compiler-utils/node_modules/chalk/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", @@ -2169,7 +2264,7 @@ "node": ">=4" } }, - "node_modules/@types/cssnano/node_modules/color-convert": { + "node_modules/@vue/component-compiler-utils/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", @@ -2178,13 +2273,13 @@ "color-name": "1.1.3" } }, - "node_modules/@types/cssnano/node_modules/color-name": { + "node_modules/@vue/component-compiler-utils/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "node_modules/@types/cssnano/node_modules/has-flag": { + "node_modules/@vue/component-compiler-utils/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", @@ -2193,10 +2288,10 @@ "node": ">=4" } }, - "node_modules/@types/cssnano/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "node_modules/@vue/component-compiler-utils/node_modules/postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "dependencies": { "chalk": "^2.4.2", @@ -2211,7 +2306,7 @@ "url": "https://opencollective.com/postcss/" } }, - "node_modules/@types/cssnano/node_modules/source-map": { + "node_modules/@vue/component-compiler-utils/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", @@ -2220,7 +2315,7 @@ "node": ">=0.10.0" } }, - "node_modules/@types/cssnano/node_modules/supports-color": { + "node_modules/@vue/component-compiler-utils/node_modules/supports-color": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", @@ -2232,3454 +2327,3358 @@ "node": ">=6" } }, - "node_modules/@types/eslint": { - "version": "7.2.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", - "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==", + "node_modules/@webassemblyjs/ast": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", "dev": true, "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", "dev": true, "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@xtuc/long": "4.2.2" } }, - "node_modules/@types/estree": { - "version": "0.0.47", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", - "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", "dev": true }, - "node_modules/@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", "dev": true, "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" } }, - "node_modules/@types/http-proxy": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.6.tgz", - "integrity": "sha512-+qsjqR75S/ib0ig0R9WN+CDoZeOBU6F2XLewgC4KVgdXiNHiKKHFEMRHOrs5PbYE97D5vataw5wPj4KLYfUkuQ==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", "dev": true, "dependencies": { - "@types/node": "*" + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/@types/imagemin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-7.0.0.tgz", - "integrity": "sha512-BiNd5FazD5ZmJUYD9txsbrttL0P0welrb9yAPn6ykKK3kWufwFsxYqw5KdggfZQDjiNYwsBrX+Fwei0Xsw4oAw==", + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", "dev": true, "dependencies": { - "@types/node": "*" + "@xtuc/long": "4.2.2" } }, - "node_modules/@types/imagemin-gifsicle": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz", - "integrity": "sha512-RVFQZhPm/6vLC8wDvzHa34ZDrJECqmDV4XBS99AEk2ObyV4pcLQwObGYlmBv6fi9AtRLHf8mnKGczIHtF77u7w==", + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", "dev": true, "dependencies": { - "@types/imagemin": "*" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" } }, - "node_modules/@types/imagemin-mozjpeg": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz", - "integrity": "sha512-sR2nEZOrlbgnmVgG+lXetZOvhgtctLe1hBfvySnPnxDd2pOon9mMPq7SHFI89VZT1AXvFgRs8w6X8ik8potpgA==", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", "dev": true, "dependencies": { - "@types/imagemin": "*" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, - "node_modules/@types/imagemin-optipng": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.0.tgz", - "integrity": "sha512-Qn4gTV1fpPG2WIsUIl10yi2prudOuDIx+D+O0H3aKZRcTCwpMjszBVeRWUqkhG5wADhWO4giLut1sFNr3H2XIQ==", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", "dev": true, "dependencies": { - "@types/imagemin": "*" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" } }, - "node_modules/@types/imagemin-svgo": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-8.0.1.tgz", - "integrity": "sha512-YafkdrVAcr38U0Ln1C+L1n4SIZqC47VBHTyxCq7gTUSd1R9MdIvMcrljWlgU1M9O68WZDeQWUrKipKYfEOCOvQ==", + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", "dev": true, "dependencies": { - "@types/imagemin": "*", - "@types/svgo": "^1" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, - "node_modules/@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "dev": true - }, - "node_modules/@types/micromatch": { - "version": "2.3.30", - "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-2.3.30.tgz", - "integrity": "sha512-6rW4NsUHaDudxJSuRlm1PdNu61CDXkgix7LBOBg7b3yWQ43XANYSPwkvX1cGiZvBVZW8c5rsCEfrfzbPkch8ag==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", "dev": true, "dependencies": { - "@types/parse-glob": "*" + "@webassemblyjs/ast": "1.11.0", + "@xtuc/long": "4.2.2" } }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.0.tgz", - "integrity": "sha512-8/bnjSZD86ZfpBsDlCIkNXIvm+h6wi9g7IqL+kmFkQ+Wvu3JrasgLElfiPgoo8V8vVfnEi0QVS12gbl94h9YsQ==", - "dev": true + "node_modules/@webpack-cli/configtest": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.4.tgz", + "integrity": "sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ==", + "dev": true, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } }, - "node_modules/@types/parse-glob": { - "version": "3.0.29", - "resolved": "https://registry.npmjs.org/@types/parse-glob/-/parse-glob-3.0.29.tgz", - "integrity": "sha1-akDsfr0kGO5p7jl+SOQhaSaKEL8=", - "dev": true + "node_modules/@webpack-cli/info": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.3.0.tgz", + "integrity": "sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w==", + "dev": true, + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "node_modules/@webpack-cli/serve": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.5.1.tgz", + "integrity": "sha512-4vSVUiOPJLmr45S8rMGy7WDvpWxfFxfP/Qx/cxZFCfvoypTYpPPL1X8VIZMe0WTA+Jr7blUxwUSEZNkjoMTgSw==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } }, - "node_modules/@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "node_modules/@types/serve-static": { - "version": "1.13.9", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", - "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, "dependencies": { - "@types/mime": "^1", - "@types/node": "*" + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/@types/svgo": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.5.tgz", - "integrity": "sha512-y9Pw8IK50OqFRDpdI9Is29KlWiENVW9FDvlTmGHelvTfR2brYFJbsClvulZfeq6YKacFrDsG9a39w0kJZdHLaw==", - "dev": true - }, - "node_modules/@vue/component-compiler-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz", - "integrity": "sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==", + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, - "dependencies": { - "consolidate": "^0.15.1", - "hash-sum": "^1.0.2", - "lru-cache": "^4.1.2", - "merge-source-map": "^1.1.0", - "postcss": "^7.0.14", - "postcss-selector-parser": "^6.0.2", - "source-map": "~0.6.1", - "vue-template-es2015-compiler": "^1.9.0" + "bin": { + "acorn": "bin/acorn" }, - "optionalDependencies": { - "prettier": "^1.18.2" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@vue/component-compiler-utils/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", + "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" }, "engines": { - "node": ">=4" + "node": ">=8.9" } }, - "node_modules/@vue/component-compiler-utils/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/@vue/component-compiler-utils/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@vue/component-compiler-utils/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "peerDependencies": { + "ajv": "^6.9.1" } }, - "node_modules/@vue/component-compiler-utils/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", "dev": true }, - "node_modules/@vue/component-compiler-utils/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/@vue/component-compiler-utils/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "type-fest": "^0.21.3" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vue/component-compiler-utils/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vue/component-compiler-utils/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@xtuc/long": "4.2.2" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" + "sprintf-js": "~1.0.2" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "node_modules/arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "dev": true + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "engines": { + "node": ">=8" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, "dependencies": { - "@xtuc/long": "4.2.2" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" + "object-assign": "^4.1.1", + "util": "0.10.3" } }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "inherits": "2.0.1" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" + "engines": { + "node": ">=8" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "lodash": "^4.17.14" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@xtuc/long": "4.2.2" + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" } }, - "node_modules/@webpack-cli/configtest": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz", - "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==", + "node_modules/autoprefixer": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.6.tgz", + "integrity": "sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg==", "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-lite": "^1.0.30001230", + "colorette": "^1.2.2", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" + "postcss": "^8.1.0" } }, - "node_modules/@webpack-cli/info": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz", - "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==", + "node_modules/babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", "dev": true, "dependencies": { - "envinfo": "^7.7.3" + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" }, "peerDependencies": { - "webpack-cli": "4.x.x" + "@babel/core": "^7.0.0", + "webpack": ">=2" } }, - "node_modules/@webpack-cli/serve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", - "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", + "node_modules/babel-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" + "dependencies": { + "minimist": "^1.2.0" }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "node_modules/babel-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">=4.0.0" } }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=0.4.0" + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "dependencies": { + "object.assign": "^4.1.0" } }, - "node_modules/adjust-sourcemap-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", - "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", "dev": true, "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" }, - "engines": { - "node": ">=8.9" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", + "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.14.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.2.2" + }, "peerDependencies": { - "ajv": "^6.9.1" + "@babel/core": "^7.0.0-0" } }, - "node_modules/alphanum-sort": { + "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, - "engines": { - "node": ">=6" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" + "node": "*" } }, - "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">= 0.8" } }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, "engines": { - "node": ">= 8" + "node": ">= 0.8" } }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "sprintf-js": "~1.0.2" + "ms": "2.0.0" } }, - "node_modules/arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, "engines": { "node": ">=8" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "dependencies": { - "bn.js": "^4.0.0", + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "safe-buffer": "^5.0.1" } }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "dependencies": { - "inherits": "2.0.1" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" } }, - "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "dependencies": { - "lodash": "^4.17.14" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, - "engines": { - "node": ">= 4.0.0" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" + "dependencies": { + "pako": "~1.0.5" } }, - "node_modules/autoprefixer": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz", - "integrity": "sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==", + "node_modules/browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "dependencies": { - "browserslist": "^4.16.3", - "caniuse-lite": "^1.0.30001196", + "caniuse-lite": "^1.0.30001219", "colorette": "^1.2.2", - "fraction.js": "^4.0.13", - "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" }, "bin": { - "autoprefixer": "bin/autoprefixer" + "browserslist": "cli.js" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", - "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" + "url": "https://opencollective.com/browserslist" } }, - "node_modules/babel-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, "engines": { - "node": ">= 8.9.0" + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, - "dependencies": { - "object.assign": "^4.1.0" + "engines": { + "node": ">=6" } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", - "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.0", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" } }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", - "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", + "node_modules/caniuse-lite": { + "version": "1.0.30001239", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz", + "integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==", "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.0", - "core-js-compat": "^3.9.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", - "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", + "node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.0" + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" } }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0" } }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/ci-info": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", + "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", + "dev": true + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/clean-css": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz", + "integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "source-map": "~0.6.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.0" } }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/batch": { + "node_modules/clean-css/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/binary-extensions": { + "node_modules/clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "node_modules/cli-table3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", + "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", "dev": true, - "optional": true, "dependencies": { - "file-uri-to-path": "1.0.0" + "object-assign": "^4.1.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "colors": "^1.1.2" } }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true - }, - "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "engines": { - "node": ">= 0.8" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=6" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/collect.js": { + "version": "4.28.6", + "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.28.6.tgz", + "integrity": "sha512-NAyuk1DnCotRaDZIS5kJ4sptgkwOeYqElird10yziN5JBuwYOGkOTguhNcPn5g344IfylZecxNYZAVXgv19p5Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "ms": "2.0.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } + "node_modules/colord": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.0.1.tgz", + "integrity": "sha512-vm5YpaWamD0Ov6TSG0GGmUIwstrWcfKQV/h2CmbR7PbNu41+qdB5PW9lpzhjedrpm08uuYvcXi0Oel1RLZIJuA==", + "dev": true }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "node_modules/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "optional": true, + "engines": { + "node": ">=0.1.90" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "node_modules/compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", "dev": true, "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "arity-n": "^1.0.4" } }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "ms": "2.0.0" } }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "node_modules/concat": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", + "integrity": "sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=", "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "commander": "^2.9.0" + }, + "bin": { + "concat": "bin/concat" }, "engines": { - "node": ">= 6" + "node": ">=6" } }, - "node_modules/browserify-sign/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "node_modules/concat/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true, - "dependencies": { - "pako": "~1.0.5" + "engines": { + "node": ">=0.8" } }, - "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "node_modules/consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", "dev": true }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", "dev": true }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "node_modules/consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", "dev": true, "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "bluebird": "^3.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10.0" } }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dev": true, "dependencies": { - "callsites": "^2.0.0" + "safe-buffer": "5.1.2" }, "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/caller-callsite/node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", "dev": true, "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" + "safe-buffer": "~5.1.1" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "dev": true, "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true }, - "node_modules/camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "node_modules/core-js-compat": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.0.tgz", + "integrity": "sha512-8X6lWsG+s7IfOKzV93a7fRYfWRZobOfjw5V5rrq43Vh/W+V6qYxl7Akalsvgab4PFT/4L/pjQbdBUEM36NXKrw==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "browserslist": "^4.16.6", + "semver": "7.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001228", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", - "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, - "node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.1" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" } }, - "node_modules/ci-info": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", - "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "dependencies": { + "cipher-base": "^1.0.1", "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "node_modules/clean-css": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz", - "integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==", + "node_modules/cross-env": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", + "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", "dev": true, "dependencies": { - "source-map": "~0.6.0" + "cross-spawn": "^6.0.5" + }, + "bin": { + "cross-env": "dist/bin/cross-env.js", + "cross-env-shell": "dist/bin/cross-env-shell.js" }, "engines": { - "node": ">= 10.0" + "node": ">=4.0" } }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4.8" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", "dev": true, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/cli-table3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", - "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "dependencies": { - "object-assign": "^4.1.0", - "string-width": "^4.2.0" + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" }, "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "colors": "^1.1.2" + "node": "*" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", "dev": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/css-color-names": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", + "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "node_modules/css-declaration-sorter": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", + "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", "dev": true, "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" + "timsort": "^0.3.0" }, "engines": { - "node": ">= 4.0" + "node": ">= 10" + }, + "peerDependencies": { + "postcss": "^8.0.9" } }, - "node_modules/coa/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/css-loader": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", + "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" }, "engines": { - "node": ">=4" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" } }, - "node_modules/coa/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/css-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/coa/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/css-loader/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/coa/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "node_modules/css-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/css-select": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", + "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^4.0.0", + "domhandler": "^4.0.0", + "domutils": "^2.4.3", + "nth-check": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/coa/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/css-select/node_modules/domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "domelementtype": "^2.2.0" }, "engines": { - "node": ">=4" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/collect.js": { - "version": "4.28.6", - "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.28.6.tgz", - "integrity": "sha512-NAyuk1DnCotRaDZIS5kJ4sptgkwOeYqElird10yziN5JBuwYOGkOTguhNcPn5g344IfylZecxNYZAVXgv19p5Q==", - "dev": true - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0.0" } }, - "node_modules/color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "dependencies": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/css-what": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", + "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "node_modules/css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, - "optional": true, + "bin": { + "cssesc": "bin/cssesc" + }, "engines": { - "node": ">=0.1.90" + "node": ">=4" } }, - "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/cssnano": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", + "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "cssnano-preset-default": "^5.1.3", + "is-resolvable": "^1.1.0" + }, "engines": { - "node": ">= 10" + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", - "dev": true, - "dependencies": { - "arity-n": "^1.0.4" + "node_modules/cssnano-preset-default": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", + "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^2.0.1", + "postcss-calc": "^8.0.0", + "postcss-colormin": "^5.2.0", + "postcss-convert-values": "^5.0.1", + "postcss-discard-comments": "^5.0.1", + "postcss-discard-duplicates": "^5.0.1", + "postcss-discard-empty": "^5.0.1", + "postcss-discard-overridden": "^5.0.1", + "postcss-merge-longhand": "^5.0.2", + "postcss-merge-rules": "^5.0.2", + "postcss-minify-font-values": "^5.0.1", + "postcss-minify-gradients": "^5.0.1", + "postcss-minify-params": "^5.0.1", + "postcss-minify-selectors": "^5.1.0", + "postcss-normalize-charset": "^5.0.1", + "postcss-normalize-display-values": "^5.0.1", + "postcss-normalize-positions": "^5.0.1", + "postcss-normalize-repeat-style": "^5.0.1", + "postcss-normalize-string": "^5.0.1", + "postcss-normalize-timing-functions": "^5.0.1", + "postcss-normalize-unicode": "^5.0.1", + "postcss-normalize-url": "^5.0.2", + "postcss-normalize-whitespace": "^5.0.1", + "postcss-ordered-values": "^5.0.2", + "postcss-reduce-initial": "^5.0.1", + "postcss-reduce-transforms": "^5.0.1", + "postcss-svgo": "^5.0.2", + "postcss-unique-selectors": "^5.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/cssnano-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", + "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, "engines": { - "node": ">= 0.6" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "css-tree": "^1.1.2" }, "engines": { - "node": ">= 0.8.0" + "node": ">=8.0.0" } }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, "dependencies": { - "ms": "2.0.0" + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", "dev": true }, - "node_modules/concat": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", - "integrity": "sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=", + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, "dependencies": { - "commander": "^2.9.0" - }, - "bin": { - "concat": "bin/concat" + "ms": "2.1.2" }, "engines": { - "node": ">=6" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/concat/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true, "engines": { - "node": ">=0.8" + "node": ">=0.10" } }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", - "dev": true + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "node_modules/consolidate": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", - "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, "dependencies": { - "bluebird": "^3.1.1" + "execa": "^5.0.0" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 10" } }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dependencies": { - "safe-buffer": "5.1.2" + "object-keys": "^1.0.12" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.4" } }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "node_modules/del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", "dev": true, + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "node_modules/del/node_modules/globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "dependencies": { - "safe-buffer": "~5.1.1" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "node_modules/del/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">= 4" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/core-js-compat": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz", - "integrity": "sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==", + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, - "node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, - "node_modules/cosmiconfig/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "path-type": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/cosmiconfig/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "node_modules/dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "buffer-indexof": "^1.0.0" } }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "node_modules/cross-env": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", - "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", + "node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "dependencies": { - "cross-spawn": "^6.0.5" - }, - "bin": { - "cross-env": "dist/bin/cross-env.js", - "cross-env-shell": "dist/bin/cross-env-shell.js" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" }, - "engines": { - "node": ">=4.0" + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/dom-serializer/node_modules/domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "domelementtype": "^2.2.0" }, "engines": { - "node": ">=4.8" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true, "engines": { - "node": "*" + "node": ">=0.4", + "npm": ">=1.2" } }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", "dev": true, "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "domelementtype": "^2.0.1" }, "engines": { - "node": "*" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "node_modules/domutils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", + "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", "dev": true, "dependencies": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "node_modules/domutils/node_modules/domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "dependencies": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" + "domelementtype": "^2.2.0" }, "engines": { - "node": ">4" - } - }, - "node_modules/css-declaration-sorter/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" + "node": ">= 4" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/css-declaration-sorter/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/css-declaration-sorter/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/css-declaration-sorter/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.3.730", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.730.tgz", + "integrity": "sha512-1Tr3h09wXhmqXnvDyrRe6MFgTeU0ZXy3+rMJWTrOHh/HNesWwBBrKnMxRJWZ86dzs8qQdw2c7ZE1/qeGHygImA==", + "dev": true + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/css-declaration-sorter/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/css-declaration-sorter/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, - "node_modules/css-declaration-sorter/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">= 4" } }, - "node_modules/css-declaration-sorter/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/css-declaration-sorter/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/enhanced-resolve": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=6" + "node": ">=10.13.0" } }, - "node_modules/css-loader": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.4.tgz", - "integrity": "sha512-OFYGyINCKkdQsTrSYxzGSFnGS4gNjcXkKkQgWxK138jgnPt+lepxdjSZNc8sHAl5vP3DhsJUxufWIjOwI8PMMw==", + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, "dependencies": { - "camelcase": "^6.2.0", - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.10", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" + "ansi-colors": "^4.1.1" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" + "node": ">=8.6" } }, - "node_modules/css-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { - "semver": "bin/semver.js" + "envinfo": "dist/cli.js" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/css-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "is-arrayish": "^0.2.1" } }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "node_modules/es-module-lexer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", + "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", "dev": true }, - "node_modules/css-select/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "node_modules/es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", "dev": true, "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" } }, - "node_modules/css-select/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "node_modules/css-select/node_modules/domutils/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "node": ">=6" } }, - "node_modules/css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/eslint": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", + "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.21", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, "bin": { - "cssesc": "bin/cssesc" + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=4" + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/cssnano": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", - "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "node_modules/eslint-plugin-vue": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.9.0.tgz", + "integrity": "sha512-2Q0qQp5+5h+pZvJKCbG1/jCRUYrdgAz5BYKGyTlp2NU8mx09u3Hp7PsH6d5qef6ojuPoCXMnrbbDxeoplihrSw==", "dev": true, "dependencies": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.8", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" + "eslint-utils": "^2.1.0", + "natural-compare": "^1.4.0", + "semver": "^7.3.2", + "vue-eslint-parser": "^7.6.0" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-preset-default": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", - "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.3", - "postcss-unique-selectors": "^4.0.1" + "node": ">=8.10" }, - "engines": { - "node": ">=6.9.0" + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0" } }, - "node_modules/cssnano-preset-default/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/eslint-plugin-vue/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/cssnano-preset-default/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/cssnano-preset-default/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/eslint-plugin-vue/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">=4" + "node": ">=8.0.0" } }, - "node_modules/cssnano-preset-default/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/cssnano-preset-default/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/cssnano-preset-default/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "engines": { "node": ">=4" } }, - "node_modules/cssnano-preset-default/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">=10" } }, - "node_modules/cssnano-preset-default/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/eslint/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/cssnano-preset-default/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/eslint/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "node_modules/eslint/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "node_modules/eslint/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=6.9.0" + "node": ">=10" } }, - "node_modules/cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "node_modules/eslint/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { - "postcss": "^7.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/cssnano-util-raw-cache/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/eslint/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/cssnano-util-raw-cache/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/eslint/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/cssnano-util-raw-cache/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/eslint/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" }, "engines": { - "node": ">=4" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/cssnano-util-raw-cache/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "engines": { + "node": ">=4" } }, - "node_modules/cssnano-util-raw-cache/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/cssnano-util-raw-cache/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { "node": ">=4" } }, - "node_modules/cssnano-util-raw-cache/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">=0.10" } }, - "node_modules/cssnano-util-raw-cache/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4.0" } }, - "node_modules/cssnano-util-raw-cache/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=6" + "node": ">=4.0" } }, - "node_modules/cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", "dev": true, "engines": { - "node": ">=6.9.0" + "node": ">=4.0" } }, - "node_modules/cssnano/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, "engines": { - "node": ">=4" + "node": ">=4.0" } }, - "node_modules/cssnano/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/cssnano/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" + "node": ">= 0.6" } }, - "node_modules/cssnano/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, - "node_modules/cssnano/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "engines": { - "node": ">=4" + "node": ">=0.8.x" } }, - "node_modules/cssnano/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "node_modules/cssnano/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/cssnano/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/execa/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">= 8" } }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "node_modules/execa/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "dependencies": { - "css-tree": "^1.1.2" - }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "node_modules/execa/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=8" } }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/csso/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/execa/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "node_modules/execa/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dev": true, "dependencies": { - "ms": "2.1.2" + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 0.10.0" } }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "engines": { - "node": ">=0.10" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "^2.0.0" } }, - "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "node_modules/ext/node_modules/type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", "dev": true }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "dev": true, "dependencies": { - "execa": "^5.0.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" }, "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" + "reusify": "^1.0.4" } }, - "node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "dependencies": { - "is-descriptor": "^0.1.0" + "websocket-driver": ">=0.5.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, - "node_modules/del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/del/node_modules/globby": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", - "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/del/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, "engines": { - "node": ">= 4" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "node_modules/file-type": { + "version": "12.4.2", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", + "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, "dependencies": { - "path-type": "^4.0.0" + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "node_modules/dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" + "ms": "2.0.0" } }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "dependencies": { - "buffer-indexof": "^1.0.0" - } + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "node": ">=8" }, "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/dom-serializer/node_modules/domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "domelementtype": "^2.2.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "node": ">=8" } }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">=0.4", - "npm": ">=1.2" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "node_modules/flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/fb55" + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" } - ] - }, - "node_modules/domhandler": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", - "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1" - }, + ], "engines": { - "node": ">= 4" + "node": ">=4.0" }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/domutils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", - "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "engines": { + "node": ">= 0.6" } }, - "node_modules/domutils/node_modules/domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "node_modules/fraction.js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", + "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, "engines": { - "node": ">= 4" + "node": "*" }, "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "type": "patreon", + "url": "https://www.patreon.com/infusion" } }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "engines": { + "node": ">= 0.6" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "node_modules/fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, "dependencies": { - "is-obj": "^2.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "node_modules/ee-first": { + "node_modules/function-bind": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "node_modules/electron-to-chromium": { - "version": "1.3.730", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.730.tgz", - "integrity": "sha512-1Tr3h09wXhmqXnvDyrRe6MFgTeU0ZXy3+rMJWTrOHh/HNesWwBBrKnMxRJWZ86dzs8qQdw2c7ZE1/qeGHygImA==", + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "node_modules/geojson-equality": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/geojson-equality/-/geojson-equality-0.1.6.tgz", + "integrity": "sha1-oXE3TvBD5dR5eZWEC65GSOB1LXI=", + "dependencies": { + "deep-equal": "^1.0.0" + } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "node_modules/geojson-rbush": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.1.2.tgz", + "integrity": "sha512-grkfdg3HIeTjwTfiJe5FT8+fGU3fABCc+vRJDBwdQz9kkLF0Sbif2gs2JUzjewwgmnvLGy9fInySDeADoNuk7w==", + "dependencies": { + "@turf/bbox": "*", + "@turf/helpers": "6.x", + "@turf/meta": "6.x", + "rbush": "^2.0.0" + } }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { - "node": ">= 4" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=10.13.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { - "ansi-colors": "^4.1.1" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=8.6" + "node": ">= 6" } }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "node_modules/globals": { + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", "dev": true, - "bin": { - "envinfo": "dist/cli.js" + "dependencies": { + "type-fest": "^0.20.2" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", "dev": true, "dependencies": { - "is-arrayish": "^0.2.1" + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", + "node_modules/globby/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 4" } }, - "node_modules/es-module-lexer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", - "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "function-bind": "^1.1.1" }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "engines": { "node": ">= 0.4" }, @@ -5687,1450 +5686,1467 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" } }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "engines": { - "node": ">=6" + "bin": { + "he": "bin/he" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", "dev": true }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, - "engines": { - "node": ">=0.8.0" + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/eslint": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", - "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.21", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "node_modules/eslint-plugin-vue": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.9.0.tgz", - "integrity": "sha512-2Q0qQp5+5h+pZvJKCbG1/jCRUYrdgAz5BYKGyTlp2NU8mx09u3Hp7PsH6d5qef6ojuPoCXMnrbbDxeoplihrSw==", + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "node_modules/html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true + }, + "node_modules/html-loader": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz", + "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==", "dev": true, "dependencies": { - "eslint-utils": "^2.1.0", - "natural-compare": "^1.4.0", - "semver": "^7.3.2", - "vue-eslint-parser": "^7.6.0" + "html-minifier-terser": "^5.1.1", + "htmlparser2": "^4.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "engines": { - "node": ">=8.10" + "node": ">= 10.13.0" }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0" - } - }, - "node_modules/eslint-plugin-vue/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/eslint-plugin-vue/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" }, "bin": { - "semver": "bin/semver.js" + "html-minifier-terser": "cli.js" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/eslint-plugin-vue/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/html-minifier-terser/node_modules/clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "source-map": "~0.6.0" }, "engines": { - "node": ">=8.0.0" + "node": ">= 4.0" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": ">= 6" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/html-minifier-terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/html-minifier-terser/node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" }, "engines": { - "node": ">= 8" + "node": ">=6.0.0" } }, - "node_modules/eslint/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/html-minifier-terser/node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", + "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", "dev": true, "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" } }, - "node_modules/eslint/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=8.0.0" } }, - "node_modules/eslint/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/http-proxy-middleware": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", + "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", "dev": true, "dependencies": { - "shebang-regex": "^3.0.0" + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/eslint/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10.17.0" } }, - "node_modules/eslint/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/eslint/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true, "engines": { - "node": ">=4" + "node": ">= 4" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/imagemin": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", + "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "dependencies": { + "file-type": "^12.0.0", + "globby": "^10.0.0", + "graceful-fs": "^4.2.2", + "junk": "^3.1.0", + "make-dir": "^3.0.0", + "p-pipe": "^3.0.0", + "replace-ext": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "node_modules/img-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-4.0.0.tgz", + "integrity": "sha512-UwRcPQdwdOyEHyCxe1V9s9YFwInwEWCpoO+kJGfIqDrBDqA8jZUsEZTxQ0JteNPGw/Gupmwesk2OhLTcnw6tnQ==", "dev": true, "dependencies": { - "estraverse": "^5.1.0" + "loader-utils": "^1.1.0" }, "engines": { - "node": ">=0.10" + "node": ">=12" + }, + "peerDependencies": { + "imagemin": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "node_modules/img-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, - "engines": { - "node": ">=4.0" + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/img-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "dependencies": { - "estraverse": "^5.2.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" }, "engines": { - "node": ">=4.0" + "node": ">=4.0.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "node_modules/import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", "dev": true, + "dependencies": { + "import-from": "^3.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">=8" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "node_modules/import-from/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "node_modules/import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, "engines": { - "node": ">=0.8.x" + "node": ">=0.8.19" } }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-ip": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", + "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "default-gateway": "^6.0.0", + "ipaddr.js": "^1.9.1", + "is-ip": "^3.1.0", + "p-event": "^4.2.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sindresorhus/internal-ip?sponsor=1" } }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/internal-ip/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, "engines": { - "node": ">= 8" + "node": ">= 0.10" } }, - "node_modules/execa/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "node_modules/execa/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "node_modules/ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/execa/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "call-bind": "^1.0.0" }, "engines": { - "node": ">= 8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "dev": true, "dependencies": { - "ms": "2.0.0" + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" } }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "node_modules/is-color-stop/node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true, + "engines": { + "node": "*" + } }, - "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "node_modules/is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dev": true, "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "has": "^1.0.3" }, - "engines": { - "node": ">= 0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true + "node_modules/is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, - "dependencies": { - "ms": "2.0.0" + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, - "dependencies": { - "type": "^2.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/ext/node_modules/type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", - "dev": true + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "is-extglob": "^2.1.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "node_modules/is-ip": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", + "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", "dev": true, "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "ip-regex": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" + "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, + "node_modules/is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, - "node_modules/fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "is-docker": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, - "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "node_modules/fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, - "dependencies": { - "reusify": "^1.0.4" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "node_modules/jest-worker": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", + "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", "dev": true, "dependencies": { - "websocket-driver": ">=0.5.1" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">=0.8.0" + "node": ">= 10.13.0" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { - "escape-string-regexp": "^1.0.5" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=4" } }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" + "minimist": "^1.2.5" }, - "engines": { - "node": ">= 10.13.0" + "bin": { + "json5": "lib/cli.js" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/file-type": { - "version": "12.4.2", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", - "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", + "node_modules/junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, "engines": { - "node": ">= 0.8" + "node": ">= 8" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/laravel-mix": { + "version": "6.0.24", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.24.tgz", + "integrity": "sha512-64KE/HKm3jiAHzOz6k+niODh4kL6mgzAeKLzEiMLG1odq5vqCnPXsmXfUYm6XaAHDS+2gLN1JlxsdVqtT7GB/w==", "dev": true, "dependencies": { - "ms": "2.0.0" + "@babel/core": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.14.5", + "@babel/preset-env": "^7.14.5", + "@babel/runtime": "^7.14.5", + "@types/babel__core": "^7.1.14", + "@types/clean-css": "^4.2.4", + "@types/imagemin-gifsicle": "^7.0.0", + "@types/imagemin-mozjpeg": "^8.0.0", + "@types/imagemin-optipng": "^5.2.0", + "@types/imagemin-svgo": "^8.0.0", + "autoprefixer": "^10.2.6", + "babel-loader": "^8.2.2", + "chalk": "^4.1.1", + "chokidar": "^3.5.1", + "clean-css": "^4.2.3 || ^5.1.2", + "cli-table3": "^0.6.0", + "collect.js": "^4.28.6", + "commander": "^7.2.0", + "concat": "^1.0.3", + "css-loader": "^5.2.6", + "cssnano": "^5.0.6", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "glob": "^7.1.7", + "html-loader": "^1.3.2", + "imagemin": "^7.0.1", + "img-loader": "^4.0.0", + "lodash": "^4.17.21", + "md5": "^2.3.0", + "mini-css-extract-plugin": "^1.6.0", + "node-libs-browser": "^2.2.1", + "postcss-load-config": "^3.0.1", + "postcss-loader": "^6.1.0", + "semver": "^7.3.5", + "strip-ansi": "^6.0.0", + "style-loader": "^2.0.0", + "terser": "^5.7.0", + "terser-webpack-plugin": "^5.1.3", + "vue-style-loader": "^4.1.3", + "webpack": "^5.38.1", + "webpack-cli": "^4.7.2", + "webpack-dev-server": "4.0.0-beta.3", + "webpack-merge": "^5.8.0", + "webpack-notifier": "^1.13.0", + "webpackbar": "^5.0.0-3", + "yargs": "^17.0.1" + }, + "bin": { + "laravel-mix": "bin/cli.js", + "mix": "bin/cli.js" + }, + "engines": { + "node": ">=12.14.0" + }, + "peerDependencies": { + "postcss": "^8.3.1" } }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "node_modules/laravel-mix-artisan-publish": { + "version": "1.0.0", + "resolved": "git+ssh://git@github.com/mzur/laravel-mix-artisan-publish.git#feafb9ba2359d41fddb025bccb4380e9b044783f", "dev": true, + "license": "MIT", "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "node-cmd": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6.0.0" }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "peerDependencies": { + "laravel-mix": "^4.0||^5.0||^6.0" } }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/laravel-mix/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/laravel-mix/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=10" } }, - "node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "node_modules/laravel-mix/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true, - "engines": { - "node": ">= 0.6" - } + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true }, - "node_modules/fraction.js": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.0.tgz", - "integrity": "sha512-o9lSKpK0TDqDwTL24Hxqi6I99s942l6TYkfl6WvGWgLOIFz/YonSGKfiSeMadoiNvTfqnfOa9mjb5SGVbBK9/w==", + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", "dev": true, "engines": { - "node": "*" + "node": ">=6.11.5" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "dev": true, "dependencies": { - "map-cache": "^0.2.2" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true, - "engines": { - "node": ">= 0.6" + "node": ">=8.9.0" } }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", "dev": true }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true }, - "node_modules/geojson-equality": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/geojson-equality/-/geojson-equality-0.1.6.tgz", - "integrity": "sha1-oXE3TvBD5dR5eZWEC65GSOB1LXI=", + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, "dependencies": { - "deep-equal": "^1.0.0" + "tslib": "^2.0.3" } }, - "node_modules/geojson-rbush": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.1.2.tgz", - "integrity": "sha512-grkfdg3HIeTjwTfiJe5FT8+fGU3fABCc+vRJDBwdQz9kkLF0Sbif2gs2JUzjewwgmnvLGy9fInySDeADoNuk7w==", + "node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, "dependencies": { - "@turf/bbox": "*", - "@turf/helpers": "6.x", - "@turf/meta": "6.x", - "rbush": "^2.0.0" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "semver": "^6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "node_modules/map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "p-defer": "^1.0.0" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=6" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "node_modules/martinez-polygon-clipping": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.7.1.tgz", + "integrity": "sha512-Xt5hOjAVkRoGN7kUb/0VmkxcG07Ja+OA3qU+7YcY2pAlJ78V1G181VTozHCXpzlj0paNBbcLno77mcGeGStI0A==", "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "robust-predicates": "^2.0.4", + "splaytree": "^0.1.4", + "tinyqueue": "^1.2.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/globals": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", - "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "dev": true, "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" } }, - "node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/globby/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true, "engines": { - "node": ">= 4" + "node": ">= 0.6" } }, - "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/mem": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", + "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", + "dev": true, "dependencies": { - "function-bind": "^1.1.1" + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^3.1.0" }, "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sindresorhus/mem?sponsor=1" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/mem/node_modules/mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "node_modules/memfs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz", + "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==", "dev": true, "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "fs-monkey": "1.0.3" }, "engines": { - "node": ">=0.10.0" + "node": ">= 4.0.0" } }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" + "source-map": "^0.6.1" } }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" + "braces": "^3.0.1", + "picomatch": "^2.2.3" }, "engines": { - "node": ">=4" + "node": ">=8.6" } }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" }, - "engines": { - "node": ">= 6" + "bin": { + "miller-rabin": "bin/miller-rabin" } }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, "bin": { - "he": "bin/he" + "mime": "cli.js" + }, + "engines": { + "node": ">=4" } }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "node_modules/mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "engines": { + "node": ">= 0.6" } }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "node_modules/mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", "dev": true, "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "mime-db": "1.47.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "node_modules/html-entities": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", - "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", - "dev": true + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "node_modules/html-loader": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz", - "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==", + "node_modules/mini-css-extract-plugin": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", + "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", "dev": true, "dependencies": { - "html-minifier-terser": "^5.1.1", - "htmlparser2": "^4.1.0", "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" }, "engines": { "node": ">= 10.13.0" @@ -7140,654 +7156,629 @@ "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^4.4.0 || ^5.0.0" } }, - "node_modules/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "dependencies": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "bin": { - "html-minifier-terser": "cli.js" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/html-minifier-terser/node_modules/clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "dependencies": { - "source-map": "~0.6.0" + "minimist": "^1.2.5" }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" + "bin": { + "mkdirp": "bin/cmd.js" } }, - "node_modules/html-minifier-terser/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true }, - "node_modules/html-minifier-terser/node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" }, "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" + "multicast-dns": "cli.js" } }, - "node_modules/html-minifier-terser/node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, - "node_modules/htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", + "node_modules/nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, "engines": { "node": ">= 0.6" } }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node_modules/http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "node_modules/next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, - "node_modules/http-proxy-middleware": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", - "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, "dependencies": { - "@types/http-proxy": "^1.17.5", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=8.0.0" + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "node_modules/node-cmd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/node-cmd/-/node-cmd-3.0.0.tgz", + "integrity": "sha1-OP/3CkqqT2WdID61eGJzcBjiT28=", "dev": true }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", "dev": true, "engines": { - "node": ">=10.17.0" + "node": ">= 6.0.0" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" } }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "node_modules/node-notifier": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", + "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/node-notifier/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">= 4" + "node": ">=10" } }, - "node_modules/imagemin": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", - "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", + "node_modules/node-notifier/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "dependencies": { - "file-type": "^12.0.0", - "globby": "^10.0.0", - "graceful-fs": "^4.2.2", - "junk": "^3.1.0", - "make-dir": "^3.0.0", - "p-pipe": "^3.0.0", - "replace-ext": "^1.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/img-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-3.0.2.tgz", - "integrity": "sha512-rSriLKgvi85Km7ppSF+AEAM3nU4fxpvCkaXtC/IoCEU7jfks55bEANFs0bB9YXYkxY9JurZQIZFtXh5Gue3upw==", + "node_modules/node-notifier/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, - "dependencies": { - "loader-utils": "^1.1.0" - }, - "peerDependencies": { - "imagemin": "^5.0.0 || ^6.0.0 || ^7.0.0" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/img-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/node-notifier/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { - "minimist": "^1.2.0" + "isexe": "^2.0.0" }, "bin": { - "json5": "lib/cli.js" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/img-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "node_modules/node-notifier/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/node-releases": { + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, "engines": { - "node": ">=4.0.0" + "node": ">=0.10.0" } }, - "node_modules/import-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", - "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true, - "dependencies": { - "import-from": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/normalize-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.0.1.tgz", + "integrity": "sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ==", "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "dependencies": { - "resolve-from": "^5.0.0" + "path-key": "^3.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/import-from/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "node_modules/npm-run-path/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "node_modules/nth-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", "dev": true, "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "boolbase": "^1.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "engines": { - "node": ">=0.8.19" + "node": ">=0.10.0" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, - "node_modules/internal-ip": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", - "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, "dependencies": { - "default-gateway": "^6.0.0", - "ipaddr.js": "^1.9.1", - "is-ip": "^3.1.0", - "p-event": "^4.2.0" + "ee-first": "1.1.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/internal-ip?sponsor=1" + "node": ">= 0.8" } }, - "node_modules/internal-ip/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 0.8" } }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, - "engines": { - "node": ">= 0.10" + "dependencies": { + "wrappy": "1" } }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ipaddr.js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.0.tgz", - "integrity": "sha512-S54H9mIj0rbxRIyrDMEuuER86LdlgUg9FSeZ8duQb6CUG2iRrA36MYVQBSprTF/ZeAwvyQ5mDGuNvIPM0BIl3w==", + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, "engines": { - "node": ">= 10" + "node": ">= 0.8.0" } }, - "node_modules/is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "node_modules/p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "node_modules/p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "p-timeout": "^3.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "dependencies": { - "call-bind": "^1.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "binary-extensions": "^2.0.0" + "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, - "node_modules/is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "aggregate-error": "^3.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "node_modules/p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "dependencies": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "node_modules/p-retry": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.5.0.tgz", + "integrity": "sha512-5Hwh4aVQSu6BEP+w2zKlVXtFAaYQe1qWuVADSgoeVlLjwe/Q/AMSoRR4MDeaAfu8llT+YNbEijWu/YF3m6avkg==", "dev": true, "dependencies": { - "has": "^1.0.3" + "@types/retry": "^0.12.0", + "retry": "^0.12.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, "dependencies": { - "kind-of": "^3.0.2" + "p-finally": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "bin": { - "is-docker": "cli.js" + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { "node": ">=8" @@ -7796,2264 +7787,2317 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-ip": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", - "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true, - "dependencies": { - "ip-regex": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=8" + } + }, + "node_modules/pbf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz", + "integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==", + "dependencies": { + "ieee754": "^1.1.6", + "resolve-protobuf-schema": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "pbf": "bin/pbf" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, "engines": { - "node": ">=0.12.0" + "node": ">=0.12" } }, - "node_modules/is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "node_modules/picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "node_modules/pixelworks": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pixelworks/-/pixelworks-1.1.0.tgz", + "integrity": "sha1-Hwla1I3Ki/ihyCWOAJIDGkTyLKU=" + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "node_modules/polygon-clipping": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.3.tgz", + "integrity": "sha512-ho0Xx5DLkgxRx/+n4O74XyJ67DcyN3Tu9bGYKsnTukGAW6ssnuak6Mwcyb1wHy9MZc9xsUWqIoiazkZB5weECg==", + "dependencies": { + "splaytree": "^3.1.0" + } + }, + "node_modules/polygon-clipping/node_modules/splaytree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.0.tgz", + "integrity": "sha512-gvUGR7xnOy0fLKTCxDeUZYgU/I1Tdf8M/lM1Qrf8L2TIOR5ipZjGk02uYcdv0o2x7WjVRgpm3iS2clLyuVAt0Q==" + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, "engines": { - "node": ">=6" + "node": ">= 0.12.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "node_modules/postcss": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", + "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", "dev": true, + "dependencies": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/postcss-calc": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", + "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "postcss": "^8.2.2" } }, - "node_modules/is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "node_modules/postcss-colormin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", + "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", + "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "node_modules/postcss-convert-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", + "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.1.0" + }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "node_modules/postcss-discard-comments": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", "dev": true, "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/postcss-discard-duplicates": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "node_modules/postcss-discard-empty": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "node_modules/postcss-discard-overridden": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", + "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { + "node_modules/postcss-load-config": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.1.tgz", + "integrity": "sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ==", "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "import-cwd": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "node_modules/postcss-loader": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.1.0.tgz", + "integrity": "sha512-yA/cXBfACkthZNA2hQxOnaReVfQ6uLmvbEDQzNafpbK40URZJvP/28dL1DG174Gvz3ptkkHbbwDBCh+gXR94CA==", "dev": true, "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "semver": "^7.3.5" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/postcss-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "yallist": "^4.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=10" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { - "jsesc": "bin/jsesc" + "semver": "bin/semver.js" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "node_modules/postcss-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "node_modules/postcss-merge-longhand": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", + "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", "dev": true, "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" + "css-color-names": "^1.0.1", + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.1" }, "engines": { - "node": ">=6" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/postcss-merge-rules": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", + "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", "dev": true, "dependencies": { - "universalify": "^2.0.0" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^2.0.1", + "postcss-selector-parser": "^6.0.5", + "vendors": "^1.0.3" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/junk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", - "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "node_modules/postcss-minify-font-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", + "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.1.0" + }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/postcss-minify-gradients": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", + "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", "dev": true, + "dependencies": { + "cssnano-utils": "^2.0.1", + "is-color-stop": "^1.1.0", + "postcss-value-parser": "^4.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "node_modules/postcss-minify-params": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", + "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.0", + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0", + "uniqs": "^2.0.0" + }, "engines": { - "node": ">= 8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/laravel-mix": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.19.tgz", - "integrity": "sha512-SH//4h/bi2ff5hyBfwQ0DE0VfTkskGLU+a/l7HdmTz1F+cJdvakajziyBVRwa9U3+DyvZo9eo9Jgq1jdZWW3XQ==", + "node_modules/postcss-minify-selectors": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", + "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", "dev": true, "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/runtime": "^7.12.1", - "@types/babel__core": "^7.1.12", - "@types/browser-sync": "^2.26.1", - "@types/clean-css": "^4.2.2", - "@types/cssnano": "^4.0.0", - "@types/imagemin-gifsicle": "^7.0.0", - "@types/imagemin-mozjpeg": "^8.0.0", - "@types/imagemin-optipng": "^5.2.0", - "@types/imagemin-svgo": "^8.0.0", - "autoprefixer": "^10.0.1", - "babel-loader": "^8.1.0", - "chalk": "^4.1.0", - "chokidar": "^3.4.3", - "clean-css": "^4.2.3 || ^5.1.1", - "cli-table3": "^0.6.0", - "collect.js": "^4.28.4", - "commander": "^7.1.0", - "concat": "^1.0.3", - "css-loader": "^5.0.0", - "cssnano": "^4.1.11", - "dotenv": "^8.2.0", - "dotenv-expand": "^5.1.0", - "file-loader": "^6.1.1", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "html-loader": "^1.3.2", - "imagemin": "^7.0.1", - "img-loader": "^3.0.2", - "lodash": "^4.17.20", - "md5": "^2.3.0", - "mini-css-extract-plugin": "^1.1.0", - "node-libs-browser": "^2.2.1", - "postcss-load-config": "^3.0.0", - "postcss-loader": "^5.2.0", - "semver": "^7.3.4", - "strip-ansi": "^6.0.0", - "style-loader": "^2.0.0", - "terser": "^5.3.7", - "terser-webpack-plugin": "^5.0.0", - "vue-style-loader": "^4.1.3", - "webpack": "^5.25.1", - "webpack-cli": "^4.1.0", - "webpack-dev-server": "4.0.0-beta.2", - "webpack-merge": "^5.2.0", - "webpack-notifier": "^1.8.0", - "webpackbar": "^5.0.0-3", - "yargs": "^16.1.0" - }, - "bin": { - "laravel-mix": "bin/cli.js", - "mix": "bin/cli.js" + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" }, "engines": { - "node": ">=12.14.0" + "node": "^10 || ^12 || >=14.0" }, "peerDependencies": { - "postcss": "^8.1.2" + "postcss": "^8.2.15" } }, - "node_modules/laravel-mix-artisan-publish": { - "version": "1.0.0", - "resolved": "git+ssh://git@github.com/mzur/laravel-mix-artisan-publish.git#feafb9ba2359d41fddb025bccb4380e9b044783f", + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, - "license": "MIT", - "dependencies": { - "node-cmd": "^3.0.0" - }, "engines": { - "node": ">=6.0.0" + "node": "^10 || ^12 || >= 14" }, "peerDependencies": { - "laravel-mix": "^4.0||^5.0||^6.0" + "postcss": "^8.1.0" } }, - "node_modules/laravel-mix/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/laravel-mix/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/laravel-mix/node_modules/yallist": { + "node_modules/postcss-modules-values": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "icss-utils": "^5.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "node_modules/postcss-normalize-charset": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", "dev": true, "engines": { - "node": ">=6.11.5" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "node_modules/postcss-normalize-display-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", + "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=8.9.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/postcss-normalize-positions": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", + "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "node_modules/postcss-normalize-repeat-style": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", + "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", "dev": true, "dependencies": { - "tslib": "^2.0.3" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "node_modules/postcss-normalize-string": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", + "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", "dev": true, "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/postcss-normalize-timing-functions": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", + "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", "dev": true, "dependencies": { - "semver": "^6.0.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=8" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/postcss-normalize-unicode": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", + "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "browserslist": "^4.16.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "node_modules/postcss-normalize-url": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", + "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", "dev": true, "dependencies": { - "p-defer": "^1.0.0" + "is-absolute-url": "^3.0.3", + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=6" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "node_modules/postcss-normalize-whitespace": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", + "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.1.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "node_modules/postcss-ordered-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", + "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", "dev": true, "dependencies": { - "object-visit": "^1.0.0" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/martinez-polygon-clipping": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.7.1.tgz", - "integrity": "sha512-Xt5hOjAVkRoGN7kUb/0VmkxcG07Ja+OA3qU+7YcY2pAlJ78V1G181VTozHCXpzlj0paNBbcLno77mcGeGStI0A==", + "node_modules/postcss-reduce-initial": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", + "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", + "dev": true, "dependencies": { - "robust-predicates": "^2.0.4", - "splaytree": "^0.1.4", - "tinyqueue": "^1.2.0" + "browserslist": "^4.16.0", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "node_modules/postcss-reduce-transforms": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", + "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", "dev": true, "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "node_modules/postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "dev": true, "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "node_modules/postcss-svgo": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", + "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", "dev": true, + "dependencies": { + "postcss-value-parser": "^4.1.0", + "svgo": "^2.3.0" + }, "engines": { - "node": ">= 0.6" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/mem": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", - "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", + "node_modules/postcss-unique-selectors": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", + "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", "dev": true, "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.1.0" + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5", + "uniqs": "^2.0.0" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >=14.0" }, - "funding": { - "url": "https://github.com/sindresorhus/mem?sponsor=1" + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/mem/node_modules/mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "engines": { - "node": ">=8" + "node": ">= 0.8.0" } }, - "node_modules/memfs": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz", - "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==", + "node_modules/prettier": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", "dev": true, - "dependencies": { - "fs-monkey": "1.0.3" + "optional": true, + "bin": { + "prettier": "bin-prettier.js" }, "engines": { - "node": ">= 4.0.0" + "node": ">=4" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "node_modules/merge-source-map": { + "node_modules/pretty-time": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", "dev": true, - "dependencies": { - "source-map": "^0.6.1" + "engines": { + "node": ">=4" } }, - "node_modules/merge-source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6.0" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, "engines": { - "node": ">= 8" + "node": ">=0.4.0" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "node_modules/protocol-buffers-schema": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.5.1.tgz", + "integrity": "sha512-YVCvdhxWNDP8/nJDyXLuM+UFsuPk4+1PB7WGPVDzm3HTHbzFLxQYeW2iZpS4mmnXrQJGBzt230t/BbEb7PrQaw==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, "engines": { - "node": ">= 0.6" + "node": ">= 0.10" } }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, "engines": { - "node": ">=8.6" + "node": ">= 0.10" } }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/miller-rabin/node_modules/bn.js": { + "node_modules/public-encrypt/node_modules/bn.js": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true }, - "node_modules/mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true, "engines": { - "node": ">= 0.6" + "node": ">=0.6" } }, - "node_modules/mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", "dev": true, - "dependencies": { - "mime-db": "1.47.0" - }, "engines": { - "node": ">= 0.6" + "node": ">=0.4.x" } }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", "dev": true, "engines": { - "node": ">=6" + "node": ">=0.4.x" } }, - "node_modules/mini-css-extract-plugin": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", - "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true + "node_modules/quickselect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", + "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==" }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "safe-buffer": "^5.1.0" } }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, "dependencies": { - "minimist": "^1.2.5" + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">= 0.8" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true, - "dependencies": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" + "engines": { + "node": ">= 0.8" } }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true + "node_modules/rbush": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", + "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", + "dependencies": { + "quickselect": "^1.0.1" + } }, - "node_modules/nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, - "optional": true + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "node_modules/nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "picomatch": "^2.2.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.10.0" } }, - "node_modules/nanomatch/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/rechoir": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", + "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", "dev": true, "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "resolve": "^1.9.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "dev": true, "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "regenerate": "^1.4.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/nanomatch/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", "dev": true, "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@babel/runtime": "^7.8.4" } }, - "node_modules/nanomatch/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", "dependencies": { - "kind-of": "^6.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/nanomatch/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.4" + "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" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", "dev": true }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "node_modules/regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true, - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" + "bin": { + "jsesc": "bin/jsesc" } }, - "node_modules/node-cmd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/node-cmd/-/node-cmd-3.0.0.tgz", - "integrity": "sha1-OP/3CkqqT2WdID61eGJzcBjiT28=", - "dev": true + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true, "engines": { - "node": ">= 6.0.0" + "node": ">= 0.10" } }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/node-notifier": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", - "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/node-notifier/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-notifier/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "resolve-from": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/node-notifier/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "bin": { - "uuid": "dist/bin/uuid" + "engines": { + "node": ">=8" } }, - "node_modules/node-notifier/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, "engines": { - "node": ">= 8" + "node": ">=4" } }, - "node_modules/node-notifier/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } }, - "node_modules/node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", "dev": true }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/resolve-url-loader": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.3.tgz", + "integrity": "sha512-WbDSNFiKPPLem1ln+EVTE+bFUBdTTytfQZWbmghroaFNFaAVmGq0Saqw6F/306CwgPXsGwXVxbODE+3xAo/YbA==", "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "3.0.0", + "camelcase": "5.3.1", + "compose-function": "3.0.3", + "convert-source-map": "1.7.0", + "es6-iterator": "2.0.3", + "loader-utils": "1.2.3", + "postcss": "7.0.21", + "rework": "1.0.1", + "rework-visit": "1.0.0", + "source-map": "0.6.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0.0" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "node_modules/resolve-url-loader/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "node_modules/resolve-url-loader/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { "node": ">=6" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/resolve-url-loader/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "dependencies": { - "path-key": "^3.0.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "node_modules/resolve-url-loader/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "node_modules/resolve-url-loader/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "color-name": "1.1.3" } }, - "node_modules/object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/resolve-url-loader/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, + "node_modules/resolve-url-loader/node_modules/emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", + "dev": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.10" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "node_modules/resolve-url-loader/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=4" } }, - "node_modules/object-visit": { + "node_modules/resolve-url-loader/node_modules/json5": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "dependencies": { - "isobject": "^3.0.0" + "minimist": "^1.2.0" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" + "big.js": "^5.2.2", + "emojis-list": "^2.0.0", + "json5": "^1.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4.0.0" } }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "node_modules/resolve-url-loader/node_modules/postcss": { + "version": "7.0.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", + "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" }, "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6.0.0" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", + "node_modules/resolve-url-loader/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" + "has-flag": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=6" } }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, "engines": { - "node": ">= 0.8" + "node": ">= 4" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "engines": { - "node": ">= 0.8" + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", "dev": true, "dependencies": { - "wrappy": "1" + "convert-source-map": "^0.3.3", + "css": "^2.0.0" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", + "dev": true }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "node_modules/rework/node_modules/convert-source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "dev": true + }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "glob": "^7.1.3" }, - "engines": { - "node": ">=8" + "bin": { + "rimraf": "bin.js" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true + "node_modules/robust-predicates": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz", + "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==" }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "engines": { - "node": ">=4" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" } }, - "node_modules/p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.32.13", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.13.tgz", + "integrity": "sha512-dEgI9nShraqP7cXQH+lEXVf73WOPCse0QlFzSD8k+1TcOxCMwVXfQlr0jtoluZysQOyJGnfr21dLvYKDJq8HkA==", "dev": true, "dependencies": { - "p-timeout": "^3.1.0" + "chokidar": ">=3.0.0 <4.0.0" }, - "engines": { - "node": ">=8" + "bin": { + "sass": "sass.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, "engines": { - "node": ">=4" + "node": ">=8.9.0" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/sass-loader": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", + "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "clone-deep": "^4.0.1", + "loader-utils": "^1.2.3", + "neo-async": "^2.6.1", + "schema-utils": "^2.6.1", + "semver": "^6.3.0" }, "engines": { - "node": ">=6" + "node": ">= 8.9.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0", + "sass": "^1.3.0", + "webpack": "^4.36.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/sass-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "minimist": "^1.2.0" }, - "engines": { - "node": ">=8" + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "node_modules/sass-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "dependencies": { - "aggregate-error": "^3.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0.0" } }, - "node_modules/p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "node_modules/sass-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, "engines": { - "node": ">=8" + "node": ">= 8.9.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/p-retry": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.5.0.tgz", - "integrity": "sha512-5Hwh4aVQSu6BEP+w2zKlVXtFAaYQe1qWuVADSgoeVlLjwe/Q/AMSoRR4MDeaAfu8llT+YNbEijWu/YF3m6avkg==", + "node_modules/sass-loader/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "dependencies": { - "@types/retry": "^0.12.0", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=8" + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "dependencies": { - "p-finally": "^1.0.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", "dev": true }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "node_modules/selfsigned": { + "version": "1.10.11", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", + "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", "dev": true, "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" + "node-forge": "^0.10.0" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dev": true, "dependencies": { - "callsites": "^3.0.0" + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" }, "engines": { - "node": ">=6" + "node": ">= 0.8.0" } }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "ms": "2.0.0" } }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" + "randombytes": "^2.1.0" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8.0" } }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "ms": "2.0.0" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + }, "engines": { - "node": ">=4" + "node": ">= 0.8.0" } }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "dev": true }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, - "engines": { - "node": ">=8" + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" } }, - "node_modules/pbf": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz", - "integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==", + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, "dependencies": { - "ieee754": "^1.1.6", - "resolve-protobuf-schema": "^2.0.0" + "kind-of": "^6.0.2" }, - "bin": { - "pbf": "bin/pbf" + "engines": { + "node": ">=8" } }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "shebang-regex": "^1.0.0" }, "engines": { - "node": ">=0.12" + "node": ">=0.10.0" } }, - "node_modules/picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true, "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "node": ">=0.10.0" } }, - "node_modules/pixelworks": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pixelworks/-/pixelworks-1.1.0.tgz", - "integrity": "sha1-Hwla1I3Ki/ihyCWOAJIDGkTyLKU=" + "node_modules/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/polygon-clipping": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.3.tgz", - "integrity": "sha512-ho0Xx5DLkgxRx/+n4O74XyJ67DcyN3Tu9bGYKsnTukGAW6ssnuak6Mwcyb1wHy9MZc9xsUWqIoiazkZB5weECg==", - "dependencies": { - "splaytree": "^3.1.0" - } - }, - "node_modules/polygon-clipping/node_modules/splaytree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.0.tgz", - "integrity": "sha512-gvUGR7xnOy0fLKTCxDeUZYgU/I1Tdf8M/lM1Qrf8L2TIOR5ipZjGk02uYcdv0o2x7WjVRgpm3iS2clLyuVAt0Q==" - }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "engines": { - "node": ">= 0.12.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/sockjs": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", + "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", "dev": true, "dependencies": { - "ms": "^2.1.1" + "faye-websocket": "^0.11.3", + "uuid": "^3.4.0", + "websocket-driver": "^0.7.4" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/postcss": { - "version": "8.2.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", - "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", + "node_modules/source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", "dev": true, - "dependencies": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map": "^0.6.1" - }, "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">=0.10.0" } }, - "node_modules/postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "dev": true, "dependencies": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, - "node_modules/postcss-calc/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" - }, + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/postcss-calc/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" }, "engines": { - "node": ">=4" + "node": ">=6.0.0" } }, - "node_modules/postcss-calc/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" } }, - "node_modules/postcss-calc/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/postcss-calc/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "node_modules/splaytree": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-0.1.4.tgz", + "integrity": "sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ==" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "node_modules/postcss-calc/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true, "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/postcss-calc/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "node_modules/std-env": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz", + "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==", "dev": true, "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "ci-info": "^3.0.0" } }, - "node_modules/postcss-calc/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, - "node_modules/postcss-calc/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, - "node_modules/postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" + "safe-buffer": "~5.2.0" } }, - "node_modules/postcss-colormin/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "node_modules/postcss-colormin/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/postcss-colormin/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "ansi-regex": "^5.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/postcss-colormin/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "engines": { + "node": ">=6" } }, - "node_modules/postcss-colormin/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-colormin/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-colormin/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "node_modules/style-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", + "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", "dev": true, "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-colormin/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-colormin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/postcss-colormin/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/stylehacks": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", + "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "browserslist": "^4.16.0", + "postcss-selector-parser": "^6.0.4" }, "engines": { - "node": ">=6" + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "node_modules/postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/postcss-convert-values/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/svgo": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz", + "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "@trysound/sax": "0.1.1", + "chalk": "^4.1.0", + "commander": "^7.1.0", + "css-select": "^3.1.2", + "css-tree": "^1.1.2", + "csso": "^4.2.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" }, "engines": { - "node": ">=4" + "node": ">=10.13.0" } }, - "node_modules/postcss-convert-values/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=4" + "node": ">=10.0.0" } }, - "node_modules/postcss-convert-values/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/table/node_modules/ajv": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.4.0.tgz", + "integrity": "sha512-7QD2l6+KBSLwf+7MuYocbWvRPdOu63/trReTLu2KFwkgctnub1auoF+Y1WYcm09CTM7quuscrzqmASaLHC/K4Q==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/postcss-convert-values/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "engines": { + "node": ">=6" } }, - "node_modules/postcss-convert-values/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-convert-values/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/terser": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", + "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "bin": { + "terser": "bin/terser" + }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/postcss-convert-values/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "node_modules/terser-webpack-plugin": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", + "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", "dev": true, "dependencies": { - "chalk": "^2.4.2", + "jest-worker": "^27.0.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "terser": "^5.7.0" }, "engines": { - "node": ">=6.0.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true + "node_modules/terser-webpack-plugin/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/postcss-convert-values/node_modules/source-map": { + "node_modules/terser-webpack-plugin/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", @@ -10062,6423 +10106,6307 @@ "node": ">=0.10.0" } }, - "node_modules/postcss-convert-values/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true }, - "node_modules/postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">= 8" } }, - "node_modules/postcss-discard-comments/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true }, - "node_modules/postcss-discard-comments/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "setimmediate": "^1.0.4" }, "engines": { - "node": ">=4" + "node": ">=0.6.0" } }, - "node_modules/postcss-discard-comments/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true }, - "node_modules/postcss-discard-comments/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } + "node_modules/tinyqueue": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-1.2.3.tgz", + "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA==" }, - "node_modules/postcss-discard-comments/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, - "node_modules/postcss-discard-comments/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true, "engines": { "node": ">=4" } }, - "node_modules/postcss-discard-comments/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "is-number": "^7.0.0" }, "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">=8.0" } }, - "node_modules/postcss-discard-comments/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.6" } }, - "node_modules/postcss-discard-comments/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "dev": true + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "prelude-ls": "^1.2.1" }, "engines": { - "node": ">=6" + "node": ">= 0.8.0" } }, - "node_modules/postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-discard-duplicates/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "media-typer": "0.3.0", + "mime-types": "~2.1.24" }, "engines": { - "node": ">=4" + "node": ">= 0.6" } }, - "node_modules/postcss-discard-duplicates/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { "node": ">=4" } }, - "node_modules/postcss-discard-duplicates/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" }, "engines": { "node": ">=4" } }, - "node_modules/postcss-discard-duplicates/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "engines": { + "node": ">=4" } }, - "node_modules/postcss-discard-duplicates/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-discard-duplicates/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", "dev": true, "engines": { "node": ">=4" } }, - "node_modules/postcss-discard-duplicates/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "node_modules/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">= 10.0.0" } }, - "node_modules/postcss-discard-duplicates/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/postcss-discard-duplicates/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "punycode": "^2.1.0" } }, - "node_modules/postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">=6" } }, - "node_modules/postcss-discard-empty/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "punycode": "1.3.2", + "querystring": "0.2.0" } }, - "node_modules/postcss-discard-empty/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "inherits": "2.0.3" } }, - "node_modules/postcss-discard-empty/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true, "engines": { - "node": ">=4" + "node": ">= 0.4.0" } }, - "node_modules/postcss-discard-empty/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "bin": { + "uuid": "bin/uuid" } }, - "node_modules/postcss-discard-empty/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, - "node_modules/postcss-discard-empty/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true, "engines": { - "node": ">=4" + "node": ">= 0.8" + } + }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/postcss-discard-empty/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "node_modules/vue-eslint-parser": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz", + "integrity": "sha512-QXxqH8ZevBrtiZMZK0LpwaMfevQi9UL7lY6Kcp+ogWHC88AuwUPwwCIzkOUc1LR4XsYAt/F9yHXAB/QoD17QXA==", "dev": true, "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "debug": "^4.1.1", + "eslint-scope": "^5.0.0", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.4.0", + "lodash": "^4.17.15" }, "engines": { - "node": ">=6.0.0" + "node": ">=8.10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5.0.0" } }, - "node_modules/postcss-discard-empty/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/postcss-discard-empty/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" }, "engines": { - "node": ">=6" + "node": ">=6.0.0" } }, - "node_modules/postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } + "node_modules/vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true }, - "node_modules/postcss-discard-overridden/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/vue-loader": { + "version": "15.9.7", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.7.tgz", + "integrity": "sha512-qzlsbLV1HKEMf19IqCJqdNvFJRCI58WNbS6XbPqK13MrLz65es75w392MSQ5TsARAfIjUw+ATm3vlCXUJSOH9Q==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "css-loader": "*", + "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } } }, - "node_modules/postcss-discard-overridden/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/vue-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "minimist": "^1.2.0" }, - "engines": { - "node": ">=4" + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/postcss-discard-overridden/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/vue-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">=4.0.0" } }, - "node_modules/postcss-discard-overridden/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", "dev": true, "dependencies": { - "color-name": "1.1.3" + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" } }, - "node_modules/postcss-discard-overridden/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-discard-overridden/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/vue-style-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/postcss-discard-overridden/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "node_modules/vue-style-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" }, "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">=4.0.0" } }, - "node_modules/postcss-discard-overridden/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/vue-template-compiler": { + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz", + "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.1.0" } }, - "node_modules/postcss-discard-overridden/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "node_modules/watchpack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" }, "engines": { - "node": ">=6" + "node": ">=10.13.0" } }, - "node_modules/postcss-load-config": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.1.tgz", - "integrity": "sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ==", + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "dependencies": { - "cosmiconfig": "^7.0.0", - "import-cwd": "^3.0.0" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "minimalistic-assert": "^1.0.0" } }, - "node_modules/postcss-load-config/node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "node_modules/webpack": { + "version": "5.39.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.39.1.tgz", + "integrity": "sha512-ulOvoNCh2PvTUa+zbpRuEb1VPeQnhxpnHleMPVVCq3QqnaFogjsLyps+o42OviQFoaGtTQYrUqDXu1QNkvUPzw==", "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.47", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "acorn": "^8.2.1", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.4.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.1", + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" + }, + "bin": { + "webpack": "bin/webpack.js" }, "engines": { - "node": ">=10" + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/postcss-load-config/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/webpack-cli": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.2.tgz", + "integrity": "sha512-mEoLmnmOIZQNiRl0ebnjzQ74Hk0iKS5SiEEnpq3dRezoyR3yPaeQZCMCe+db4524pj1Pd5ghZXjT41KLzIhSLw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.0.4", + "@webpack-cli/info": "^1.3.0", + "@webpack-cli/serve": "^1.5.1", + "colorette": "^1.2.1", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" }, "engines": { - "node": ">=8" + "node": ">=10.13.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } } }, - "node_modules/postcss-loader": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", - "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", + "node_modules/webpack-dev-middleware": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz", + "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==", "dev": true, "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "semver": "^7.3.4" + "colorette": "^1.2.2", + "mem": "^8.1.1", + "memfs": "^3.2.2", + "mime-types": "^2.1.30", + "range-parser": "^1.2.1", + "schema-utils": "^3.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">= v10.23.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/postcss-loader/node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "node_modules/webpack-dev-server": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.0.0-beta.3.tgz", + "integrity": "sha512-Ud7ieH15No/KiSdRuzk+2k+S4gSCR/N7m4hJhesDbKQEZy3P+NPXTXfsimNOZvbVX2TRuIEFB+VdLZFn8DwGwg==", "dev": true, "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "ansi-html": "^0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^3.5.1", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "del": "^6.0.0", + "express": "^4.17.1", + "find-cache-dir": "^3.3.1", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^1.3.1", + "internal-ip": "^6.2.0", + "ipaddr.js": "^2.0.0", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "open": "^7.4.2", + "p-retry": "^4.5.0", + "portfinder": "^1.0.28", + "schema-utils": "^3.0.0", + "selfsigned": "^1.10.11", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "spdy": "^4.0.2", + "strip-ansi": "^6.0.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^4.1.0", + "ws": "^7.4.5" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { - "node": ">=10" + "node": ">= 12.13.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/postcss-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=10.0.0" } }, - "node_modules/postcss-loader/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/webpack-notifier": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.13.0.tgz", + "integrity": "sha512-QLk6l/TZKGhyN6Hd1zobaiYno7S9YPX3wH86+YOSufHes77SegGhnGdj+4vrLDFK5A4ZKoQD5GRXXFnM0h0N8A==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node-notifier": "^9.0.0", + "strip-ansi": "^6.0.0" } }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" } }, - "node_modules/postcss-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "node_modules/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "dependencies": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">=0.10.0" } }, - "node_modules/postcss-merge-longhand/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/webpack/node_modules/acorn": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", + "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, - "node_modules/postcss-merge-longhand/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/webpack/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/postcss-merge-longhand/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/webpack/node_modules/webpack-sources": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", + "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" }, "engines": { - "node": ">=4" + "node": ">=10.13.0" } }, - "node_modules/postcss-merge-longhand/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/postcss-merge-longhand/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-merge-longhand/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-merge-longhand/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "node_modules/webpackbar": { + "version": "5.0.0-3", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", + "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", "dev": true, "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "ansi-escapes": "^4.3.1", + "chalk": "^4.1.0", + "consola": "^2.15.0", + "figures": "^3.2.0", + "pretty-time": "^1.1.0", + "std-env": "^2.2.1", + "text-table": "^0.2.0", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=10" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-merge-longhand/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "webpack": "3 || 4 || 5" } }, - "node_modules/postcss-merge-longhand/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" }, "engines": { - "node": ">=6" + "node": ">=0.8.0" } }, - "node_modules/postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">=0.8.0" } }, - "node_modules/postcss-merge-rules/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "dependencies": { - "color-convert": "^1.9.0" + "isexe": "^2.0.0" }, - "engines": { - "node": ">=4" + "bin": { + "which": "bin/which" } }, - "node_modules/postcss-merge-rules/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/postcss-merge-rules/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { - "has-flag": "^3.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-merge-rules/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/postcss-merge-rules/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, - "node_modules/postcss-merge-rules/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "node_modules/ws": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz", + "integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==", "dev": true, "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-merge-rules/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "node": ">=8.3.0" }, - "engines": { - "node": ">=6.0.0" + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, "engines": { - "node": ">=8" + "node": ">=0.4" } }, - "node_modules/postcss-merge-rules/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/postcss-merge-rules/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, "engines": { - "node": ">=6" + "node": ">= 6" } }, - "node_modules/postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "node_modules/yargs": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz", + "integrity": "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==", "dev": true, "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/postcss-minify-font-values/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/postcss-minify-font-values/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/postcss-minify-font-values/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/highlight": "^7.10.4" } }, - "node_modules/postcss-minify-font-values/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, + "@babel/compat-data": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.5.tgz", + "integrity": "sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==", + "dev": true + }, + "@babel/core": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, "dependencies": { - "color-name": "1.1.3" + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/postcss-minify-font-values/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-minify-font-values/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" } }, - "node_modules/postcss-minify-font-values/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "requires": { + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-minify-font-values/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-font-values/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" + "requires": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" }, - "engines": { - "node": ">=6" + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "@babel/helper-create-class-features-plugin": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", "dev": true, - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" } }, - "node_modules/postcss-minify-gradients/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" } }, - "node_modules/postcss-minify-gradients/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" }, - "engines": { - "node": ">=4" + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/postcss-minify-gradients/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@babel/helper-explode-assignable-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-gradients/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-gradients/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-minify-gradients/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-gradients/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "requires": { + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-minify-gradients/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@babel/helper-member-expression-to-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz", + "integrity": "sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-gradients/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", "dev": true, - "dependencies": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-params/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-params/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-params/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-params/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "requires": { + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-params/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-minify-params/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-params/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "requires": { + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", "dev": true }, - "node_modules/postcss-minify-params/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-params/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "@babel/helpers": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" } }, - "node_modules/postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, - "dependencies": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" }, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/postcss-minify-selectors/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@babel/parser": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.6.tgz", + "integrity": "sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ==", + "dev": true + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" } }, - "node_modules/postcss-minify-selectors/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.5.tgz", + "integrity": "sha512-tbD/CG3l43FIXxmu4a7RBe4zH7MLJ+S/lFowPFO7HetS2hyOZ/0nnnznegDuzFzfkyQYTxqdTH/hKmuBngaDAA==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, - "node_modules/postcss-minify-selectors/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@babel/plugin-proposal-class-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-minify-selectors/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@babel/plugin-proposal-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", + "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, - "node_modules/postcss-minify-selectors/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-minify-selectors/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "@babel/plugin-proposal-dynamic-import": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, - "node_modules/postcss-minify-selectors/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, - "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "@babel/plugin-proposal-json-strings": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=8" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, - "node_modules/postcss-minify-selectors/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, - "node_modules/postcss-minify-selectors/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "@babel/plugin-proposal-numeric-separator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.5.tgz", + "integrity": "sha512-VzMyY6PWNPPT3pxc5hi9LloKNr4SSrVCg7Yr6aZpW4Ym07r7KqSU/QXYwjXLVxqwSv0t/XSXkFoKBPUkZ8vb2A==", "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "requires": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" } }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, - "node_modules/postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "@babel/plugin-proposal-private-methods": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-charset/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, - "node_modules/postcss-normalize-charset/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-charset/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/postcss-normalize-charset/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" } }, - "node_modules/postcss-normalize-charset/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-normalize-charset/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-charset/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/postcss-normalize-charset/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" } }, - "node_modules/postcss-normalize-charset/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", "dev": true, - "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, - "node_modules/postcss-normalize-display-values/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/postcss-normalize-display-values/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" } }, - "node_modules/postcss-normalize-display-values/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/postcss-normalize-display-values/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/postcss-normalize-display-values/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-normalize-display-values/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, - "node_modules/postcss-normalize-display-values/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-normalize-display-values/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-display-values/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", "dev": true, - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" } }, - "node_modules/postcss-normalize-positions/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-positions/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@babel/plugin-transform-block-scoping": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-positions/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@babel/plugin-transform-classes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", + "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "globals": "^11.1.0" }, - "engines": { - "node": ">=4" + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } } }, - "node_modules/postcss-normalize-positions/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-positions/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-normalize-positions/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "@babel/plugin-transform-destructuring": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.5.tgz", + "integrity": "sha512-wU9tYisEbRMxqDezKUqC9GleLycCRoUsai9ddlsq54r8QRLaeEhc+d+9DqCG+kV9W2GgQjTZESPTpn5bAFMDww==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-positions/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "@babel/plugin-transform-dotall-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-normalize-positions/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@babel/plugin-transform-duplicate-keys": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-positions/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "@babel/plugin-transform-for-of": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", "dev": true, - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@babel/plugin-transform-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@babel/plugin-transform-member-expression-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@babel/plugin-transform-modules-amd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-normalize-repeat-style/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "@babel/plugin-transform-modules-commonjs": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", + "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "@babel/plugin-transform-modules-systemjs": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", + "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "requires": { + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-normalize-repeat-style/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@babel/plugin-transform-modules-umd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-repeat-style/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.5.tgz", + "integrity": "sha512-+Xe5+6MWFo311U8SchgeX5c1+lJM+eZDBZgD+tvXu9VVQPXwwVzeManMMjYX6xw2HczngfOSZjoFYKwdeB/Jvw==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5" } }, - "node_modules/postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "@babel/plugin-transform-new-target": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", "dev": true, - "dependencies": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-string/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@babel/plugin-transform-object-super": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" } }, - "node_modules/postcss-normalize-string/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@babel/plugin-transform-parameters": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-string/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-string/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@babel/plugin-transform-regenerator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "requires": { + "regenerator-transform": "^0.14.2" } }, - "node_modules/postcss-normalize-string/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-normalize-string/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "@babel/plugin-transform-reserved-words": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-string/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "@babel/plugin-transform-runtime": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", + "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "semver": "^6.3.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-normalize-string/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@babel/plugin-transform-shorthand-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-string/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "@babel/plugin-transform-spread": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" } }, - "node_modules/postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "@babel/plugin-transform-sticky-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", "dev": true, - "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-timing-functions/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@babel/plugin-transform-template-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-timing-functions/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@babel/plugin-transform-typeof-symbol": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-timing-functions/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@babel/plugin-transform-unicode-escapes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-timing-functions/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@babel/plugin-transform-unicode-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" } }, - "node_modules/postcss-normalize-timing-functions/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-normalize-timing-functions/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" + "@babel/preset-env": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.5.tgz", + "integrity": "sha512-ci6TsS0bjrdPpWGnQ+m4f+JSSzDKlckqKIJJt9UZ/+g7Zz9k0N8lYU8IeLg/01o2h8LyNZDMLGgRLDTxpudLsA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-async-generator-functions": "^7.14.5", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.14.5", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.14.5", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.14.5", + "@babel/plugin-transform-classes": "^7.14.5", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.5", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.14.5", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.14.5", + "@babel/plugin-transform-modules-systemjs": "^7.14.5", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.5", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.14.5", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@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.5", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.14.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/postcss-normalize-timing-functions/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" } }, - "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-normalize-timing-functions/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@babel/runtime": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "regenerator-runtime": "^0.13.4" } }, - "node_modules/postcss-normalize-timing-functions/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" }, - "engines": { - "node": ">=6" + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + } } }, - "node_modules/postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" + "@babel/traverse": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.5.tgz", + "integrity": "sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" }, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } } }, - "node_modules/postcss-normalize-unicode/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" } }, - "node_modules/postcss-normalize-unicode/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "@biigle/ol": { + "version": "5.3.1", + "resolved": "https://npm.pkg.github.com/download/@biigle/ol/5.3.1/7679746c6bc5e2fcfd95ae524430992bb7a377e13ea7b7eb4640b21b677fc3b3", + "integrity": "sha512-j2MofoJbYeHJB8GsrcOjED7e7wl9k6yhEOFzt8TXz4Fn2aogO19gBn8KovrIQ9xFpXueNTcLre7lRUdZ3AeYBQ==", + "requires": { + "@turf/boolean-contains": "^6.0.1", + "@turf/boolean-overlap": "^6.0.1", + "@turf/difference": "6.0.1", + "@turf/helpers": "^6.1.4", + "@turf/union": "^6.0.3", + "pbf": "3.1.0", + "pixelworks": "1.1.0", + "rbush": "2.0.2" } }, - "node_modules/postcss-normalize-unicode/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@discoveryjs/json-ext": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", + "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" }, - "engines": { - "node": ">=4" + "dependencies": { + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } } }, - "node_modules/postcss-normalize-unicode/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" } }, - "node_modules/postcss-normalize-unicode/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, - "node_modules/postcss-normalize-unicode/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "@nodelib/fs.walk": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", + "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, - "node_modules/postcss-normalize-unicode/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "@trysound/sax": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", + "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", "dev": true }, - "node_modules/postcss-normalize-unicode/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "@turf/area": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.3.0.tgz", + "integrity": "sha512-Y1cYyAQ2fk94npdgOeMF4msc2uabHY1m7A7ntixf1I8rkyDd6/iHh1IMy1QsM+VZXAEwDwsXhu+ZFYd3Jkeg4A==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/meta": "^6.3.0" } }, - "node_modules/postcss-normalize-unicode/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "@turf/bbox": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.3.0.tgz", + "integrity": "sha512-N4ue5Xopu1qieSHP2MA/CJGWHPKaTrVXQJjzHRNcY1vtsO126xbSaJhWUrFc5x5vVkXp0dcucGryO0r5m4o/KA==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/meta": "^6.3.0" } }, - "node_modules/postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "dev": true, - "dependencies": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" + "@turf/bearing": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-6.3.0.tgz", + "integrity": "sha512-apuUm9xN6VQLO33m7F2mmzlm3dHfeesJjMSzh9iehGtgmp1IaVndjdcIvs0ieiwm8bN9UhwXpfPtO3pV0n9SFw==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" } }, - "node_modules/postcss-normalize-url/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "@turf/boolean-contains": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-6.3.0.tgz", + "integrity": "sha512-1MW7B5G5tIu1lnAv3pXyFzl75wfBYnbA2GhwHDb4okIXMhloy/r5uIqAZHo0fOXykKVJS/gIfA/MioKIftoTug==", + "requires": { + "@turf/bbox": "^6.3.0", + "@turf/boolean-point-in-polygon": "^6.3.0", + "@turf/boolean-point-on-line": "^6.3.0", + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" } }, - "node_modules/postcss-normalize-url/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "@turf/boolean-overlap": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-6.3.0.tgz", + "integrity": "sha512-rWh8JKTqlJ1m27FY8YeWcGoXutLyCVfSi2/8AOkXi2F+36P9GM4tHz19yKY3btbnHJTgSZf1xO2YhX2d0BmNqg==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "@turf/line-intersect": "^6.3.0", + "@turf/line-overlap": "^6.3.0", + "@turf/meta": "^6.3.0", + "geojson-equality": "0.1.6" } }, - "node_modules/postcss-normalize-url/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "@turf/boolean-point-in-polygon": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.3.0.tgz", + "integrity": "sha512-NqFSsoE6OwhDK19IllDQRhEQEkF7UVEOlqH9vgS1fGg4T6NcyKvACJs05c9457tL7QSbV9ZS53f2qiLneFL+qg==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" } }, - "node_modules/postcss-normalize-url/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" + "@turf/boolean-point-on-line": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-6.3.0.tgz", + "integrity": "sha512-eScH8sfKJVjfbEX5Hgkt1nA7A8DUoiYD1riUVqTp2xikujrMfnYRjFpL/UAo01v33cPKZlhCXp7NE86bdOSrYg==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" } }, - "node_modules/postcss-normalize-url/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-normalize-url/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" + "@turf/destination": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-6.3.0.tgz", + "integrity": "sha512-aLt3U/XkJWyZW08Ln1qZwBNAGh27yhmYLu892+dBj3gKP6UUiR6ZopXxrBwjBVe00A6k2ktftKDn79qe0hptuw==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" } }, - "node_modules/postcss-normalize-url/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "@turf/difference": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@turf/difference/-/difference-6.0.1.tgz", + "integrity": "sha512-lkhJjNfPeLARQm232A851vVhrUvX3gdvTft5QlqkUlr7AzLpiT8PW14yEkU9xABxRh6PGv7T1UUVAeRgC7JxuA==", + "requires": { + "@turf/area": "6.x", + "@turf/helpers": "6.x", + "@turf/invariant": "6.x", + "@turf/meta": "6.x", + "martinez-polygon-clipping": "*" } }, - "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-normalize-url/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "@turf/distance": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-6.3.0.tgz", + "integrity": "sha512-basi24ssNFnH3iXPFjp/aNUrukjObiFWoIyDRqKyBJxVwVOwAWvfk4d38QQyBj5nDo5IahYRq/Q+T47/5hSs9w==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0" } }, - "node_modules/postcss-normalize-url/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "@turf/helpers": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.3.0.tgz", + "integrity": "sha512-kr6KuD4Z0GZ30tblTEvi90rvvVNlKieXuMC8CTzE/rVQb0/f/Cb29zCXxTD7giQTEQY/P2nRW23wEqqyNHulCg==" + }, + "@turf/invariant": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.3.0.tgz", + "integrity": "sha512-2OFOi9p+QOrcIMySEnr+WlOiKaFZ1bY56jA98YyECewJHfhPFWUBZEhc4nWGRT0ahK08Vus9+gcuBX8QIpCIIw==", + "requires": { + "@turf/helpers": "^6.3.0" } }, - "node_modules/postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" + "@turf/line-intersect": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.3.0.tgz", + "integrity": "sha512-3naxR7XpkPd2vst3Mw6DFry4C9m3o0/f2n/xu5UAyxb88Ie4m2k+1eqkhzMMx/0L+E6iThWpLx7DASM6q6o9ow==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "@turf/line-segment": "^6.3.0", + "@turf/meta": "^6.3.0", + "geojson-rbush": "3.x" } }, - "node_modules/postcss-normalize-whitespace/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "@turf/line-overlap": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-6.3.0.tgz", + "integrity": "sha512-fVyXfTpr/A+ZXZWG6PbuYz5rAGbTQWyrMZveCl2049SbOXSkVXGjUfpnLaklP0p+adw7eRR0LhZn6FGz9CQaFg==", + "requires": { + "@turf/boolean-point-on-line": "^6.3.0", + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "@turf/line-segment": "^6.3.0", + "@turf/meta": "^6.3.0", + "@turf/nearest-point-on-line": "^6.3.0", + "deep-equal": "1.x", + "geojson-rbush": "3.x" } }, - "node_modules/postcss-normalize-whitespace/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "@turf/line-segment": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.3.0.tgz", + "integrity": "sha512-M+aDy83V+E7jYWNaf+b+A88yhnMrJhyg/lhAj6mU6UeB2PbruXB2qgSmmVDSE2dIknOvZZuIWNzEzUI07RO2kw==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "@turf/meta": "^6.3.0" } }, - "node_modules/postcss-normalize-whitespace/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "@turf/meta": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.3.0.tgz", + "integrity": "sha512-qBJjaAJS9H3ap0HlGXyF/Bzfl0qkA9suafX/jnDsZvWMfVLt+s+o6twKrXOGk5t7nnNON2NFRC8+czxpu104EQ==", + "requires": { + "@turf/helpers": "^6.3.0" } }, - "node_modules/postcss-normalize-whitespace/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" + "@turf/nearest-point-on-line": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.3.0.tgz", + "integrity": "sha512-b4C9Md1VbGn9chMgdSj2grJD4w4t0owEWOKEBwOZfdhrcksyOedVvKB7XqOFdj/8Jitel40EKAC5LQTNu24kEQ==", + "requires": { + "@turf/bearing": "^6.3.0", + "@turf/destination": "^6.3.0", + "@turf/distance": "^6.3.0", + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "@turf/line-intersect": "^6.3.0", + "@turf/meta": "^6.3.0" } }, - "node_modules/postcss-normalize-whitespace/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/postcss-normalize-whitespace/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" + "@turf/union": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/@turf/union/-/union-6.3.0.tgz", + "integrity": "sha512-m8yh13Q5E0Y+YC10+iI/Qq0Txt7UmSIFByc7DfNVlMMGTceqLFa8xGwSVdFuB/d6MWwKuzKonQMl1PUx/Vd2Iw==", + "requires": { + "@turf/helpers": "^6.3.0", + "@turf/invariant": "^6.3.0", + "polygon-clipping": "^0.15.2" } }, - "node_modules/postcss-normalize-whitespace/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "@types/babel__core": { + "version": "7.1.14", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", + "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" } }, - "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-normalize-whitespace/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@types/babel__generator": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@babel/types": "^7.0.0" } }, - "node_modules/postcss-normalize-whitespace/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "@types/babel__template": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" } }, - "node_modules/postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "@types/babel__traverse": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", + "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", "dev": true, - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@babel/types": "^7.3.0" } }, - "node_modules/postcss-ordered-values/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@types/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-x8xEbfTtcv5uyQDrBXKg9Beo5QhTPqO4vM0uq4iU27/nhyRRWNEMKHjxvAb0WDvp2Mnt4Sw0jKmIi5yQF/k2Ag==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" + "requires": { + "@types/node": "*", + "source-map": "^0.6.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-ordered-values/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "node_modules/postcss-ordered-values/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@types/eslint": { + "version": "7.2.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", + "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" } }, - "node_modules/postcss-ordered-values/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "requires": { + "@types/eslint": "*", + "@types/estree": "*" } }, - "node_modules/postcss-ordered-values/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "@types/estree": { + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", + "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", "dev": true }, - "node_modules/postcss-ordered-values/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@types/minimatch": "*", + "@types/node": "*" } }, - "node_modules/postcss-ordered-values/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "@types/http-proxy": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.6.tgz", + "integrity": "sha512-+qsjqR75S/ib0ig0R9WN+CDoZeOBU6F2XLewgC4KVgdXiNHiKKHFEMRHOrs5PbYE97D5vataw5wPj4KLYfUkuQ==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "requires": { + "@types/node": "*" } }, - "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss-ordered-values/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@types/imagemin": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-7.0.0.tgz", + "integrity": "sha512-BiNd5FazD5ZmJUYD9txsbrttL0P0welrb9yAPn6ykKK3kWufwFsxYqw5KdggfZQDjiNYwsBrX+Fwei0Xsw4oAw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@types/node": "*" } }, - "node_modules/postcss-ordered-values/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "@types/imagemin-gifsicle": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz", + "integrity": "sha512-RVFQZhPm/6vLC8wDvzHa34ZDrJECqmDV4XBS99AEk2ObyV4pcLQwObGYlmBv6fi9AtRLHf8mnKGczIHtF77u7w==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@types/imagemin": "*" } }, - "node_modules/postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "@types/imagemin-mozjpeg": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz", + "integrity": "sha512-sR2nEZOrlbgnmVgG+lXetZOvhgtctLe1hBfvySnPnxDd2pOon9mMPq7SHFI89VZT1AXvFgRs8w6X8ik8potpgA==", "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@types/imagemin": "*" } }, - "node_modules/postcss-reduce-initial/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "@types/imagemin-optipng": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.0.tgz", + "integrity": "sha512-Qn4gTV1fpPG2WIsUIl10yi2prudOuDIx+D+O0H3aKZRcTCwpMjszBVeRWUqkhG5wADhWO4giLut1sFNr3H2XIQ==", + "dev": true, + "requires": { + "@types/imagemin": "*" } }, - "node_modules/postcss-reduce-initial/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@types/imagemin-svgo": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-8.0.1.tgz", + "integrity": "sha512-YafkdrVAcr38U0Ln1C+L1n4SIZqC47VBHTyxCq7gTUSd1R9MdIvMcrljWlgU1M9O68WZDeQWUrKipKYfEOCOvQ==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@types/imagemin": "*", + "@types/svgo": "^1" } }, - "node_modules/postcss-reduce-initial/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", + "dev": true + }, + "@types/node": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.0.tgz", + "integrity": "sha512-8/bnjSZD86ZfpBsDlCIkNXIvm+h6wi9g7IqL+kmFkQ+Wvu3JrasgLElfiPgoo8V8vVfnEi0QVS12gbl94h9YsQ==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "@types/svgo": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.5.tgz", + "integrity": "sha512-y9Pw8IK50OqFRDpdI9Is29KlWiENVW9FDvlTmGHelvTfR2brYFJbsClvulZfeq6YKacFrDsG9a39w0kJZdHLaw==", + "dev": true + }, + "@vue/component-compiler-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz", + "integrity": "sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.14", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" }, - "engines": { - "node": ">=4" + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, - "node_modules/postcss-reduce-initial/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@webassemblyjs/ast": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "requires": { + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" } }, - "node_modules/postcss-reduce-initial/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", "dev": true }, - "node_modules/postcss-reduce-initial/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "@webassemblyjs/helper-api-error": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@xtuc/long": "4.2.2" } }, - "node_modules/postcss-reduce-initial/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" } }, - "node_modules/postcss-reduce-initial/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "@webassemblyjs/ieee754": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/postcss-reduce-initial/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "@webassemblyjs/leb128": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "@xtuc/long": "4.2.2" } }, - "node_modules/postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "@webassemblyjs/utf8": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", "dev": true, - "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" } }, - "node_modules/postcss-reduce-transforms/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "@webassemblyjs/wasm-gen": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, - "node_modules/postcss-reduce-transforms/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "@webassemblyjs/wasm-opt": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" } }, - "node_modules/postcss-reduce-transforms/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "@webassemblyjs/wasm-parser": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, - "node_modules/postcss-reduce-transforms/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "@webassemblyjs/wast-printer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", "dev": true, - "dependencies": { - "color-name": "1.1.3" + "requires": { + "@webassemblyjs/ast": "1.11.0", + "@xtuc/long": "4.2.2" } }, - "node_modules/postcss-reduce-transforms/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "@webpack-cli/configtest": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.4.tgz", + "integrity": "sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ==", + "dev": true, + "requires": {} }, - "node_modules/postcss-reduce-transforms/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "@webpack-cli/info": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.3.0.tgz", + "integrity": "sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "envinfo": "^7.7.3" } }, - "node_modules/postcss-reduce-transforms/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "@webpack-cli/serve": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.5.1.tgz", + "integrity": "sha512-4vSVUiOPJLmr45S8rMGy7WDvpWxfFxfP/Qx/cxZFCfvoypTYpPPL1X8VIZMe0WTA+Jr7blUxwUSEZNkjoMTgSw==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } + "requires": {} }, - "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, - "node_modules/postcss-reduce-transforms/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true }, - "node_modules/postcss-reduce-transforms/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" } }, - "node_modules/postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true }, - "node_modules/postcss-svgo": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", - "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", "dev": true, - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } + "requires": {} }, - "node_modules/postcss-svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "adjust-sourcemap-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", + "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" } }, - "node_modules/postcss-svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, - "node_modules/postcss-svgo/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "node_modules/postcss-svgo/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, - "dependencies": { - "color-name": "1.1.3" - } + "requires": {} }, - "node_modules/postcss-svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", "dev": true }, - "node_modules/postcss-svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true }, - "node_modules/postcss-svgo/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" + "requires": { + "type-fest": "^0.21.3" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } } }, - "node_modules/postcss-svgo/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", "dev": true }, - "node_modules/postcss-svgo/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-svgo/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "dev": true, - "dependencies": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true }, - "node_modules/postcss-unique-selectors/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "color-convert": "^2.0.1" } }, - "node_modules/postcss-unique-selectors/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "node_modules/postcss-unique-selectors/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "sprintf-js": "~1.0.2" } }, - "node_modules/postcss-unique-selectors/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } + "arity-n": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", + "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", + "dev": true }, - "node_modules/postcss-unique-selectors/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", "dev": true }, - "node_modules/postcss-unique-selectors/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true }, - "node_modules/postcss-unique-selectors/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-unique-selectors/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, - "node_modules/postcss-unique-selectors/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" }, - "engines": { - "node": ">=6" + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } } }, - "node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, - "node_modules/postcss/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "lodash": "^4.17.14" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.6.tgz", + "integrity": "sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg==", "dev": true, - "engines": { - "node": ">= 0.8.0" + "requires": { + "browserslist": "^4.16.6", + "caniuse-lite": "^1.0.30001230", + "colorette": "^1.2.2", + "fraction.js": "^4.1.1", + "normalize-range": "^0.1.2", + "postcss-value-parser": "^4.1.0" } }, - "node_modules/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", "dev": true, - "optional": true, - "bin": { - "prettier": "bin-prettier.js" + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "dev": true, - "engines": { - "node": ">=4" + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + } } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, - "engines": { - "node": ">= 0.6.0" + "requires": { + "object.assign": "^4.1.0" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", "dev": true, - "engines": { - "node": ">=0.4.0" + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, - "node_modules/protocol-buffers-schema": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.5.1.tgz", - "integrity": "sha512-YVCvdhxWNDP8/nJDyXLuM+UFsuPk4+1PB7WGPVDzm3HTHbzFLxQYeW2iZpS4mmnXrQJGBzt230t/BbEb7PrQaw==" - }, - "node_modules/proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "babel-plugin-polyfill-corejs3": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", + "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", "dev": true, - "dependencies": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.14.0" } }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", "dev": true, - "engines": { - "node": ">= 0.10" + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2" } }, - "node_modules/pseudomap": { + "balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", "dev": true }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, - "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, - "engines": { - "node": ">=0.6" + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "engines": { - "node": ">=0.4.x" + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "engines": { - "node": ">=0.4.x" + "requires": { + "fill-range": "^7.0.1" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quickselect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", - "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==" + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, - "engines": { - "node": ">= 0.6" + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", "dev": true, - "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" } }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rbush": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", - "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, "dependencies": { - "quickselect": "^1.0.1" + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "requires": { + "pako": "~1.0.5" } }, - "node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" } }, - "node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "node_modules/rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", - "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", "dev": true }, - "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.0" - }, - "engines": { - "node": ">=4" - } + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true }, - "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true }, - "node_modules/regex-not": { + "call-bind": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" } }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" } }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "caniuse-lite": { + "version": "1.0.30001239", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz", + "integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==", "dev": true }, - "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "node_modules/regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true + }, + "chokidar": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", + "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", "dev": true, - "dependencies": { - "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" - }, - "engines": { - "node": ">=4" + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.3.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" } }, - "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true }, - "node_modules/regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } + "ci-info": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", + "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", + "dev": true }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, - "bin": { - "jsesc": "bin/jsesc" + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "clean-css": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz", + "integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==", "dev": true, - "engines": { - "node": ">= 0.10" + "requires": { + "source-map": "~0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "cli-table3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", + "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^4.2.0" } }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "engines": { - "node": ">=0.10" + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, - "engines": { - "node": ">= 0.10" + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "collect.js": { + "version": "4.28.6", + "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.28.6.tgz", + "integrity": "sha512-NAyuk1DnCotRaDZIS5kJ4sptgkwOeYqElird10yziN5JBuwYOGkOTguhNcPn5g344IfylZecxNYZAVXgv19p5Q==", + "dev": true }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "color-name": "~1.1.4" } }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "colord": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.0.1.tgz", + "integrity": "sha512-vm5YpaWamD0Ov6TSG0GGmUIwstrWcfKQV/h2CmbR7PbNu41+qdB5PW9lpzhjedrpm08uuYvcXi0Oel1RLZIJuA==", + "dev": true }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-protobuf-schema": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", - "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", - "dependencies": { - "protocol-buffers-schema": "^3.3.1" - } + "optional": true }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true }, - "node_modules/resolve-url-loader": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.3.tgz", - "integrity": "sha512-WbDSNFiKPPLem1ln+EVTE+bFUBdTTytfQZWbmghroaFNFaAVmGq0Saqw6F/306CwgPXsGwXVxbODE+3xAo/YbA==", - "dev": true, - "dependencies": { - "adjust-sourcemap-loader": "3.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.21", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=6.0.0" - } + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true }, - "node_modules/resolve-url-loader/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "compose-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", + "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "arity-n": "^1.0.4" } }, - "node_modules/resolve-url-loader/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, - "engines": { - "node": ">=6" + "requires": { + "mime-db": ">= 1.43.0 < 2" } }, - "node_modules/resolve-url-loader/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, - "node_modules/resolve-url-loader/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "concat": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", + "integrity": "sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=", "dev": true, + "requires": { + "commander": "^2.9.0" + }, "dependencies": { - "color-name": "1.1.3" + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } } }, - "node_modules/resolve-url-loader/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "node_modules/resolve-url-loader/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true, - "engines": { - "node": ">= 0.10" - } + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true }, - "node_modules/resolve-url-loader/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "consola": { + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "bluebird": "^3.1.1" } }, - "node_modules/resolve-url-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "requires": { + "safe-buffer": "5.1.2" } }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" + "requires": { + "safe-buffer": "~5.1.1" } }, - "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "core-js-compat": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.0.tgz", + "integrity": "sha512-8X6lWsG+s7IfOKzV93a7fRYfWRZobOfjw5V5rrq43Vh/W+V6qYxl7Akalsvgab4PFT/4L/pjQbdBUEM36NXKrw==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "requires": { + "browserslist": "^4.16.6", + "semver": "7.0.0" }, - "engines": { - "node": ">=6.0.0" + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } } }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" } }, - "node_modules/resolve-url-loader/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" }, - "engines": { - "node": ">=6" + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, - "engines": { - "node": ">=0.12" + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, - "engines": { - "node": ">= 4" + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "cross-env": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", + "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "requires": { + "cross-spawn": "^6.0.5" } }, - "node_modules/rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, - "dependencies": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "node_modules/rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", - "dev": true - }, - "node_modules/rework/node_modules/convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", - "dev": true - }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", "dev": true }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + }, "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/robust-predicates": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz", - "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==" - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true } - ], - "dependencies": { - "queue-microtask": "^1.2.2" } }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "css-color-names": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", + "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", "dev": true }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "css-declaration-sorter": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", + "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", "dev": true, - "dependencies": { - "ret": "~0.1.10" + "requires": { + "timsort": "^0.3.0" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sass": { - "version": "1.32.13", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.13.tgz", - "integrity": "sha512-dEgI9nShraqP7cXQH+lEXVf73WOPCse0QlFzSD8k+1TcOxCMwVXfQlr0jtoluZysQOyJGnfr21dLvYKDJq8HkA==", + "css-loader": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", + "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0" - }, - "bin": { - "sass": "sass.js" + "requires": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/sass-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", - "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", - "dev": true, "dependencies": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0", - "sass": "^1.3.0", - "webpack": "^4.36.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, - "node-sass": { - "optional": true + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } }, - "sass": { - "optional": true + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, - "node_modules/sass-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "css-select": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", + "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", "dev": true, - "dependencies": { - "minimist": "^1.2.0" + "requires": { + "boolbase": "^1.0.0", + "css-what": "^4.0.0", + "domhandler": "^4.0.0", + "domutils": "^2.4.3", + "nth-check": "^2.0.0" }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/sass-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + } } }, - "node_modules/sass-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/sass-loader/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "css-what": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", + "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", "dev": true }, - "node_modules/schema-utils": { + "cssesc": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, - "node_modules/selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "cssnano": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", + "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", "dev": true, - "dependencies": { - "node-forge": "^0.10.0" + "requires": { + "cosmiconfig": "^7.0.0", + "cssnano-preset-default": "^5.1.3", + "is-resolvable": "^1.1.0" } }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "cssnano-preset-default": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", + "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^2.0.1", + "postcss-calc": "^8.0.0", + "postcss-colormin": "^5.2.0", + "postcss-convert-values": "^5.0.1", + "postcss-discard-comments": "^5.0.1", + "postcss-discard-duplicates": "^5.0.1", + "postcss-discard-empty": "^5.0.1", + "postcss-discard-overridden": "^5.0.1", + "postcss-merge-longhand": "^5.0.2", + "postcss-merge-rules": "^5.0.2", + "postcss-minify-font-values": "^5.0.1", + "postcss-minify-gradients": "^5.0.1", + "postcss-minify-params": "^5.0.1", + "postcss-minify-selectors": "^5.1.0", + "postcss-normalize-charset": "^5.0.1", + "postcss-normalize-display-values": "^5.0.1", + "postcss-normalize-positions": "^5.0.1", + "postcss-normalize-repeat-style": "^5.0.1", + "postcss-normalize-string": "^5.0.1", + "postcss-normalize-timing-functions": "^5.0.1", + "postcss-normalize-unicode": "^5.0.1", + "postcss-normalize-url": "^5.0.2", + "postcss-normalize-whitespace": "^5.0.1", + "postcss-ordered-values": "^5.0.2", + "postcss-reduce-initial": "^5.0.1", + "postcss-reduce-transforms": "^5.0.1", + "postcss-svgo": "^5.0.2", + "postcss-unique-selectors": "^5.0.1" + } + }, + "cssnano-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", + "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", "dev": true, - "bin": { - "semver": "bin/semver" - } + "requires": {} }, - "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" + "requires": { + "css-tree": "^1.1.2" } }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, - "dependencies": { - "ms": "2.0.0" + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" } }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", "dev": true }, - "node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", "dev": true, - "dependencies": { - "randombytes": "^2.1.0" + "requires": { + "ms": "2.1.2" } }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" } }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, - "dependencies": { - "ms": "2.0.0" + "requires": { + "execa": "^5.0.0" } }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "requires": { + "object-keys": "^1.0.12" + } + }, + "del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "requires": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" }, - "engines": { - "node": ">= 0.6" + "dependencies": { + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", "dev": true }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, - "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" }, - "engines": { - "node": ">= 0.8.0" + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "path-type": "^4.0.0" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", "dev": true }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, - "dependencies": { - "inherits": "^2.0.1", + "requires": { + "ip": "^1.1.0", "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" } }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" + "requires": { + "buffer-indexof": "^1.0.0" } }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "esutils": "^2.0.2" } }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, - "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, "dependencies": { - "is-arrayish": "^0.3.1" + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + } } }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "requires": { + "domelementtype": "^2.0.1" } }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "domutils": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", + "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + } } }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.730", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.730.tgz", + "integrity": "sha512-1Tr3h09wXhmqXnvDyrRe6MFgTeU0ZXy3+rMJWTrOHh/HNesWwBBrKnMxRJWZ86dzs8qQdw2c7ZE1/qeGHygImA==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "enhanced-resolve": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", + "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" } }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "ansi-colors": "^4.1.1" } }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true }, - "node_modules/sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", - "websocket-driver": "^0.7.4" + "requires": { + "is-arrayish": "^0.2.1" } }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "es-module-lexer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", + "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", "dev": true }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" } }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" } }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "eslint": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", + "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.21", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, - "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "eslint-plugin-vue": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.9.0.tgz", + "integrity": "sha512-2Q0qQp5+5h+pZvJKCbG1/jCRUYrdgAz5BYKGyTlp2NU8mx09u3Hp7PsH6d5qef6ojuPoCXMnrbbDxeoplihrSw==", "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "requires": { + "eslint-utils": "^2.1.0", + "natural-compare": "^1.4.0", + "semver": "^7.3.2", + "vue-eslint-parser": "^7.6.0" }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/splaytree": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-0.1.4.tgz", - "integrity": "sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ==" - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" } }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" + "requires": { + "eslint-visitor-keys": "^1.1.0" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/std-env": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz", - "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==", - "dev": true, "dependencies": { - "ci-info": "^3.0.0" + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } } }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true } - ] - }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true }, - "node_modules/style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "node_modules/stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/stylehacks/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, - "node_modules/stylehacks/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/stylehacks/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, - "node_modules/stylehacks/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", "dev": true, + "requires": { + "type": "^2.0.0" + }, "dependencies": { - "color-name": "1.1.3" + "type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", + "dev": true + } } }, - "node_modules/stylehacks/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/stylehacks/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" } }, - "node_modules/stylehacks/node_modules/postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "requires": { + "reusify": "^1.0.4" } }, - "node_modules/stylehacks/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=8" + "requires": { + "websocket-driver": ">=0.5.1" } }, - "node_modules/stylehacks/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "escape-string-regexp": "^1.0.5" } }, - "node_modules/stylehacks/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" + "requires": { + "flat-cache": "^3.0.4" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" } }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } + "file-type": { + "version": "12.4.2", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", + "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", + "dev": true }, - "node_modules/svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "requires": { + "to-regex-range": "^5.0.1" } }, - "node_modules/svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "dependencies": { - "color-name": "1.1.3" + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, - "node_modules/svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, - "node_modules/svgo/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10.0.0" + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.4.0.tgz", - "integrity": "sha512-7QD2l6+KBSLwf+7MuYocbWvRPdOu63/trReTLu2KFwkgctnub1auoF+Y1WYcm09CTM7quuscrzqmASaLHC/K4Q==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", "dev": true }, - "node_modules/tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "dev": true, - "engines": { - "node": ">=6" - } + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true }, - "node_modules/terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } + "fraction.js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", + "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", + "dev": true }, - "node_modules/terser-webpack-plugin": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz", - "integrity": "sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q==", - "dev": true, - "dependencies": { - "jest-worker": "^26.6.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.7.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true }, - "node_modules/terser-webpack-plugin/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } }, - "node_modules/terser-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, - "node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "engines": { - "node": ">= 8" - } + "optional": true }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "node_modules/tinyqueue": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-1.2.3.tgz", - "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA==" - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" + "geojson-equality": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/geojson-equality/-/geojson-equality-0.1.6.tgz", + "integrity": "sha1-oXE3TvBD5dR5eZWEC65GSOB1LXI=", + "requires": { + "deep-equal": "^1.0.0" } }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" + "geojson-rbush": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.1.2.tgz", + "integrity": "sha512-grkfdg3HIeTjwTfiJe5FT8+fGU3fABCc+vRJDBwdQz9kkLF0Sbif2gs2JUzjewwgmnvLGy9fInySDeADoNuk7w==", + "requires": { + "@turf/bbox": "*", + "@turf/helpers": "6.x", + "@turf/meta": "6.x", + "rbush": "^2.0.0" } }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true }, - "node_modules/to-regex/node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "is-glob": "^4.0.1" } }, - "node_modules/to-regex/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true }, - "node_modules/to-regex/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "globals": { + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "type-fest": "^0.20.2" } }, - "node_modules/to-regex/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true, - "engines": { - "node": ">=0.6" + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } } }, - "node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", "dev": true }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true, - "engines": { - "node": ">=4" - } + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", + "dev": true }, - "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" - }, - "engines": { - "node": ">=4" + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "node_modules/unicode-match-property-value-ecmascript": { + "he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", - "dev": true, - "engines": { - "node": ">=4" - } + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true }, - "node_modules/unicode-property-aliases-ecmascript": { + "hex-color-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true, - "engines": { - "node": ">=4" - } + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true }, - "node_modules/union-value": { + "hmac-drbg": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, - "node_modules/uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, - "engines": { - "node": ">= 10.0.0" + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, - "node_modules/unpipe": { + "hsl-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", "dev": true }, - "node_modules/unset-value": { + "hsla-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-entities": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", + "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", + "dev": true }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "html-loader": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz", + "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==", "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" + "requires": { + "html-minifier-terser": "^5.1.1", + "htmlparser2": "^4.1.0", + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" } }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", "dev": true, - "dependencies": { - "isarray": "1.0.0" + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" }, - "engines": { - "node": ">=0.10.0" + "dependencies": { + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + } } }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "htmlparser2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", + "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^3.0.0", + "domutils": "^2.0.0", + "entities": "^2.0.0" } }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", "dev": true }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", "dev": true }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" } }, - "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "http-proxy-middleware": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", + "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", "dev": true, - "dependencies": { - "inherits": "2.0.3" + "requires": { + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, - "engines": { - "node": ">= 0.4.0" + "requires": { + "safer-buffer": ">= 2.1.2 < 3" } }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "bin": { - "uuid": "bin/uuid" - } + "requires": {} }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "imagemin": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", + "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", "dev": true, - "engines": { - "node": ">= 0.8" + "requires": { + "file-type": "^12.0.0", + "globby": "^10.0.0", + "graceful-fs": "^4.2.2", + "junk": "^3.1.0", + "make-dir": "^3.0.0", + "p-pipe": "^3.0.0", + "replace-ext": "^1.0.0" } }, - "node_modules/vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "img-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-4.0.0.tgz", + "integrity": "sha512-UwRcPQdwdOyEHyCxe1V9s9YFwInwEWCpoO+kJGfIqDrBDqA8jZUsEZTxQ0JteNPGw/Gupmwesk2OhLTcnw6tnQ==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "requires": { + "loader-utils": "^1.1.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } } }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "node_modules/vue-eslint-parser": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz", - "integrity": "sha512-QXxqH8ZevBrtiZMZK0LpwaMfevQi9UL7lY6Kcp+ogWHC88AuwUPwwCIzkOUc1LR4XsYAt/F9yHXAB/QoD17QXA==", + "import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", "dev": true, - "dependencies": { - "debug": "^4.1.1", - "eslint-scope": "^5.0.0", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.2.1", - "esquery": "^1.4.0", - "lodash": "^4.17.15" - }, - "engines": { - "node": ">=8.10" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5.0.0" + "requires": { + "import-from": "^3.0.0" } }, - "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "engines": { - "node": ">=4" + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, - "node_modules/vue-eslint-parser/node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" + "requires": { + "resolve-from": "^5.0.0" }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/vue-hot-reload-api": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", - "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", - "dev": true - }, - "node_modules/vue-loader": { - "version": "15.9.7", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.7.tgz", - "integrity": "sha512-qzlsbLV1HKEMf19IqCJqdNvFJRCI58WNbS6XbPqK13MrLz65es75w392MSQ5TsARAfIjUw+ATm3vlCXUJSOH9Q==", - "dev": true, "dependencies": { - "@vue/component-compiler-utils": "^3.1.0", - "hash-sum": "^1.0.2", - "loader-utils": "^1.1.0", - "vue-hot-reload-api": "^2.3.0", - "vue-style-loader": "^4.1.0" - }, - "peerDependencies": { - "css-loader": "*", - "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" - }, - "peerDependenciesMeta": { - "cache-loader": { - "optional": true - }, - "vue-template-compiler": { - "optional": true + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true } } }, - "node_modules/vue-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" } }, - "node_modules/vue-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" + "requires": { + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/vue-style-loader": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", - "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "internal-ip": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", + "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", "dev": true, + "requires": { + "default-gateway": "^6.0.0", + "ipaddr.js": "^1.9.1", + "is-ip": "^3.1.0", + "p-event": "^4.2.0" + }, "dependencies": { - "hash-sum": "^1.0.2", - "loader-utils": "^1.0.2" + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } } }, - "node_modules/vue-style-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", + "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", + "dev": true + }, + "ipaddr.js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "dev": true + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" + "requires": { + "binary-extensions": "^2.0.0" } }, - "node_modules/vue-style-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" }, - "engines": { - "node": ">=4.0.0" + "dependencies": { + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + } } }, - "node_modules/vue-template-compiler": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz", - "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==", + "is-core-module": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dev": true, - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.1.0" + "requires": { + "has": "^1.0.3" } }, - "node_modules/vue-template-es2015-compiler": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", - "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, - "node_modules/watchpack": { + "is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", - "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" + "requires": { + "is-extglob": "^2.1.1" } }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" + "is-ip": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", + "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", + "dev": true, + "requires": { + "ip-regex": "^4.0.0" } }, - "node_modules/webpack": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.37.0.tgz", - "integrity": "sha512-yvdhgcI6QkQkDe1hINBAJ1UNevqNGTVaCkD2SSJcB8rcrNNl922RI8i2DXUAuNfANoxwsiXXEA4ZPZI9q2oGLA==", + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.47", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.2.1", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.4.0", - "eslint-scope": "^5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.0.0", - "webpack-sources": "^2.1.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } + "requires": { + "isobject": "^3.0.1" } }, - "node_modules/webpack-cli": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", - "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.3", - "@webpack-cli/info": "^1.2.4", - "@webpack-cli/serve": "^1.4.0", - "colorette": "^1.2.1", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" } }, - "node_modules/webpack-dev-middleware": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.2.0.tgz", - "integrity": "sha512-HVVpHw+5H4lfGasUKjpIkOy9TB27OyKiL13c+dhzVG1w77OQ87b408fp0qKDKQQkNGgShbStDzVJ8sK46JajXg==", + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, - "dependencies": { - "colorette": "^1.2.2", - "mem": "^8.1.1", - "memfs": "^3.2.2", - "mime-types": "^2.1.30", - "range-parser": "^1.2.1", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= v10.23.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "requires": { + "is-docker": "^2.0.0" } }, - "node_modules/webpack-dev-server": { - "version": "4.0.0-beta.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.0.0-beta.2.tgz", - "integrity": "sha512-kbUAjQg1FLtCoIZ0NdcTZWRBVT1EDajBSvGAiAqQPJxBjsr0N3FQ57kJ/4SrIZPyAajn8kcHctwFsTKPwme1tQ==", + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jest-worker": { + "version": "27.0.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", + "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", "dev": true, - "dependencies": { - "ansi-html": "^0.0.7", - "bonjour": "^3.5.0", - "chokidar": "^3.5.1", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "del": "^6.0.0", - "express": "^4.17.1", - "find-cache-dir": "^3.3.1", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^1.1.0", - "internal-ip": "^6.2.0", - "ipaddr.js": "^2.0.0", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "open": "^7.4.2", - "p-retry": "^4.5.0", - "portfinder": "^1.0.28", - "schema-utils": "^3.0.0", - "selfsigned": "^1.10.8", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "spdy": "^4.0.2", - "strip-ansi": "^6.0.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^4.1.0", - "ws": "^7.4.4" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 10.13.0" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } } } }, - "node_modules/webpack-dev-server/node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true, - "engines": { - "node": ">=8" - } + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, - "node_modules/webpack-merge": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", - "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, - "node_modules/webpack-notifier": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.13.0.tgz", - "integrity": "sha512-QLk6l/TZKGhyN6Hd1zobaiYno7S9YPX3wH86+YOSufHes77SegGhnGdj+4vrLDFK5A4ZKoQD5GRXXFnM0h0N8A==", - "dev": true, - "dependencies": { - "node-notifier": "^9.0.0", - "strip-ansi": "^6.0.0" - } + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true }, - "node_modules/webpack-sources/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", - "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, - "node_modules/webpack/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true }, - "node_modules/webpack/node_modules/webpack-sources": { + "json5": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10.13.0" + "requires": { + "minimist": "^1.2.5" } }, - "node_modules/webpackbar": { - "version": "5.0.0-3", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", - "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.1.0", - "consola": "^2.15.0", - "figures": "^3.2.0", - "pretty-time": "^1.1.0", - "std-env": "^2.2.1", - "text-table": "^0.2.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "junk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", + "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", + "dev": true + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "klona": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", + "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "dev": true + }, + "laravel-mix": { + "version": "6.0.24", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.24.tgz", + "integrity": "sha512-64KE/HKm3jiAHzOz6k+niODh4kL6mgzAeKLzEiMLG1odq5vqCnPXsmXfUYm6XaAHDS+2gLN1JlxsdVqtT7GB/w==", "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" + "requires": { + "@babel/core": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.14.5", + "@babel/preset-env": "^7.14.5", + "@babel/runtime": "^7.14.5", + "@types/babel__core": "^7.1.14", + "@types/clean-css": "^4.2.4", + "@types/imagemin-gifsicle": "^7.0.0", + "@types/imagemin-mozjpeg": "^8.0.0", + "@types/imagemin-optipng": "^5.2.0", + "@types/imagemin-svgo": "^8.0.0", + "autoprefixer": "^10.2.6", + "babel-loader": "^8.2.2", + "chalk": "^4.1.1", + "chokidar": "^3.5.1", + "clean-css": "^4.2.3 || ^5.1.2", + "cli-table3": "^0.6.0", + "collect.js": "^4.28.6", + "commander": "^7.2.0", + "concat": "^1.0.3", + "css-loader": "^5.2.6", + "cssnano": "^5.0.6", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^6.2.0", + "fs-extra": "^10.0.0", + "glob": "^7.1.7", + "html-loader": "^1.3.2", + "imagemin": "^7.0.1", + "img-loader": "^4.0.0", + "lodash": "^4.17.21", + "md5": "^2.3.0", + "mini-css-extract-plugin": "^1.6.0", + "node-libs-browser": "^2.2.1", + "postcss-load-config": "^3.0.1", + "postcss-loader": "^6.1.0", + "semver": "^7.3.5", + "strip-ansi": "^6.0.0", + "style-loader": "^2.0.0", + "terser": "^5.7.0", + "terser-webpack-plugin": "^5.1.3", + "vue-style-loader": "^4.1.3", + "webpack": "^5.38.1", + "webpack-cli": "^4.7.2", + "webpack-dev-server": "4.0.0-beta.3", + "webpack-merge": "^5.8.0", + "webpack-notifier": "^1.13.0", + "webpackbar": "^5.0.0-3", + "yargs": "^17.0.1" }, - "engines": { - "node": ">=0.8.0" + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } } }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "laravel-mix-artisan-publish": { + "version": "git+ssh://git@github.com/mzur/laravel-mix-artisan-publish.git#feafb9ba2359d41fddb025bccb4380e9b044783f", "dev": true, - "engines": { - "node": ">=0.8.0" + "from": "laravel-mix-artisan-publish@git://github.com/mzur/laravel-mix-artisan-publish.git", + "requires": { + "node-cmd": "^3.0.0" } }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", "dev": true }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" } }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "requires": { + "p-locate": "^4.1.0" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true }, - "node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" + "requires": { + "tslib": "^2.0.3" } }, - "node_modules/yargs-parser": { - "version": "20.2.7", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", - "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, - "engines": { - "node": ">=10" + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/compat-data": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.0.tgz", - "integrity": "sha512-vu9V3uMM/1o5Hl5OekMUowo3FqXLJSw+s+66nt0fSWVWTtmosdzn45JHOB3cPtZoe6CTBDzvSw0RdOY85Q37+Q==", - "dev": true - }, - "@babel/core": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz", - "integrity": "sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.3", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helpers": "^7.14.0", - "@babel/parser": "^7.14.3", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "semver": "^6.0.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -16487,10520 +16415,1176 @@ } } }, - "@babel/generator": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz", - "integrity": "sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA==", + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "@babel/types": "^7.14.2", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "p-defer": "^1.0.0" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz", - "integrity": "sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw==", + "martinez-polygon-clipping": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.7.1.tgz", + "integrity": "sha512-Xt5hOjAVkRoGN7kUb/0VmkxcG07Ja+OA3qU+7YcY2pAlJ78V1G181VTozHCXpzlj0paNBbcLno77mcGeGStI0A==", + "requires": { + "robust-predicates": "^2.0.4", + "splaytree": "^0.1.4", + "tinyqueue": "^1.2.0" + } + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" } }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz", - "integrity": "sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA==", + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.12.13", - "@babel/types": "^7.12.13" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "@babel/helper-compilation-targets": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.16.tgz", - "integrity": "sha512-3gmkYIrpqsLlieFwjkGgLaSHmhnvlAYzZLlYVjlW+QwI+1zE17kGxuJGmIqDQdYp56XdmGeD+Bswx0UTyG18xA==", + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", + "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", "dev": true, "requires": { - "@babel/compat-data": "^7.13.15", - "@babel/helper-validator-option": "^7.12.17", - "browserslist": "^4.14.5", - "semver": "^6.3.0" + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^3.1.0" }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "mimic-fn": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", + "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", "dev": true } } }, - "@babel/helper-create-class-features-plugin": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.3.tgz", - "integrity": "sha512-BnEfi5+6J2Lte9LeiL6TxLWdIlEv9Woacc1qXzXBgbikcOzMRM2Oya5XGg/f/ngotv1ej2A/b+3iJH8wbS1+lQ==", + "memfs": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz", + "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-replace-supers": "^7.14.3", - "@babel/helper-split-export-declaration": "^7.12.13" + "fs-monkey": "1.0.3" } }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz", - "integrity": "sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "regexpu-core": "^4.7.1" - } + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true }, - "@babel/helper-define-polyfill-provider": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.0.tgz", - "integrity": "sha512-JT8tHuFjKBo8NnaUbblz7mIu1nnvUDiHVjXXkulZULyidvo/7P6TY7+YqpV37IfF+KUFxmlK04elKtGKXaiVgw==", + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" + "source-map": "^0.6.1" }, "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } }, - "@babel/helper-explode-assignable-expression": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz", - "integrity": "sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA==", - "dev": true, - "requires": { - "@babel/types": "^7.13.0" - } + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, - "@babel/helper-function-name": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz", - "integrity": "sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/types": "^7.14.2" - } + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true }, - "@babel/helper-get-function-arity": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", - "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", - "dev": true, - "requires": { - "@babel/types": "^7.12.13" - } + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true }, - "@babel/helper-hoist-variables": { - "version": "7.13.16", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz", - "integrity": "sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg==", + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "dev": true, "requires": { - "@babel/traverse": "^7.13.15", - "@babel/types": "^7.13.16" + "braces": "^3.0.1", + "picomatch": "^2.2.3" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", - "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "@babel/types": "^7.13.12" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } } }, - "@babel/helper-module-imports": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", - "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", - "dev": true, - "requires": { - "@babel/types": "^7.13.12" - } + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true }, - "@babel/helper-module-transforms": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz", - "integrity": "sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-simple-access": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/helper-validator-identifier": "^7.14.0", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" - } + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "dev": true }, - "@babel/helper-optimise-call-expression": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", - "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "mime-db": "1.47.0" } }, - "@babel/helper-plugin-utils": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", - "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "@babel/helper-remap-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz", - "integrity": "sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg==", + "mini-css-extract-plugin": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", + "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-wrap-function": "^7.13.0", - "@babel/types": "^7.13.0" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0", + "webpack-sources": "^1.1.0" } }, - "@babel/helper-replace-supers": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.3.tgz", - "integrity": "sha512-Rlh8qEWZSTfdz+tgNV/N4gz1a0TMNwCUcENhMjHTHKp3LseYH5Jha0NSlyTQWMnjbYcwFt+bqAMqSLHVXkQ6UA==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.13.12", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/traverse": "^7.14.2", - "@babel/types": "^7.14.2" - } + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true }, - "@babel/helper-simple-access": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", - "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "@babel/types": "^7.13.12" + "brace-expansion": "^1.1.7" } }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", - "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "@babel/types": "^7.12.1" + "minimist": "^1.2.5" } }, - "@babel/helper-split-export-declaration": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", - "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "@babel/types": "^7.12.13" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" } }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", "dev": true }, - "@babel/helper-validator-option": { - "version": "7.12.17", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", - "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", "dev": true }, - "@babel/helper-wrap-function": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz", - "integrity": "sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA==", + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.13.0", - "@babel/types": "^7.13.0" + "lower-case": "^2.0.2", + "tslib": "^2.0.3" } }, - "@babel/helpers": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz", - "integrity": "sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg==", + "node-cmd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/node-cmd/-/node-cmd-3.0.0.tgz", + "integrity": "sha1-OP/3CkqqT2WdID61eGJzcBjiT28=", + "dev": true + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, "requires": { - "@babel/template": "^7.12.13", - "@babel/traverse": "^7.14.0", - "@babel/types": "^7.14.0" + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" } }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "node-notifier": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", + "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "yallist": "^4.0.0" } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "lru-cache": "^6.0.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "isexe": "^2.0.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, - "@babel/parser": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.3.tgz", - "integrity": "sha512-7MpZDIfI7sUC5zWo2+foJ50CSI5lcqDehZ0lVgIhSi4bFEk94fLAKlF3Q0nzSQQ+ca0lm+O6G9ztKVBeu8PMRQ==", + "node-releases": { + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", "dev": true }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.13.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz", - "integrity": "sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-proposal-optional-chaining": "^7.13.12" - } + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz", - "integrity": "sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true }, - "@babel/plugin-proposal-class-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz", - "integrity": "sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" - } + "normalize-url": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.0.1.tgz", + "integrity": "sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ==", + "dev": true }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz", - "integrity": "sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ==", + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.3", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-class-static-block": "^7.12.13" + "path-key": "^3.0.0" + }, + "dependencies": { + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + } } }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz", - "integrity": "sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA==", + "nth-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" + "boolbase": "^1.0.0" } }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz", - "integrity": "sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ==", - "dev": true, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz", - "integrity": "sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA==", + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-json-strings": "^7.8.3" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz", - "integrity": "sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg==", + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + "ee-first": "1.1.1" } }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz", - "integrity": "sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q==", + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + "wrappy": "1" } }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz", - "integrity": "sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg==", + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" + "mimic-fn": "^2.1.0" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.2.tgz", - "integrity": "sha512-hBIQFxwZi8GIp934+nj5uV31mqclC1aYDhctDu5khTi9PCCUOczyy0b34W0oE9U/eJXiqQaKyVsmjeagOaSlbw==", + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "requires": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.2" + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz", - "integrity": "sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ==", + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" } }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz", - "integrity": "sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA==", + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" + "p-timeout": "^3.1.0" } }, - "@babel/plugin-proposal-private-methods": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz", - "integrity": "sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q==", + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0" + "p-try": "^2.0.0" } }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg==", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-create-class-features-plugin": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0" + "p-limit": "^2.2.0" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz", - "integrity": "sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg==", + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "aggregate-error": "^3.0.0" } }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true + }, + "p-retry": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.5.0.tgz", + "integrity": "sha512-5Hwh4aVQSu6BEP+w2zKlVXtFAaYQe1qWuVADSgoeVlLjwe/Q/AMSoRR4MDeaAfu8llT+YNbEijWu/YF3m6avkg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@types/retry": "^0.12.0", + "retry": "^0.12.0" } }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "p-finally": "^1.0.0" } }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz", - "integrity": "sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.3" + "dot-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "callsites": "^3.0.0" } }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.10.4" + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" } }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.8.0" + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz", - "integrity": "sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", - "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz", - "integrity": "sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg==", - "dev": true, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "pbf": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz", + "integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "ieee754": "^1.1.6", + "resolve-protobuf-schema": "^2.0.0" } }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz", - "integrity": "sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg==", + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-remap-async-to-generator": "^7.13.0" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz", - "integrity": "sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg==", + "picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true + }, + "pixelworks": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pixelworks/-/pixelworks-1.1.0.tgz", + "integrity": "sha1-Hwla1I3Ki/ihyCWOAJIDGkTyLKU=" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "find-up": "^4.0.0" } }, - "@babel/plugin-transform-block-scoping": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.2.tgz", - "integrity": "sha512-neZZcP19NugZZqNwMTH+KoBjx5WyvESPSIOQb4JHpfd+zPfqcH65RMu5xJju5+6q/Y2VzYrleQTr+b6METyyxg==", - "dev": true, + "polygon-clipping": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.3.tgz", + "integrity": "sha512-ho0Xx5DLkgxRx/+n4O74XyJ67DcyN3Tu9bGYKsnTukGAW6ssnuak6Mwcyb1wHy9MZc9xsUWqIoiazkZB5weECg==", "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "splaytree": "^3.1.0" + }, + "dependencies": { + "splaytree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.0.tgz", + "integrity": "sha512-gvUGR7xnOy0fLKTCxDeUZYgU/I1Tdf8M/lM1Qrf8L2TIOR5ipZjGk02uYcdv0o2x7WjVRgpm3iS2clLyuVAt0Q==" + } } }, - "@babel/plugin-transform-classes": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.2.tgz", - "integrity": "sha512-7oafAVcucHquA/VZCsXv/gmuiHeYd64UJyyTYU+MPfNu0KeNlxw06IeENBO8bJjXVbolu+j1MM5aKQtH1OMCNg==", + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.12.13", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-optimise-call-expression": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-replace-supers": "^7.13.12", - "@babel/helper-split-export-declaration": "^7.12.13", - "globals": "^11.1.0" + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" }, "dependencies": { - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } } } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz", - "integrity": "sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg==", + "postcss": { + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", + "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" } }, - "@babel/plugin-transform-destructuring": { - "version": "7.13.17", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.13.17.tgz", - "integrity": "sha512-UAUqiLv+uRLO+xuBKKMEpC+t7YRNVRqBsWWq1yKXbBZBje/t3IXCiSinZhjn/DC3qzBfICeYd2EFGEbHsh5RLA==", + "postcss-calc": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", + "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.13.0" + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" } }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz", - "integrity": "sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ==", + "postcss-colormin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", + "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.0.1", + "postcss-value-parser": "^4.1.0" } }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz", - "integrity": "sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ==", + "postcss-convert-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", + "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.12.13" + "postcss-value-parser": "^4.1.0" } }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz", - "integrity": "sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz", - "integrity": "sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz", - "integrity": "sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz", - "integrity": "sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz", - "integrity": "sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz", - "integrity": "sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.2", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz", - "integrity": "sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-simple-access": "^7.13.12", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz", - "integrity": "sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.13.0", - "@babel/helper-module-transforms": "^7.13.0", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-identifier": "^7.12.11", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz", - "integrity": "sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.14.0", - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz", - "integrity": "sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz", - "integrity": "sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz", - "integrity": "sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13", - "@babel/helper-replace-supers": "^7.12.13" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz", - "integrity": "sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz", - "integrity": "sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.13.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz", - "integrity": "sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ==", - "dev": true, - "requires": { - "regenerator-transform": "^0.14.2" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz", - "integrity": "sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.14.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.3.tgz", - "integrity": "sha512-t960xbi8wpTFE623ef7sd+UpEC5T6EEguQlTBJDEO05+XwnIWVfuqLw/vdLWY6IdFmtZE+65CZAfByT39zRpkg==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.13.12", - "@babel/helper-plugin-utils": "^7.13.0", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz", - "integrity": "sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz", - "integrity": "sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz", - "integrity": "sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz", - "integrity": "sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.13.0" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz", - "integrity": "sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz", - "integrity": "sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz", - "integrity": "sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.12.13", - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/preset-env": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.2.tgz", - "integrity": "sha512-7dD7lVT8GMrE73v4lvDEb85cgcQhdES91BSD7jS/xjC6QY8PnRhux35ac+GCpbiRhp8crexBvZZqnaL6VrY8TQ==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.14.0", - "@babel/helper-compilation-targets": "^7.13.16", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/helper-validator-option": "^7.12.17", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.13.12", - "@babel/plugin-proposal-async-generator-functions": "^7.14.2", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-class-static-block": "^7.13.11", - "@babel/plugin-proposal-dynamic-import": "^7.14.2", - "@babel/plugin-proposal-export-namespace-from": "^7.14.2", - "@babel/plugin-proposal-json-strings": "^7.14.2", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.2", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.2", - "@babel/plugin-proposal-numeric-separator": "^7.14.2", - "@babel/plugin-proposal-object-rest-spread": "^7.14.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.2", - "@babel/plugin-proposal-optional-chaining": "^7.14.2", - "@babel/plugin-proposal-private-methods": "^7.13.0", - "@babel/plugin-proposal-private-property-in-object": "^7.14.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.12.13", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.12.13", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.0", - "@babel/plugin-syntax-top-level-await": "^7.12.13", - "@babel/plugin-transform-arrow-functions": "^7.13.0", - "@babel/plugin-transform-async-to-generator": "^7.13.0", - "@babel/plugin-transform-block-scoped-functions": "^7.12.13", - "@babel/plugin-transform-block-scoping": "^7.14.2", - "@babel/plugin-transform-classes": "^7.14.2", - "@babel/plugin-transform-computed-properties": "^7.13.0", - "@babel/plugin-transform-destructuring": "^7.13.17", - "@babel/plugin-transform-dotall-regex": "^7.12.13", - "@babel/plugin-transform-duplicate-keys": "^7.12.13", - "@babel/plugin-transform-exponentiation-operator": "^7.12.13", - "@babel/plugin-transform-for-of": "^7.13.0", - "@babel/plugin-transform-function-name": "^7.12.13", - "@babel/plugin-transform-literals": "^7.12.13", - "@babel/plugin-transform-member-expression-literals": "^7.12.13", - "@babel/plugin-transform-modules-amd": "^7.14.2", - "@babel/plugin-transform-modules-commonjs": "^7.14.0", - "@babel/plugin-transform-modules-systemjs": "^7.13.8", - "@babel/plugin-transform-modules-umd": "^7.14.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.13", - "@babel/plugin-transform-new-target": "^7.12.13", - "@babel/plugin-transform-object-super": "^7.12.13", - "@babel/plugin-transform-parameters": "^7.14.2", - "@babel/plugin-transform-property-literals": "^7.12.13", - "@babel/plugin-transform-regenerator": "^7.13.15", - "@babel/plugin-transform-reserved-words": "^7.12.13", - "@babel/plugin-transform-shorthand-properties": "^7.12.13", - "@babel/plugin-transform-spread": "^7.13.0", - "@babel/plugin-transform-sticky-regex": "^7.12.13", - "@babel/plugin-transform-template-literals": "^7.13.0", - "@babel/plugin-transform-typeof-symbol": "^7.12.13", - "@babel/plugin-transform-unicode-escapes": "^7.12.13", - "@babel/plugin-transform-unicode-regex": "^7.12.13", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.2", - "babel-plugin-polyfill-corejs2": "^0.2.0", - "babel-plugin-polyfill-corejs3": "^0.2.0", - "babel-plugin-polyfill-regenerator": "^0.2.0", - "core-js-compat": "^3.9.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/runtime": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz", - "integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", - "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/parser": "^7.12.13", - "@babel/types": "^7.12.13" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - } - } - }, - "@babel/traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz", - "integrity": "sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@babel/generator": "^7.14.2", - "@babel/helper-function-name": "^7.14.2", - "@babel/helper-split-export-declaration": "^7.12.13", - "@babel/parser": "^7.14.2", - "@babel/types": "^7.14.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - } - } - }, - "@babel/types": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.2.tgz", - "integrity": "sha512-SdjAG/3DikRHpUOjxZgnkbR11xUlyDMUFJdvnIgZEE16mqmY0BINMmc4//JMJglEmn6i7sq6p+mGrFWyZ98EEw==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "to-fast-properties": "^2.0.0" - } - }, - "@biigle/ol": { - "version": "5.3.1", - "resolved": "https://npm.pkg.github.com/download/@biigle/ol/5.3.1/7679746c6bc5e2fcfd95ae524430992bb7a377e13ea7b7eb4640b21b677fc3b3", - "integrity": "sha512-j2MofoJbYeHJB8GsrcOjED7e7wl9k6yhEOFzt8TXz4Fn2aogO19gBn8KovrIQ9xFpXueNTcLre7lRUdZ3AeYBQ==", - "requires": { - "@turf/boolean-contains": "^6.0.1", - "@turf/boolean-overlap": "^6.0.1", - "@turf/difference": "6.0.1", - "@turf/helpers": "^6.1.4", - "@turf/union": "^6.0.3", - "pbf": "3.1.0", - "pixelworks": "1.1.0", - "rbush": "2.0.2" - } - }, - "@discoveryjs/json-ext": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", - "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", - "dev": true - }, - "@eslint/eslintrc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", - "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^12.1.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.4", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.4", - "fastq": "^1.6.0" - } - }, - "@turf/area": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.3.0.tgz", - "integrity": "sha512-Y1cYyAQ2fk94npdgOeMF4msc2uabHY1m7A7ntixf1I8rkyDd6/iHh1IMy1QsM+VZXAEwDwsXhu+ZFYd3Jkeg4A==", - "requires": { - "@turf/helpers": "^6.3.0", - "@turf/meta": "^6.3.0" - } - }, - "@turf/bbox": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.3.0.tgz", - "integrity": "sha512-N4ue5Xopu1qieSHP2MA/CJGWHPKaTrVXQJjzHRNcY1vtsO126xbSaJhWUrFc5x5vVkXp0dcucGryO0r5m4o/KA==", - "requires": { - "@turf/helpers": "^6.3.0", - "@turf/meta": "^6.3.0" - } - }, - "@turf/bearing": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-6.3.0.tgz", - "integrity": "sha512-apuUm9xN6VQLO33m7F2mmzlm3dHfeesJjMSzh9iehGtgmp1IaVndjdcIvs0ieiwm8bN9UhwXpfPtO3pV0n9SFw==", - "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" - } - }, - "@turf/boolean-contains": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-6.3.0.tgz", - "integrity": "sha512-1MW7B5G5tIu1lnAv3pXyFzl75wfBYnbA2GhwHDb4okIXMhloy/r5uIqAZHo0fOXykKVJS/gIfA/MioKIftoTug==", - "requires": { - "@turf/bbox": "^6.3.0", - "@turf/boolean-point-in-polygon": "^6.3.0", - "@turf/boolean-point-on-line": "^6.3.0", - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" - } - }, - "@turf/boolean-overlap": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-6.3.0.tgz", - "integrity": "sha512-rWh8JKTqlJ1m27FY8YeWcGoXutLyCVfSi2/8AOkXi2F+36P9GM4tHz19yKY3btbnHJTgSZf1xO2YhX2d0BmNqg==", - "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "@turf/line-intersect": "^6.3.0", - "@turf/line-overlap": "^6.3.0", - "@turf/meta": "^6.3.0", - "geojson-equality": "0.1.6" - } - }, - "@turf/boolean-point-in-polygon": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.3.0.tgz", - "integrity": "sha512-NqFSsoE6OwhDK19IllDQRhEQEkF7UVEOlqH9vgS1fGg4T6NcyKvACJs05c9457tL7QSbV9ZS53f2qiLneFL+qg==", - "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" - } - }, - "@turf/boolean-point-on-line": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-6.3.0.tgz", - "integrity": "sha512-eScH8sfKJVjfbEX5Hgkt1nA7A8DUoiYD1riUVqTp2xikujrMfnYRjFpL/UAo01v33cPKZlhCXp7NE86bdOSrYg==", - "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" - } - }, - "@turf/destination": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-6.3.0.tgz", - "integrity": "sha512-aLt3U/XkJWyZW08Ln1qZwBNAGh27yhmYLu892+dBj3gKP6UUiR6ZopXxrBwjBVe00A6k2ktftKDn79qe0hptuw==", - "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" - } - }, - "@turf/difference": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@turf/difference/-/difference-6.0.1.tgz", - "integrity": "sha512-lkhJjNfPeLARQm232A851vVhrUvX3gdvTft5QlqkUlr7AzLpiT8PW14yEkU9xABxRh6PGv7T1UUVAeRgC7JxuA==", - "requires": { - "@turf/area": "6.x", - "@turf/helpers": "6.x", - "@turf/invariant": "6.x", - "@turf/meta": "6.x", - "martinez-polygon-clipping": "*" - } - }, - "@turf/distance": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-6.3.0.tgz", - "integrity": "sha512-basi24ssNFnH3iXPFjp/aNUrukjObiFWoIyDRqKyBJxVwVOwAWvfk4d38QQyBj5nDo5IahYRq/Q+T47/5hSs9w==", - "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" - } - }, - "@turf/helpers": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.3.0.tgz", - "integrity": "sha512-kr6KuD4Z0GZ30tblTEvi90rvvVNlKieXuMC8CTzE/rVQb0/f/Cb29zCXxTD7giQTEQY/P2nRW23wEqqyNHulCg==" - }, - "@turf/invariant": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.3.0.tgz", - "integrity": "sha512-2OFOi9p+QOrcIMySEnr+WlOiKaFZ1bY56jA98YyECewJHfhPFWUBZEhc4nWGRT0ahK08Vus9+gcuBX8QIpCIIw==", - "requires": { - "@turf/helpers": "^6.3.0" - } - }, - "@turf/line-intersect": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.3.0.tgz", - "integrity": "sha512-3naxR7XpkPd2vst3Mw6DFry4C9m3o0/f2n/xu5UAyxb88Ie4m2k+1eqkhzMMx/0L+E6iThWpLx7DASM6q6o9ow==", - "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "@turf/line-segment": "^6.3.0", - "@turf/meta": "^6.3.0", - "geojson-rbush": "3.x" - } - }, - "@turf/line-overlap": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-6.3.0.tgz", - "integrity": "sha512-fVyXfTpr/A+ZXZWG6PbuYz5rAGbTQWyrMZveCl2049SbOXSkVXGjUfpnLaklP0p+adw7eRR0LhZn6FGz9CQaFg==", - "requires": { - "@turf/boolean-point-on-line": "^6.3.0", - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "@turf/line-segment": "^6.3.0", - "@turf/meta": "^6.3.0", - "@turf/nearest-point-on-line": "^6.3.0", - "deep-equal": "1.x", - "geojson-rbush": "3.x" - } - }, - "@turf/line-segment": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.3.0.tgz", - "integrity": "sha512-M+aDy83V+E7jYWNaf+b+A88yhnMrJhyg/lhAj6mU6UeB2PbruXB2qgSmmVDSE2dIknOvZZuIWNzEzUI07RO2kw==", - "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "@turf/meta": "^6.3.0" - } - }, - "@turf/meta": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.3.0.tgz", - "integrity": "sha512-qBJjaAJS9H3ap0HlGXyF/Bzfl0qkA9suafX/jnDsZvWMfVLt+s+o6twKrXOGk5t7nnNON2NFRC8+czxpu104EQ==", - "requires": { - "@turf/helpers": "^6.3.0" - } - }, - "@turf/nearest-point-on-line": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.3.0.tgz", - "integrity": "sha512-b4C9Md1VbGn9chMgdSj2grJD4w4t0owEWOKEBwOZfdhrcksyOedVvKB7XqOFdj/8Jitel40EKAC5LQTNu24kEQ==", - "requires": { - "@turf/bearing": "^6.3.0", - "@turf/destination": "^6.3.0", - "@turf/distance": "^6.3.0", - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "@turf/line-intersect": "^6.3.0", - "@turf/meta": "^6.3.0" - } - }, - "@turf/union": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/union/-/union-6.3.0.tgz", - "integrity": "sha512-m8yh13Q5E0Y+YC10+iI/Qq0Txt7UmSIFByc7DfNVlMMGTceqLFa8xGwSVdFuB/d6MWwKuzKonQMl1PUx/Vd2Iw==", - "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "polygon-clipping": "^0.15.2" - } - }, - "@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/browser-sync": { - "version": "2.26.1", - "resolved": "https://registry.npmjs.org/@types/browser-sync/-/browser-sync-2.26.1.tgz", - "integrity": "sha512-zuz0uF2QccSVbG4ubkjVDlQYpeBX/JXvmlqFFmp04FYOXunXZtx0y+UdWJxu7uryMMGkQykujUMm/ju85kqI7Q==", - "dev": true, - "requires": { - "@types/micromatch": "^2", - "@types/node": "*", - "@types/serve-static": "*", - "chokidar": "^2.1.2" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - } - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "@types/clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-x8xEbfTtcv5uyQDrBXKg9Beo5QhTPqO4vM0uq4iU27/nhyRRWNEMKHjxvAb0WDvp2Mnt4Sw0jKmIi5yQF/k2Ag==", - "dev": true, - "requires": { - "@types/node": "*", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@types/cssnano": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/cssnano/-/cssnano-4.0.0.tgz", - "integrity": "sha512-BC/2ibKZfPIaBLBNzkitdW1IvvX/LKW6/QXGc4Su/tAJ7mQ3f2CKBuGCCKaqGAnoKwzfuC7G/recpkARwdOwuA==", - "dev": true, - "requires": { - "postcss": "5 - 7" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@types/eslint": { - "version": "7.2.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", - "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "0.0.47", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", - "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", - "dev": true - }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/http-proxy": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.6.tgz", - "integrity": "sha512-+qsjqR75S/ib0ig0R9WN+CDoZeOBU6F2XLewgC4KVgdXiNHiKKHFEMRHOrs5PbYE97D5vataw5wPj4KLYfUkuQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/imagemin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-7.0.0.tgz", - "integrity": "sha512-BiNd5FazD5ZmJUYD9txsbrttL0P0welrb9yAPn6ykKK3kWufwFsxYqw5KdggfZQDjiNYwsBrX+Fwei0Xsw4oAw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/imagemin-gifsicle": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz", - "integrity": "sha512-RVFQZhPm/6vLC8wDvzHa34ZDrJECqmDV4XBS99AEk2ObyV4pcLQwObGYlmBv6fi9AtRLHf8mnKGczIHtF77u7w==", - "dev": true, - "requires": { - "@types/imagemin": "*" - } - }, - "@types/imagemin-mozjpeg": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz", - "integrity": "sha512-sR2nEZOrlbgnmVgG+lXetZOvhgtctLe1hBfvySnPnxDd2pOon9mMPq7SHFI89VZT1AXvFgRs8w6X8ik8potpgA==", - "dev": true, - "requires": { - "@types/imagemin": "*" - } - }, - "@types/imagemin-optipng": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.0.tgz", - "integrity": "sha512-Qn4gTV1fpPG2WIsUIl10yi2prudOuDIx+D+O0H3aKZRcTCwpMjszBVeRWUqkhG5wADhWO4giLut1sFNr3H2XIQ==", - "dev": true, - "requires": { - "@types/imagemin": "*" - } - }, - "@types/imagemin-svgo": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-8.0.1.tgz", - "integrity": "sha512-YafkdrVAcr38U0Ln1C+L1n4SIZqC47VBHTyxCq7gTUSd1R9MdIvMcrljWlgU1M9O68WZDeQWUrKipKYfEOCOvQ==", - "dev": true, - "requires": { - "@types/imagemin": "*", - "@types/svgo": "^1" - } - }, - "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", - "dev": true - }, - "@types/micromatch": { - "version": "2.3.30", - "resolved": "https://registry.npmjs.org/@types/micromatch/-/micromatch-2.3.30.tgz", - "integrity": "sha512-6rW4NsUHaDudxJSuRlm1PdNu61CDXkgix7LBOBg7b3yWQ43XANYSPwkvX1cGiZvBVZW8c5rsCEfrfzbPkch8ag==", - "dev": true, - "requires": { - "@types/parse-glob": "*" - } - }, - "@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", - "dev": true - }, - "@types/node": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.0.tgz", - "integrity": "sha512-8/bnjSZD86ZfpBsDlCIkNXIvm+h6wi9g7IqL+kmFkQ+Wvu3JrasgLElfiPgoo8V8vVfnEi0QVS12gbl94h9YsQ==", - "dev": true - }, - "@types/parse-glob": { - "version": "3.0.29", - "resolved": "https://registry.npmjs.org/@types/parse-glob/-/parse-glob-3.0.29.tgz", - "integrity": "sha1-akDsfr0kGO5p7jl+SOQhaSaKEL8=", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", - "dev": true - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "@types/serve-static": { - "version": "1.13.9", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", - "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", - "dev": true, - "requires": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "@types/svgo": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.5.tgz", - "integrity": "sha512-y9Pw8IK50OqFRDpdI9Is29KlWiENVW9FDvlTmGHelvTfR2brYFJbsClvulZfeq6YKacFrDsG9a39w0kJZdHLaw==", - "dev": true - }, - "@vue/component-compiler-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz", - "integrity": "sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==", - "dev": true, - "requires": { - "consolidate": "^0.15.1", - "hash-sum": "^1.0.2", - "lru-cache": "^4.1.2", - "merge-source-map": "^1.1.0", - "postcss": "^7.0.14", - "postcss-selector-parser": "^6.0.2", - "prettier": "^1.18.2", - "source-map": "~0.6.1", - "vue-template-es2015-compiler": "^1.9.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.0", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.3.tgz", - "integrity": "sha512-WQs0ep98FXX2XBAfQpRbY0Ma6ADw8JR6xoIkaIiJIzClGOMqVRvPCWqndTxf28DgFopWan0EKtHtg/5W1h0Zkw==", - "dev": true, - "requires": {} - }, - "@webpack-cli/info": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.4.tgz", - "integrity": "sha512-ogE2T4+pLhTTPS/8MM3IjHn0IYplKM4HbVNMCWA9N4NrdPzunwenpCsqKEXyejMfRu6K8mhauIPYf8ZxWG5O6g==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.4.0.tgz", - "integrity": "sha512-xgT/HqJ+uLWGX+Mzufusl3cgjAcnqYYskaB7o0vRcwOEfuu6hMzSILQpnIzFMGsTaeaX4Nnekl+6fadLbl1/Vg==", - "dev": true, - "requires": {} - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dev": true, - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } - }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true, - "requires": {} - }, - "adjust-sourcemap-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", - "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", - "dev": true - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", - "dev": true - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "autoprefixer": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz", - "integrity": "sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==", - "dev": true, - "requires": { - "browserslist": "^4.16.3", - "caniuse-lite": "^1.0.30001196", - "colorette": "^1.2.2", - "fraction.js": "^4.0.13", - "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" - } - }, - "babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.0.tgz", - "integrity": "sha512-9bNwiR0dS881c5SHnzCmmGlMkJLl0OUZvxrxHo9w/iNoRuqaPjqlvBf4HrovXtQs/au5yKkpcdgfT1cC5PAZwg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.0", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.0.tgz", - "integrity": "sha512-zZyi7p3BCUyzNxLx8KV61zTINkkV65zVkDAFNZmrTCRVhjo1jAS+YLvDJ9Jgd/w2tsAviCwFHReYfxO3Iql8Yg==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.0", - "core-js-compat": "^3.9.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.0.tgz", - "integrity": "sha512-J7vKbCuD2Xi/eEHxquHN14bXAW9CXtecwuLrOIDJtcZzTaPzV1VdEfoUf9AzcRBMolKUQKM9/GVojeh0hFiqMg==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", - "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, - "dependencies": { - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - } - }, - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, - "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } - } - }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001228", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001228.tgz", - "integrity": "sha512-QQmLOGJ3DEgokHbMSA8cj2a+geXqmnpyOFT0lhQV6P3/YOJvGDEwoedcwxEQ30gJIwIIunHIicunJ2rzK5gB2A==", - "dev": true - }, - "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true - }, - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "ci-info": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", - "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - } - }, - "clean-css": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz", - "integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cli-table3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", - "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", - "dev": true, - "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", - "string-width": "^4.2.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "collect.js": { - "version": "4.28.6", - "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.28.6.tgz", - "integrity": "sha512-NAyuk1DnCotRaDZIS5kJ4sptgkwOeYqElird10yziN5JBuwYOGkOTguhNcPn5g344IfylZecxNYZAVXgv19p5Q==", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" - }, - "dependencies": { - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", - "dev": true, - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, - "colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "optional": true - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", - "dev": true, - "requires": { - "arity-n": "^1.0.4" - } - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "concat": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", - "integrity": "sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=", - "dev": true, - "requires": { - "commander": "^2.9.0" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true - }, - "consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", - "dev": true - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "consolidate": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", - "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", - "dev": true, - "requires": { - "bluebird": "^3.1.1" - } - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-js-compat": { - "version": "3.12.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.12.1.tgz", - "integrity": "sha512-i6h5qODpw6EsHAoIdQhKoZdWn+dGBF3dSS8m5tif36RlWvW3A6+yu2S16QHUo3CrkzrnEskMAt9f8FxmY9fhWQ==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "dependencies": { - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-env": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", - "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.5" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - }, - "css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "dev": true, - "requires": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "css-loader": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.4.tgz", - "integrity": "sha512-OFYGyINCKkdQsTrSYxzGSFnGS4gNjcXkKkQgWxK138jgnPt+lepxdjSZNc8sHAl5vP3DhsJUxufWIjOwI8PMMw==", - "dev": true, - "requires": { - "camelcase": "^6.2.0", - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.10", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - }, - "dependencies": { - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - }, - "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - } - } - } - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", - "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.8", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "cssnano-preset-default": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", - "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", - "dev": true, - "requires": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.3", - "postcss-unique-selectors": "^4.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", - "dev": true - }, - "cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", - "dev": true - }, - "cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "dev": true - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "requires": { - "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", - "dev": true - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "requires": { - "execa": "^5.0.0" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dev": true, - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "dependencies": { - "globby": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", - "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" - } - }, - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - } - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dev": true, - "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "requires": { - "buffer-indexof": "^1.0.0" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "dependencies": { - "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - }, - "domhandler": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", - "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1" - } - }, - "domutils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", - "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "dependencies": { - "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - } - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.730", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.730.tgz", - "integrity": "sha512-1Tr3h09wXhmqXnvDyrRe6MFgTeU0ZXy3+rMJWTrOHh/HNesWwBBrKnMxRJWZ86dzs8qQdw2c7ZE1/qeGHygImA==", - "dev": true - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0.tgz", - "integrity": "sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "is-callable": "^1.2.3", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.2", - "is-string": "^1.0.5", - "object-inspect": "^1.9.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.0" - } - }, - "es-module-lexer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", - "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", - "dev": true - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", - "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash": "^4.17.21", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.4", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "eslint-plugin-vue": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.9.0.tgz", - "integrity": "sha512-2Q0qQp5+5h+pZvJKCbG1/jCRUYrdgAz5BYKGyTlp2NU8mx09u3Hp7PsH6d5qef6ojuPoCXMnrbbDxeoplihrSw==", - "dev": true, - "requires": { - "eslint-utils": "^2.1.0", - "natural-compare": "^1.4.0", - "semver": "^7.3.2", - "vue-eslint-parser": "^7.6.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", - "dev": true, - "requires": { - "type": "^2.0.0" - }, - "dependencies": { - "type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", - "dev": true - } - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "file-type": { - "version": "12.4.2", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", - "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", - "dev": true - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", - "dev": true - }, - "follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", - "dev": true - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fraction.js": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.0.tgz", - "integrity": "sha512-o9lSKpK0TDqDwTL24Hxqi6I99s942l6TYkfl6WvGWgLOIFz/YonSGKfiSeMadoiNvTfqnfOa9mjb5SGVbBK9/w==", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true - }, - "geojson-equality": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/geojson-equality/-/geojson-equality-0.1.6.tgz", - "integrity": "sha1-oXE3TvBD5dR5eZWEC65GSOB1LXI=", - "requires": { - "deep-equal": "^1.0.0" - } - }, - "geojson-rbush": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.1.2.tgz", - "integrity": "sha512-grkfdg3HIeTjwTfiJe5FT8+fGU3fABCc+vRJDBwdQz9kkLF0Sbif2gs2JUzjewwgmnvLGy9fInySDeADoNuk7w==", - "requires": { - "@turf/bbox": "*", - "@turf/helpers": "6.x", - "@turf/meta": "6.x", - "rbush": "^2.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "globals": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", - "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "requires": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "dependencies": { - "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", - "dev": true - } - } - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", - "dev": true - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, - "html-entities": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", - "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", - "dev": true - }, - "html-loader": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz", - "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==", - "dev": true, - "requires": { - "html-minifier-terser": "^5.1.1", - "htmlparser2": "^4.1.0", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, - "requires": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "dependencies": { - "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - } - } - }, - "htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } - } - }, - "http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-middleware": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", - "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", - "dev": true, - "requires": { - "@types/http-proxy": "^1.17.5", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "imagemin": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", - "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", - "dev": true, - "requires": { - "file-type": "^12.0.0", - "globby": "^10.0.0", - "graceful-fs": "^4.2.2", - "junk": "^3.1.0", - "make-dir": "^3.0.0", - "p-pipe": "^3.0.0", - "replace-ext": "^1.0.0" - } - }, - "img-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-3.0.2.tgz", - "integrity": "sha512-rSriLKgvi85Km7ppSF+AEAM3nU4fxpvCkaXtC/IoCEU7jfks55bEANFs0bB9YXYkxY9JurZQIZFtXh5Gue3upw==", - "dev": true, - "requires": { - "loader-utils": "^1.1.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } - } - }, - "import-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", - "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", - "dev": true, - "requires": { - "import-from": "^3.0.0" - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "internal-ip": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", - "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", - "dev": true, - "requires": { - "default-gateway": "^6.0.0", - "ipaddr.js": "^1.9.1", - "is-ip": "^3.1.0", - "p-event": "^4.2.0" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - } - } - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", - "dev": true - }, - "ipaddr.js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.0.tgz", - "integrity": "sha512-S54H9mIj0rbxRIyrDMEuuER86LdlgUg9FSeZ8duQb6CUG2iRrA36MYVQBSprTF/ZeAwvyQ5mDGuNvIPM0BIl3w==", - "dev": true - }, - "is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", - "requires": { - "call-bind": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", - "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", - "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", - "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", - "dev": true - }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-ip": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", - "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", - "dev": true, - "requires": { - "ip-regex": "^4.0.0" - } - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", - "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", - "dev": true - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", - "requires": { - "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - }, - "is-string": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", - "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", - "dev": true - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "junk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", - "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", - "dev": true - }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", - "dev": true - }, - "laravel-mix": { - "version": "6.0.19", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.19.tgz", - "integrity": "sha512-SH//4h/bi2ff5hyBfwQ0DE0VfTkskGLU+a/l7HdmTz1F+cJdvakajziyBVRwa9U3+DyvZo9eo9Jgq1jdZWW3XQ==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/plugin-proposal-object-rest-spread": "^7.12.1", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/runtime": "^7.12.1", - "@types/babel__core": "^7.1.12", - "@types/browser-sync": "^2.26.1", - "@types/clean-css": "^4.2.2", - "@types/cssnano": "^4.0.0", - "@types/imagemin-gifsicle": "^7.0.0", - "@types/imagemin-mozjpeg": "^8.0.0", - "@types/imagemin-optipng": "^5.2.0", - "@types/imagemin-svgo": "^8.0.0", - "autoprefixer": "^10.0.1", - "babel-loader": "^8.1.0", - "chalk": "^4.1.0", - "chokidar": "^3.4.3", - "clean-css": "^4.2.3 || ^5.1.1", - "cli-table3": "^0.6.0", - "collect.js": "^4.28.4", - "commander": "^7.1.0", - "concat": "^1.0.3", - "css-loader": "^5.0.0", - "cssnano": "^4.1.11", - "dotenv": "^8.2.0", - "dotenv-expand": "^5.1.0", - "file-loader": "^6.1.1", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "html-loader": "^1.3.2", - "imagemin": "^7.0.1", - "img-loader": "^3.0.2", - "lodash": "^4.17.20", - "md5": "^2.3.0", - "mini-css-extract-plugin": "^1.1.0", - "node-libs-browser": "^2.2.1", - "postcss-load-config": "^3.0.0", - "postcss-loader": "^5.2.0", - "semver": "^7.3.4", - "strip-ansi": "^6.0.0", - "style-loader": "^2.0.0", - "terser": "^5.3.7", - "terser-webpack-plugin": "^5.0.0", - "vue-style-loader": "^4.1.3", - "webpack": "^5.25.1", - "webpack-cli": "^4.1.0", - "webpack-dev-server": "4.0.0-beta.2", - "webpack-merge": "^5.2.0", - "webpack-notifier": "^1.8.0", - "webpackbar": "^5.0.0-3", - "yargs": "^16.1.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "laravel-mix-artisan-publish": { - "version": "git+ssh://git@github.com/mzur/laravel-mix-artisan-publish.git#feafb9ba2359d41fddb025bccb4380e9b044783f", - "dev": true, - "from": "laravel-mix-artisan-publish@git://github.com/mzur/laravel-mix-artisan-publish.git", - "requires": { - "node-cmd": "^3.0.0" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true - }, - "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "martinez-polygon-clipping": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.7.1.tgz", - "integrity": "sha512-Xt5hOjAVkRoGN7kUb/0VmkxcG07Ja+OA3qU+7YcY2pAlJ78V1G181VTozHCXpzlj0paNBbcLno77mcGeGStI0A==", - "requires": { - "robust-predicates": "^2.0.4", - "splaytree": "^0.1.4", - "tinyqueue": "^1.2.0" - } - }, - "md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "requires": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true - }, - "mem": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", - "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.1.0" - }, - "dependencies": { - "mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true - } - } - }, - "memfs": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz", - "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==", - "dev": true, - "requires": { - "fs-monkey": "1.0.3" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", - "dev": true - }, - "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "dev": true, - "requires": { - "mime-db": "1.47.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mini-css-extract-plugin": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", - "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - } - }, - "multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", - "dev": true, - "optional": true - }, - "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-cmd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/node-cmd/-/node-cmd-3.0.0.tgz", - "integrity": "sha1-OP/3CkqqT2WdID61eGJzcBjiT28=", - "dev": true - }, - "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node-notifier": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", - "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", - "dev": true, - "requires": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true - }, - "normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - }, - "dependencies": { - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - } - } - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", - "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.values": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.3.tgz", - "integrity": "sha512-nkF6PfDB9alkOUxpf1HNm/QlkeW3SReqL5WXeBLpEJJnlPSvRaDQpW3gQTksTN3fgJX4hL42RzKyOin6ff3tyw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2", - "has": "^1.0.3" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, - "requires": { - "p-timeout": "^3.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true - }, - "p-retry": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.5.0.tgz", - "integrity": "sha512-5Hwh4aVQSu6BEP+w2zKlVXtFAaYQe1qWuVADSgoeVlLjwe/Q/AMSoRR4MDeaAfu8llT+YNbEijWu/YF3m6avkg==", - "dev": true, - "requires": { - "@types/retry": "^0.12.0", - "retry": "^0.12.0" - } - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pbf": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz", - "integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==", - "requires": { - "ieee754": "^1.1.6", - "resolve-protobuf-schema": "^2.0.0" - } - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", - "dev": true - }, - "pixelworks": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pixelworks/-/pixelworks-1.1.0.tgz", - "integrity": "sha1-Hwla1I3Ki/ihyCWOAJIDGkTyLKU=" - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "polygon-clipping": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.3.tgz", - "integrity": "sha512-ho0Xx5DLkgxRx/+n4O74XyJ67DcyN3Tu9bGYKsnTukGAW6ssnuak6Mwcyb1wHy9MZc9xsUWqIoiazkZB5weECg==", - "requires": { - "splaytree": "^3.1.0" - }, - "dependencies": { - "splaytree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.0.tgz", - "integrity": "sha512-gvUGR7xnOy0fLKTCxDeUZYgU/I1Tdf8M/lM1Qrf8L2TIOR5ipZjGk02uYcdv0o2x7WjVRgpm3iS2clLyuVAt0Q==" - } - } - }, - "portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "8.2.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.15.tgz", - "integrity": "sha512-2zO3b26eJD/8rb106Qu2o7Qgg52ND5HPjcyQiK2B98O388h43A448LCslC0dI2P97wCAQRJsFvwTRcXxTKds+Q==", - "dev": true, - "requires": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", - "dev": true, - "requires": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-load-config": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.1.tgz", - "integrity": "sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "import-cwd": "^3.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - } - } - }, - "postcss-loader": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-5.3.0.tgz", - "integrity": "sha512-/+Z1RAmssdiSLgIZwnJHwBMnlABPgF7giYzTN2NOfr9D21IJZ4mQC1R2miwp80zno9M4zMD/umGI8cR+2EL5zw==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", - "semver": "^7.3.4" - }, - "dependencies": { - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "dev": true, - "requires": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "dev": true, - "requires": { - "postcss": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "dev": true, - "requires": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "dev": true, - "requires": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "dev": true, - "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "postcss-discard-comments": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", "dev": true, - "requires": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "requires": {} }, - "postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "postcss-discard-duplicates": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "requires": {} }, - "postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "dev": true, - "requires": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } + "postcss-discard-empty": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", + "dev": true, + "requires": {} }, - "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "postcss-discard-overridden": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", + "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", + "dev": true, + "requires": {} + }, + "postcss-load-config": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.1.tgz", + "integrity": "sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ==", "dev": true, "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "cosmiconfig": "^7.0.0", + "import-cwd": "^3.0.0" } }, - "postcss-svgo": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", - "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "postcss-loader": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.1.0.tgz", + "integrity": "sha512-yA/cXBfACkthZNA2hQxOnaReVfQ6uLmvbEDQzNafpbK40URZJvP/28dL1DG174Gvz3ptkkHbbwDBCh+gXR94CA==", "dev": true, "requires": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" + "cosmiconfig": "^7.0.0", + "klona": "^2.0.4", + "semver": "^7.3.5" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "requires": { - "color-name": "1.1.3" + "yallist": "^4.0.0" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "lru-cache": "^6.0.0" } }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, + "postcss-merge-longhand": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", + "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", + "dev": true, + "requires": { + "css-color-names": "^1.0.1", + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.1" + } + }, + "postcss-merge-rules": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", + "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^2.0.1", + "postcss-selector-parser": "^6.0.5", + "vendors": "^1.0.3" + } + }, + "postcss-minify-font-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", + "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-minify-gradients": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", + "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "is-color-stop": "^1.1.0", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-minify-params": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", + "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.0", + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0", + "uniqs": "^2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", + "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "dev": true, + "requires": {} + }, + "postcss-normalize-display-values": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", + "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-normalize-positions": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", + "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", + "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-normalize-string": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", + "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", + "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", + "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", + "dev": true, + "requires": { + "browserslist": "^4.16.0", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-normalize-url": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", + "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", + "dev": true, + "requires": { + "is-absolute-url": "^3.0.3", + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", + "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-ordered-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", + "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-reduce-initial": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", + "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", + "dev": true, + "requires": { + "browserslist": "^4.16.0", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", + "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", + "dev": true, + "requires": { + "cssnano-utils": "^2.0.1", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", + "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0", + "svgo": "^2.3.0" + } + }, "postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", + "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", "dev": true, "requires": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5", "uniqs": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "postcss-value-parser": { @@ -27052,12 +17636,12 @@ "integrity": "sha512-YVCvdhxWNDP8/nJDyXLuM+UFsuPk4+1PB7WGPVDzm3HTHbzFLxQYeW2iZpS4mmnXrQJGBzt230t/BbEb7PrQaw==" }, "proxy-addr": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", - "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "requires": { - "forwarded": "~0.1.2", + "forwarded": "0.2.0", "ipaddr.js": "1.9.1" }, "dependencies": { @@ -27103,12 +17687,6 @@ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true - }, "qs": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", @@ -27265,37 +17843,6 @@ "@babel/runtime": "^7.8.4" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "regex-parser": { "version": "2.2.11", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", @@ -27360,24 +17907,6 @@ "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", "dev": true }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, "replace-ext": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", @@ -27579,12 +18108,6 @@ } } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, "retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", @@ -27672,15 +18195,6 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -27748,12 +18262,6 @@ } } }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, "schema-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", @@ -27909,18 +18417,6 @@ "send": "0.17.1" } }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - } - }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -27979,23 +18475,6 @@ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", "dev": true }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "dev": true, - "requires": { - "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - } - } - }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", @@ -28013,110 +18492,6 @@ "is-fullwidth-code-point": "^3.0.0" } }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "sockjs": { "version": "0.3.21", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", @@ -28140,6 +18515,12 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true + }, "source-map-resolve": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", @@ -28222,36 +18603,6 @@ "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-0.1.4.tgz", "integrity": "sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ==" }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -28264,16 +18615,6 @@ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "dev": true }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - } - }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -28334,30 +18675,10 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" } }, "strip-ansi": { @@ -28392,105 +18713,13 @@ } }, "stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", + "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", "dev": true, "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "postcss": { - "version": "7.0.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", - "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", - "dev": true, - "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - } - }, - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "browserslist": "^4.16.0", + "postcss-selector-parser": "^6.0.4" } }, "supports-color": { @@ -28503,76 +18732,18 @@ } }, "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz", + "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==", "dev": true, "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "@trysound/sax": "0.1.1", + "chalk": "^4.1.0", + "commander": "^7.1.0", + "css-select": "^3.1.2", + "css-tree": "^1.1.2", + "csso": "^4.2.0", + "stable": "^0.1.8" } }, "table": { @@ -28641,12 +18812,12 @@ } }, "terser-webpack-plugin": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.2.tgz", - "integrity": "sha512-6QhDaAiVHIQr5Ab3XUWZyDmrIPCHMiqJVljMF91YKyqwKkL5QHnYMkrMBy96v9Z7ev1hGhSEw1HQZc2p/s5Z8Q==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", + "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", "dev": true, "requires": { - "jest-worker": "^26.6.2", + "jest-worker": "^27.0.2", "p-limit": "^3.1.0", "schema-utils": "^3.0.0", "serialize-javascript": "^5.0.1", @@ -28715,98 +18886,6 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -28865,18 +18944,6 @@ "mime-types": "~2.1.24" } }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -28905,24 +18972,6 @@ "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", "dev": true }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", - "dev": true - }, "uniqs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", @@ -28941,58 +18990,6 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -29034,12 +19031,6 @@ } } }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, "util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", @@ -29063,18 +19054,6 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -29234,9 +19213,9 @@ "dev": true }, "watchpack": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", - "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", + "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", @@ -29253,9 +19232,9 @@ } }, "webpack": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.37.0.tgz", - "integrity": "sha512-yvdhgcI6QkQkDe1hINBAJ1UNevqNGTVaCkD2SSJcB8rcrNNl922RI8i2DXUAuNfANoxwsiXXEA4ZPZI9q2oGLA==", + "version": "5.39.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.39.1.tgz", + "integrity": "sha512-ulOvoNCh2PvTUa+zbpRuEb1VPeQnhxpnHleMPVVCq3QqnaFogjsLyps+o42OviQFoaGtTQYrUqDXu1QNkvUPzw==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", @@ -29268,7 +19247,7 @@ "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.8.0", "es-module-lexer": "^0.4.0", - "eslint-scope": "^5.1.1", + "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.4", @@ -29279,8 +19258,8 @@ "schema-utils": "^3.0.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.0.0", - "webpack-sources": "^2.1.1" + "watchpack": "^2.2.0", + "webpack-sources": "^2.3.0" }, "dependencies": { "acorn": { @@ -29296,9 +19275,9 @@ "dev": true }, "webpack-sources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", + "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", "dev": true, "requires": { "source-list-map": "^2.0.1", @@ -29308,15 +19287,15 @@ } }, "webpack-cli": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.0.tgz", - "integrity": "sha512-7bKr9182/sGfjFm+xdZSwgQuFjgEcy0iCTIBxRUeteJ2Kr8/Wz0qNJX+jw60LU36jApt4nmMkep6+W5AKhok6g==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.2.tgz", + "integrity": "sha512-mEoLmnmOIZQNiRl0ebnjzQ74Hk0iKS5SiEEnpq3dRezoyR3yPaeQZCMCe+db4524pj1Pd5ghZXjT41KLzIhSLw==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.3", - "@webpack-cli/info": "^1.2.4", - "@webpack-cli/serve": "^1.4.0", + "@webpack-cli/configtest": "^1.0.4", + "@webpack-cli/info": "^1.3.0", + "@webpack-cli/serve": "^1.5.1", "colorette": "^1.2.1", "commander": "^7.0.0", "execa": "^5.0.0", @@ -29329,9 +19308,9 @@ } }, "webpack-dev-middleware": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.2.0.tgz", - "integrity": "sha512-HVVpHw+5H4lfGasUKjpIkOy9TB27OyKiL13c+dhzVG1w77OQ87b408fp0qKDKQQkNGgShbStDzVJ8sK46JajXg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz", + "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==", "dev": true, "requires": { "colorette": "^1.2.2", @@ -29343,9 +19322,9 @@ } }, "webpack-dev-server": { - "version": "4.0.0-beta.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.0.0-beta.2.tgz", - "integrity": "sha512-kbUAjQg1FLtCoIZ0NdcTZWRBVT1EDajBSvGAiAqQPJxBjsr0N3FQ57kJ/4SrIZPyAajn8kcHctwFsTKPwme1tQ==", + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.0.0-beta.3.tgz", + "integrity": "sha512-Ud7ieH15No/KiSdRuzk+2k+S4gSCR/N7m4hJhesDbKQEZy3P+NPXTXfsimNOZvbVX2TRuIEFB+VdLZFn8DwGwg==", "dev": true, "requires": { "ansi-html": "^0.0.7", @@ -29358,7 +19337,7 @@ "find-cache-dir": "^3.3.1", "graceful-fs": "^4.2.6", "html-entities": "^2.3.2", - "http-proxy-middleware": "^1.1.0", + "http-proxy-middleware": "^1.3.1", "internal-ip": "^6.2.0", "ipaddr.js": "^2.0.0", "is-absolute-url": "^3.0.3", @@ -29367,28 +19346,20 @@ "p-retry": "^4.5.0", "portfinder": "^1.0.28", "schema-utils": "^3.0.0", - "selfsigned": "^1.10.8", + "selfsigned": "^1.10.11", "serve-index": "^1.9.1", "sockjs": "^0.3.21", "spdy": "^4.0.2", "strip-ansi": "^6.0.0", "url": "^0.11.0", "webpack-dev-middleware": "^4.1.0", - "ws": "^7.4.4" - }, - "dependencies": { - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - } + "ws": "^7.4.5" } }, "webpack-merge": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", - "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, "requires": { "clone-deep": "^4.0.1", @@ -29465,19 +19436,6 @@ "isexe": "^2.0.0" } }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, "wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", @@ -29508,9 +19466,9 @@ "dev": true }, "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz", + "integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==", "dev": true, "requires": {} }, @@ -29539,9 +19497,9 @@ "dev": true }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz", + "integrity": "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==", "dev": true, "requires": { "cliui": "^7.0.2", @@ -29554,9 +19512,9 @@ } }, "yargs-parser": { - "version": "20.2.7", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", - "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true }, "yocto-queue": { From 7864dec5b66fc052b4c9b19f6dade9a53096ce1d Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 6 Sep 2021 10:07:25 +0200 Subject: [PATCH 277/407] Fix vulnerable NPM dependencies --- package-lock.json | 120 ++++++++++++++++++++++++---------------------- 1 file changed, 62 insertions(+), 58 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4eedc6106..72313d88b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3502,9 +3502,9 @@ "dev": true }, "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", + "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==", "dev": true }, "node_modules/colors": { @@ -3946,15 +3946,15 @@ "dev": true }, "node_modules/css-select": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", - "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "dev": true, "dependencies": { "boolbase": "^1.0.0", - "css-what": "^4.0.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.3", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", "nth-check": "^2.0.0" }, "funding": { @@ -3962,9 +3962,9 @@ } }, "node_modules/css-select/node_modules/domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -3999,9 +3999,9 @@ } }, "node_modules/css-what": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", - "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", "dev": true, "engines": { "node": ">= 6" @@ -9022,9 +9022,9 @@ "dev": true }, "node_modules/resolve-url-loader": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.3.tgz", - "integrity": "sha512-WbDSNFiKPPLem1ln+EVTE+bFUBdTTytfQZWbmghroaFNFaAVmGq0Saqw6F/306CwgPXsGwXVxbODE+3xAo/YbA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.4.tgz", + "integrity": "sha512-D3sQ04o0eeQEySLrcz4DsX3saHfsr8/N6tfhblxgZKXxMT2Louargg12oGNfoTRLV09GXhVUe5/qgA5vdgNigg==", "dev": true, "dependencies": { "adjust-sourcemap-loader": "3.0.0", @@ -9033,7 +9033,7 @@ "convert-source-map": "1.7.0", "es6-iterator": "2.0.3", "loader-utils": "1.2.3", - "postcss": "7.0.21", + "postcss": "7.0.36", "rework": "1.0.1", "rework-visit": "1.0.0", "source-map": "0.6.1" @@ -9149,9 +9149,9 @@ } }, "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "dependencies": { "chalk": "^2.4.2", @@ -9160,6 +9160,10 @@ }, "engines": { "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, "node_modules/resolve-url-loader/node_modules/source-map": { @@ -9973,16 +9977,16 @@ } }, "node_modules/svgo": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz", - "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.5.0.tgz", + "integrity": "sha512-FSdBOOo271VyF/qZnOn1PgwCdt1v4Dx0Sey+U1jgqm1vqRYjPGdip0RGrFW6ItwtkBB8rHgHk26dlVr0uCs82Q==", "dev": true, "dependencies": { "@trysound/sax": "0.1.1", - "chalk": "^4.1.0", - "commander": "^7.1.0", - "css-select": "^3.1.2", - "css-tree": "^1.1.2", + "colorette": "^1.3.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", "csso": "^4.2.0", "stable": "^0.1.8" }, @@ -13748,9 +13752,9 @@ "dev": true }, "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", + "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==", "dev": true }, "colors": { @@ -14123,22 +14127,22 @@ } }, "css-select": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", - "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^4.0.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.3", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", "nth-check": "^2.0.0" }, "dependencies": { "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -14165,9 +14169,9 @@ } }, "css-what": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", - "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", "dev": true }, "cssesc": { @@ -17979,9 +17983,9 @@ "dev": true }, "resolve-url-loader": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.3.tgz", - "integrity": "sha512-WbDSNFiKPPLem1ln+EVTE+bFUBdTTytfQZWbmghroaFNFaAVmGq0Saqw6F/306CwgPXsGwXVxbODE+3xAo/YbA==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.4.tgz", + "integrity": "sha512-D3sQ04o0eeQEySLrcz4DsX3saHfsr8/N6tfhblxgZKXxMT2Louargg12oGNfoTRLV09GXhVUe5/qgA5vdgNigg==", "dev": true, "requires": { "adjust-sourcemap-loader": "3.0.0", @@ -17990,7 +17994,7 @@ "convert-source-map": "1.7.0", "es6-iterator": "2.0.3", "loader-utils": "1.2.3", - "postcss": "7.0.21", + "postcss": "7.0.36", "rework": "1.0.1", "rework-visit": "1.0.0", "source-map": "0.6.1" @@ -18081,9 +18085,9 @@ } }, "postcss": { - "version": "7.0.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.21.tgz", - "integrity": "sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==", + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", "dev": true, "requires": { "chalk": "^2.4.2", @@ -18732,16 +18736,16 @@ } }, "svgo": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz", - "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.5.0.tgz", + "integrity": "sha512-FSdBOOo271VyF/qZnOn1PgwCdt1v4Dx0Sey+U1jgqm1vqRYjPGdip0RGrFW6ItwtkBB8rHgHk26dlVr0uCs82Q==", "dev": true, "requires": { "@trysound/sax": "0.1.1", - "chalk": "^4.1.0", - "commander": "^7.1.0", - "css-select": "^3.1.2", - "css-tree": "^1.1.2", + "colorette": "^1.3.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", "csso": "^4.2.0", "stable": "^0.1.8" } From f6a1b334f0e5e720363a67832c3a4725eb57df8d Mon Sep 17 00:00:00 2001 From: Rob Date: Mon, 4 Oct 2021 12:06:06 -0700 Subject: [PATCH 278/407] Resolution for issue #73.\n\nEnables return of report from report controllers; disables email notification from report-generating API calls. --- .../Api/Projects/ProjectReportController.php | 5 +++ .../Api/Volumes/VolumeReportController.php | 5 +++ src/Jobs/GenerateReportJob.php | 5 ++- src/Report.php | 1 + src/database/factories/ModelFactory.php | 1 + ...021_10_02_004819_add_notify_to_reports.php | 32 +++++++++++++++++++ 6 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 src/database/migrations/2021_10_02_004819_add_notify_to_reports.php diff --git a/src/Http/Controllers/Api/Projects/ProjectReportController.php b/src/Http/Controllers/Api/Projects/ProjectReportController.php index 055227a9a..44f36cb47 100644 --- a/src/Http/Controllers/Api/Projects/ProjectReportController.php +++ b/src/Http/Controllers/Api/Projects/ProjectReportController.php @@ -31,17 +31,22 @@ class ProjectReportController extends Controller * * @param StoreProjectReport $request * @param int $id Project ID + * + * @return mixed */ public function store(StoreProjectReport $request, $id) { $report = new Report; $report->source()->associate($request->project); $report->type_id = $request->input('type_id'); + $report->notify_when_ready = $request->getUser() == null; $report->user()->associate($request->user()); $report->options = $request->getOptions($request); $report->save(); $queue = config('reports.generate_report_queue'); GenerateReportJob::dispatch($report)->onQueue($queue); + + return $report; } } diff --git a/src/Http/Controllers/Api/Volumes/VolumeReportController.php b/src/Http/Controllers/Api/Volumes/VolumeReportController.php index 334cf3c5c..0de77be6f 100644 --- a/src/Http/Controllers/Api/Volumes/VolumeReportController.php +++ b/src/Http/Controllers/Api/Volumes/VolumeReportController.php @@ -33,17 +33,22 @@ class VolumeReportController extends Controller * * @param StoreVolumeReport $request * @param int $id Volume ID + * + * @return mixed */ public function store(StoreVolumeReport $request, $id) { $report = new Report; $report->source()->associate($request->volume); $report->type_id = $request->input('type_id'); + $report->notify_when_ready = $request->getUser() == null; $report->user()->associate($request->user()); $report->options = $request->getOptions(); $report->save(); $queue = config('reports.generate_report_queue'); GenerateReportJob::dispatch($report)->onQueue($queue); + + return $report; } } diff --git a/src/Jobs/GenerateReportJob.php b/src/Jobs/GenerateReportJob.php index a9de37286..ed7b37e1c 100644 --- a/src/Jobs/GenerateReportJob.php +++ b/src/Jobs/GenerateReportJob.php @@ -40,6 +40,9 @@ public function handle() $this->report->generate(); $this->report->ready_at = new Carbon; $this->report->save(); - $this->report->user->notify(new ReportReady($this->report)); + + if ($this->report->notify_when_ready) { + $this->report->user->notify(new ReportReady($this->report)); + } } } diff --git a/src/Report.php b/src/Report.php index bff21e3c1..354be521c 100644 --- a/src/Report.php +++ b/src/Report.php @@ -29,6 +29,7 @@ class Report extends Model 'source_id' => 'int', 'options' => 'array', 'ready_at' => 'datetime', + 'notify_when_ready' => 'boolean', ]; /** diff --git a/src/database/factories/ModelFactory.php b/src/database/factories/ModelFactory.php index 9f2fcf5fe..81b9d1271 100644 --- a/src/database/factories/ModelFactory.php +++ b/src/database/factories/ModelFactory.php @@ -18,5 +18,6 @@ return factory(Biigle\Volume::class)->create()->id; }, 'source_type' => Biigle\Volume::class, + 'notify_when_ready' => boolean, ]; }); diff --git a/src/database/migrations/2021_10_02_004819_add_notify_to_reports.php b/src/database/migrations/2021_10_02_004819_add_notify_to_reports.php new file mode 100644 index 000000000..191a73428 --- /dev/null +++ b/src/database/migrations/2021_10_02_004819_add_notify_to_reports.php @@ -0,0 +1,32 @@ +boolean('notify_when_ready')->default(true); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('reports', function (Blueprint $table) { + $table->dropColumn('notify_when_ready'); + }); + } +} From 39b18dcbd8bb04068b0a9c567ca540886a4f782e Mon Sep 17 00:00:00 2001 From: Rob Date: Mon, 4 Oct 2021 15:48:30 -0700 Subject: [PATCH 279/407] Resolution for issue #73. --- src/Jobs/GenerateReportJob.php | 2 +- src/Report.php | 3 ++- src/database/factories/ModelFactory.php | 1 - tests/Jobs/GenerateReportJobTest.php | 20 +++++++++++++++++++- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/Jobs/GenerateReportJob.php b/src/Jobs/GenerateReportJob.php index ed7b37e1c..2100797a7 100644 --- a/src/Jobs/GenerateReportJob.php +++ b/src/Jobs/GenerateReportJob.php @@ -40,7 +40,7 @@ public function handle() $this->report->generate(); $this->report->ready_at = new Carbon; $this->report->save(); - + if ($this->report->notify_when_ready) { $this->report->user->notify(new ReportReady($this->report)); } diff --git a/src/Report.php b/src/Report.php index 354be521c..f7ca24847 100644 --- a/src/Report.php +++ b/src/Report.php @@ -29,7 +29,7 @@ class Report extends Model 'source_id' => 'int', 'options' => 'array', 'ready_at' => 'datetime', - 'notify_when_ready' => 'boolean', + 'notify_when_ready' => 'bool', ]; /** @@ -164,4 +164,5 @@ public function deleteFile() { Storage::disk(config('reports.storage_disk'))->delete($this->id); } + } diff --git a/src/database/factories/ModelFactory.php b/src/database/factories/ModelFactory.php index 81b9d1271..9f2fcf5fe 100644 --- a/src/database/factories/ModelFactory.php +++ b/src/database/factories/ModelFactory.php @@ -18,6 +18,5 @@ return factory(Biigle\Volume::class)->create()->id; }, 'source_type' => Biigle\Volume::class, - 'notify_when_ready' => boolean, ]; }); diff --git a/tests/Jobs/GenerateReportJobTest.php b/tests/Jobs/GenerateReportJobTest.php index ac5ccf428..7a4d0db35 100644 --- a/tests/Jobs/GenerateReportJobTest.php +++ b/tests/Jobs/GenerateReportJobTest.php @@ -12,7 +12,7 @@ class GenerateReportJobTest extends TestCase { - public function testHandle() + public function testHandleNotify() { $report = Mockery::mock(Report::class); $report->shouldReceive('generate')->once(); @@ -22,6 +22,24 @@ public function testHandle() $report->shouldReceive('setAttribute') ->once() ->with('ready_at', Mockery::type(Carbon::class)); + $report->shouldReceive('notify_when_ready')->set('notify_when_ready', true); + $report->shouldReceive('getAttribute')->with('notify_when_ready')->andReturn(true); + $report->shouldReceive('save')->once(); + with(new GenerateReportJob($report))->handle(); + } + + public function testHandleNoNotify() + { + $report = Mockery::mock(Report::class); + $report->shouldReceive('generate')->once(); + $user = Mockery::mock(User::class); + $user->shouldNotReceive('notify'); // The user should not receive a notification if notify_when_ready is false. + $report->shouldReceive('getAttribute')->with('user')->andReturn($user); + $report->shouldReceive('setAttribute') + ->once() + ->with('ready_at', Mockery::type(Carbon::class)); + $report->shouldReceive('notify_when_ready')->set('notify_when_ready', false); + $report->shouldReceive('getAttribute')->with('notify_when_ready')->andReturn(false); $report->shouldReceive('save')->once(); with(new GenerateReportJob($report))->handle(); } From 5804a5ca02c02f12cc468f59ce9a9beb055ecc1c Mon Sep 17 00:00:00 2001 From: Rob Date: Tue, 5 Oct 2021 09:33:35 -0700 Subject: [PATCH 280/407] Revert "Resolution for issue #73." This reverts commit 39b18dcbd8bb04068b0a9c567ca540886a4f782e. --- src/Jobs/GenerateReportJob.php | 2 +- src/Report.php | 3 +-- src/database/factories/ModelFactory.php | 1 + tests/Jobs/GenerateReportJobTest.php | 20 +------------------- 4 files changed, 4 insertions(+), 22 deletions(-) diff --git a/src/Jobs/GenerateReportJob.php b/src/Jobs/GenerateReportJob.php index 2100797a7..ed7b37e1c 100644 --- a/src/Jobs/GenerateReportJob.php +++ b/src/Jobs/GenerateReportJob.php @@ -40,7 +40,7 @@ public function handle() $this->report->generate(); $this->report->ready_at = new Carbon; $this->report->save(); - + if ($this->report->notify_when_ready) { $this->report->user->notify(new ReportReady($this->report)); } diff --git a/src/Report.php b/src/Report.php index f7ca24847..354be521c 100644 --- a/src/Report.php +++ b/src/Report.php @@ -29,7 +29,7 @@ class Report extends Model 'source_id' => 'int', 'options' => 'array', 'ready_at' => 'datetime', - 'notify_when_ready' => 'bool', + 'notify_when_ready' => 'boolean', ]; /** @@ -164,5 +164,4 @@ public function deleteFile() { Storage::disk(config('reports.storage_disk'))->delete($this->id); } - } diff --git a/src/database/factories/ModelFactory.php b/src/database/factories/ModelFactory.php index 9f2fcf5fe..81b9d1271 100644 --- a/src/database/factories/ModelFactory.php +++ b/src/database/factories/ModelFactory.php @@ -18,5 +18,6 @@ return factory(Biigle\Volume::class)->create()->id; }, 'source_type' => Biigle\Volume::class, + 'notify_when_ready' => boolean, ]; }); diff --git a/tests/Jobs/GenerateReportJobTest.php b/tests/Jobs/GenerateReportJobTest.php index 7a4d0db35..ac5ccf428 100644 --- a/tests/Jobs/GenerateReportJobTest.php +++ b/tests/Jobs/GenerateReportJobTest.php @@ -12,7 +12,7 @@ class GenerateReportJobTest extends TestCase { - public function testHandleNotify() + public function testHandle() { $report = Mockery::mock(Report::class); $report->shouldReceive('generate')->once(); @@ -22,24 +22,6 @@ public function testHandleNotify() $report->shouldReceive('setAttribute') ->once() ->with('ready_at', Mockery::type(Carbon::class)); - $report->shouldReceive('notify_when_ready')->set('notify_when_ready', true); - $report->shouldReceive('getAttribute')->with('notify_when_ready')->andReturn(true); - $report->shouldReceive('save')->once(); - with(new GenerateReportJob($report))->handle(); - } - - public function testHandleNoNotify() - { - $report = Mockery::mock(Report::class); - $report->shouldReceive('generate')->once(); - $user = Mockery::mock(User::class); - $user->shouldNotReceive('notify'); // The user should not receive a notification if notify_when_ready is false. - $report->shouldReceive('getAttribute')->with('user')->andReturn($user); - $report->shouldReceive('setAttribute') - ->once() - ->with('ready_at', Mockery::type(Carbon::class)); - $report->shouldReceive('notify_when_ready')->set('notify_when_ready', false); - $report->shouldReceive('getAttribute')->with('notify_when_ready')->andReturn(false); $report->shouldReceive('save')->once(); with(new GenerateReportJob($report))->handle(); } From 9dafeef9eb29a258db266a67bf3bf19196dfc858 Mon Sep 17 00:00:00 2001 From: Rob Date: Tue, 5 Oct 2021 16:40:07 -0700 Subject: [PATCH 281/407] Implementing pull request suggestions. --- .../Api/Projects/ProjectReportController.php | 8 +++-- .../Api/Volumes/VolumeReportController.php | 8 +++-- src/Http/Requests/StoreReport.php | 19 ++++++++++- src/Jobs/GenerateReportJob.php | 6 ++-- ...021_10_02_004819_add_notify_to_reports.php | 32 ------------------- .../Projects/ProjectReportControllerTest.php | 18 +++++------ .../Volumes/VolumeReportControllerTest.php | 22 ++++++------- tests/Jobs/GenerateReportJobTest.php | 16 +++++++++- 8 files changed, 67 insertions(+), 62 deletions(-) delete mode 100644 src/database/migrations/2021_10_02_004819_add_notify_to_reports.php diff --git a/src/Http/Controllers/Api/Projects/ProjectReportController.php b/src/Http/Controllers/Api/Projects/ProjectReportController.php index 44f36cb47..7c51626c9 100644 --- a/src/Http/Controllers/Api/Projects/ProjectReportController.php +++ b/src/Http/Controllers/Api/Projects/ProjectReportController.php @@ -26,7 +26,8 @@ class ProjectReportController extends Controller * @apiParam (Optional arguments) {Boolean} separate_users If `true`, separate annotations with labels of different users to different files or sheets of the spreadsheet. Cannot be used together with `separate_label_trees`. * @apiParam (Optional arguments) {Number[]} only_labels Array of label IDs to restrict the report to. Omit or leave empty to take all labels. * @apiParam (Optional arguments) {Boolean} aggregate_child_labels If `true`, add the abundance of child labels to the abundance of their parent labels and omit the child labels. This is only valid for the abundance report. Labels that are excluded with `only_labels` are not counted. - * + * @apiParam (Optional arguments) {Boolean} disable_notifications If `true`, suppress notification to the user on report completion. + * * @apiPermission projectMember * * @param StoreProjectReport $request @@ -39,7 +40,6 @@ public function store(StoreProjectReport $request, $id) $report = new Report; $report->source()->associate($request->project); $report->type_id = $request->input('type_id'); - $report->notify_when_ready = $request->getUser() == null; $report->user()->associate($request->user()); $report->options = $request->getOptions($request); $report->save(); @@ -47,6 +47,8 @@ public function store(StoreProjectReport $request, $id) $queue = config('reports.generate_report_queue'); GenerateReportJob::dispatch($report)->onQueue($queue); - return $report; + if ($this->isAutomatedRequest()) { + return $report; + } } } diff --git a/src/Http/Controllers/Api/Volumes/VolumeReportController.php b/src/Http/Controllers/Api/Volumes/VolumeReportController.php index 0de77be6f..3cb587c70 100644 --- a/src/Http/Controllers/Api/Volumes/VolumeReportController.php +++ b/src/Http/Controllers/Api/Volumes/VolumeReportController.php @@ -28,7 +28,8 @@ class VolumeReportController extends Controller * @apiParam (Optional arguments) {Number} annotation_session_id ID of an annotation session of the volume. If given, only annotations belonging to the annotation session are included in the report. * @apiParam (Optional arguments) {Number[]} only_labels Array of label IDs to restrict the report to. Omit or leave empty to take all labels. * @apiParam (Optional arguments) {Boolean} aggregate_child_labels If `true`, add the abundance of child labels to the abundance of their parent labels and omit the child labels. This is only valid for the abundance report. Labels that are excluded with `only_labels` are not counted. - * + * @apiParam (Optional arguments) {Boolean} disable_notifications If `true`, suppress notification to the user on report completion. + * * @apiPermission projectMember * * @param StoreVolumeReport $request @@ -41,7 +42,6 @@ public function store(StoreVolumeReport $request, $id) $report = new Report; $report->source()->associate($request->volume); $report->type_id = $request->input('type_id'); - $report->notify_when_ready = $request->getUser() == null; $report->user()->associate($request->user()); $report->options = $request->getOptions(); $report->save(); @@ -49,6 +49,8 @@ public function store(StoreVolumeReport $request, $id) $queue = config('reports.generate_report_queue'); GenerateReportJob::dispatch($report)->onQueue($queue); - return $report; + if ($this->isAutomatedRequest()) { + return $report; + } } } diff --git a/src/Http/Requests/StoreReport.php b/src/Http/Requests/StoreReport.php index a60e0f583..3bccad6c8 100644 --- a/src/Http/Requests/StoreReport.php +++ b/src/Http/Requests/StoreReport.php @@ -25,6 +25,7 @@ public function rules() 'only_labels' => 'nullable|array', 'only_labels.*' => 'exists:labels,id', 'aggregate_child_labels' => "nullable|boolean", + 'disable_notifications' => "nullable|boolean", ]; } @@ -76,6 +77,10 @@ public function getOptions() $options['aggregateChildLabels'] = boolval($this->input('aggregate_child_labels', false)); } + if ($this->isAllowedForDisableNotifications()) { + $options['disableNotifications'] = boolval($this->input('disable_notifications', false)); + } + return $options; } @@ -125,4 +130,16 @@ protected function isAllowedForAggregateChildLabels() ReportType::imageAnnotationsAbundanceId(), ]); } -} + + /** + * Check if disable_notifications may be configured for the requested report type. + * + * @return boolean + */ + protected function isAllowedForDisableNotifications() + { + return true; + } + + +} \ No newline at end of file diff --git a/src/Jobs/GenerateReportJob.php b/src/Jobs/GenerateReportJob.php index ed7b37e1c..880896385 100644 --- a/src/Jobs/GenerateReportJob.php +++ b/src/Jobs/GenerateReportJob.php @@ -40,8 +40,10 @@ public function handle() $this->report->generate(); $this->report->ready_at = new Carbon; $this->report->save(); - - if ($this->report->notify_when_ready) { + + $disableNotifications = $this->report->options['disableNotifications'] ?? false; + + if (!$disableNotifications) { $this->report->user->notify(new ReportReady($this->report)); } } diff --git a/src/database/migrations/2021_10_02_004819_add_notify_to_reports.php b/src/database/migrations/2021_10_02_004819_add_notify_to_reports.php deleted file mode 100644 index 191a73428..000000000 --- a/src/database/migrations/2021_10_02_004819_add_notify_to_reports.php +++ /dev/null @@ -1,32 +0,0 @@ -boolean('notify_when_ready')->default(true); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('reports', function (Blueprint $table) { - $table->dropColumn('notify_when_ready'); - }); - } -} diff --git a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php index ea0ba5b74..fbd6212ba 100644 --- a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php @@ -32,7 +32,7 @@ public function testStore() $response = $this->json('POST', "api/v1/projects/{$projectId}/reports", [ 'type_id' => $typeId, ]) - ->assertStatus(200); + ->assertStatus(201); $job = end($this->dispatchedJobs); $this->assertEquals('high', $job->queue); @@ -47,7 +47,7 @@ public function testStore() 'export_area' => true, 'newest_label' => true, ]) - ->assertStatus(200); + ->assertStatus(201); $job = end($this->dispatchedJobs); $this->assertEquals('high', $job->queue); @@ -70,7 +70,7 @@ public function testStoreVideoVolume() $this->json('POST', "api/v1/projects/{$projectId}/reports", [ 'type_id' => $typeId, ]) - ->assertStatus(200); + ->assertStatus(201); $job = end($this->dispatchedJobs); $report = $job->report; @@ -143,7 +143,7 @@ public function testStoreOnlyLabels() 'type_id' => $typeId, 'only_labels' => [$label->id], ]) - ->assertStatus(200); + ->assertStatus(201); } public function testStoreImageLabelImageLocationWithoutLatLng() @@ -166,7 +166,7 @@ public function testStoreImageLabelImageLocationWithoutLatLng() $this->postJson("api/v1/projects/{$projectId}/reports", [ 'type_id' => ReportType::imageLabelsImageLocationId(), ]) - ->assertStatus(200); + ->assertStatus(201); } public function testStoreImageAnnotationImageLocationWithoutLatLng() @@ -189,7 +189,7 @@ public function testStoreImageAnnotationImageLocationWithoutLatLng() $this->postJson("api/v1/projects/{$projectId}/reports", [ 'type_id' => ReportType::imageAnnotationsImageLocationId(), ]) - ->assertStatus(200); + ->assertStatus(201); } public function testStoreImageAnnotationAnnotationLocationWithoutLatLngYawDistance() @@ -227,7 +227,7 @@ public function testStoreImageAnnotationAnnotationLocationWithoutLatLngYawDistan $this->postJson("api/v1/projects/{$projectId}/reports", [ 'type_id' => ReportType::imageAnnotationsAnnotationLocationId(), ]) - ->assertStatus(200); + ->assertStatus(201); } public function testStoreSeparateLabelTreesUsersConflict() @@ -251,7 +251,7 @@ public function testStoreSeparateLabelTreesUsersConflict() 'type_id' => $typeId, 'separate_label_trees' => true, ]) - ->assertStatus(200); + ->assertStatus(201); $job = end($this->dispatchedJobs); $this->assertTrue($job->report->options['separateLabelTrees']); @@ -260,7 +260,7 @@ public function testStoreSeparateLabelTreesUsersConflict() 'type_id' => $typeId, 'separate_users' => true, ]) - ->assertStatus(200); + ->assertStatus(201); $job = end($this->dispatchedJobs); $this->assertTrue($job->report->options['separateUsers']); diff --git a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php index c70609671..bd63d108b 100644 --- a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php +++ b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php @@ -30,7 +30,7 @@ public function testStore() $response = $this->json('POST', "api/v1/volumes/{$volumeId}/reports", [ 'type_id' => $typeId, ]) - ->assertStatus(200); + ->assertStatus(201); $job = end($this->dispatchedJobs); $this->assertEquals('high', $job->queue); @@ -45,7 +45,7 @@ public function testStore() 'export_area' => true, 'newest_label' => true, ]) - ->assertStatus(200); + ->assertStatus(201); $job = end($this->dispatchedJobs); $this->assertEquals('high', $job->queue); @@ -79,7 +79,7 @@ public function testStoreImageVolumeTypes() $this->json('POST', "api/v1/volumes/{$volumeId}/reports", [ 'type_id' => $typeId, ]) - ->assertStatus(200); + ->assertStatus(201); } } @@ -128,7 +128,7 @@ public function testStoreVideoVolume() $this->json('POST', "api/v1/volumes/{$volumeId}/reports", [ 'type_id' => $typeId, ]) - ->assertStatus(200); + ->assertStatus(201); } @@ -146,7 +146,7 @@ public function testStoreVideoVolumeTypes() $this->json('POST', "api/v1/volumes/{$volumeId}/reports", [ 'type_id' => $typeId, ]) - ->assertStatus(200); + ->assertStatus(201); } } @@ -186,7 +186,7 @@ public function testStoreOnlyLabels() 'type_id' => $typeId, 'only_labels' => [$label->id], ]) - ->assertStatus(200); + ->assertStatus(201); } public function testStoreImageLabelImageLocationWithoutLatLng() @@ -209,7 +209,7 @@ public function testStoreImageLabelImageLocationWithoutLatLng() $this->postJson("api/v1/volumes/{$volumeId}/reports", [ 'type_id' => ReportType::imageLabelsImageLocationId(), ]) - ->assertStatus(200); + ->assertStatus(201); } public function testStoreImageAnnotationImageLocationWithoutLatLng() @@ -232,7 +232,7 @@ public function testStoreImageAnnotationImageLocationWithoutLatLng() $this->postJson("api/v1/volumes/{$volumeId}/reports", [ 'type_id' => ReportType::imageAnnotationsImageLocationId(), ]) - ->assertStatus(200); + ->assertStatus(201); } public function testStoreImageAnnotationAnnotationLocationWithoutLatLngYawDistance() @@ -270,7 +270,7 @@ public function testStoreImageAnnotationAnnotationLocationWithoutLatLngYawDistan $this->postJson("api/v1/volumes/{$volumeId}/reports", [ 'type_id' => ReportType::imageAnnotationsAnnotationLocationId(), ]) - ->assertStatus(200); + ->assertStatus(201); } public function testStoreSeparateLabelTreesUsersConflict() @@ -292,7 +292,7 @@ public function testStoreSeparateLabelTreesUsersConflict() 'type_id' => $typeId, 'separate_label_trees' => true, ]) - ->assertStatus(200); + ->assertStatus(201); $job = end($this->dispatchedJobs); $this->assertTrue($job->report->options['separateLabelTrees']); @@ -301,7 +301,7 @@ public function testStoreSeparateLabelTreesUsersConflict() 'type_id' => $typeId, 'separate_users' => true, ]) - ->assertStatus(200); + ->assertStatus(201); $job = end($this->dispatchedJobs); $this->assertTrue($job->report->options['separateUsers']); diff --git a/tests/Jobs/GenerateReportJobTest.php b/tests/Jobs/GenerateReportJobTest.php index ac5ccf428..2bd32b878 100644 --- a/tests/Jobs/GenerateReportJobTest.php +++ b/tests/Jobs/GenerateReportJobTest.php @@ -12,7 +12,7 @@ class GenerateReportJobTest extends TestCase { - public function testHandle() + public function testHandleWithNotifications() { $report = Mockery::mock(Report::class); $report->shouldReceive('generate')->once(); @@ -25,4 +25,18 @@ public function testHandle() $report->shouldReceive('save')->once(); with(new GenerateReportJob($report))->handle(); } + + public function testHandleWithoutNotifications() + { + $report = Mockery::mock(Report::class); + $report->shouldReceive('generate')->once(); + $user = Mockery::mock(User::class); + $user->shouldNotReceive('notify'); + $report->shouldReceive('getAttribute')->with('user')->andReturn($user); + $report->shouldReceive('setAttribute') + ->once() + ->with('ready_at', Mockery::type(Carbon::class)); + $report->shouldReceive('save')->once(); + with(new GenerateReportJob($report))->handle(); + } } From 87fcc4e78f0a374646f75539e8147cc5d24f9eeb Mon Sep 17 00:00:00 2001 From: Rob Date: Wed, 6 Oct 2021 09:20:43 -0700 Subject: [PATCH 282/407] Removed unneeded element. --- src/database/factories/ModelFactory.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/database/factories/ModelFactory.php b/src/database/factories/ModelFactory.php index 81b9d1271..9f2fcf5fe 100644 --- a/src/database/factories/ModelFactory.php +++ b/src/database/factories/ModelFactory.php @@ -18,6 +18,5 @@ return factory(Biigle\Volume::class)->create()->id; }, 'source_type' => Biigle\Volume::class, - 'notify_when_ready' => boolean, ]; }); From 82935811c789a1e665cb70051f41c3a9758ea72a Mon Sep 17 00:00:00 2001 From: Rob Date: Thu, 7 Oct 2021 13:50:59 -0700 Subject: [PATCH 283/407] Fix disable notification test with true, false, none. --- tests/Jobs/GenerateReportJobTest.php | 56 +++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/tests/Jobs/GenerateReportJobTest.php b/tests/Jobs/GenerateReportJobTest.php index 2bd32b878..ecbefff2f 100644 --- a/tests/Jobs/GenerateReportJobTest.php +++ b/tests/Jobs/GenerateReportJobTest.php @@ -12,8 +12,11 @@ class GenerateReportJobTest extends TestCase { - public function testHandleWithNotifications() + + public function testHandleWithoutNotifications() { + $opts = []; + $report = Mockery::mock(Report::class); $report->shouldReceive('generate')->once(); $user = Mockery::mock(User::class); @@ -22,12 +25,24 @@ public function testHandleWithNotifications() $report->shouldReceive('setAttribute') ->once() ->with('ready_at', Mockery::type(Carbon::class)); + $report->shouldReceive('offsetExists') + ->with('options') + ->andReturn(true); + $report->shouldReceive('setAttribute') + ->with('options', $opts); + $report->shouldReceive('getAttribute') + ->with('options') + ->andReturn($opts); $report->shouldReceive('save')->once(); + + $report->options = $opts; with(new GenerateReportJob($report))->handle(); } - public function testHandleWithoutNotifications() + public function testHandleWithNotificationsTrue() { + $opts = ['disableNotifications' => true]; + $report = Mockery::mock(Report::class); $report->shouldReceive('generate')->once(); $user = Mockery::mock(User::class); @@ -36,7 +51,44 @@ public function testHandleWithoutNotifications() $report->shouldReceive('setAttribute') ->once() ->with('ready_at', Mockery::type(Carbon::class)); + $report->shouldReceive('offsetExists') + ->with('options') + ->andReturn(true); + $report->shouldReceive('setAttribute') + ->with('options', $opts); + $report->shouldReceive('getAttribute') + ->with('options') + ->andReturn($opts); + $report->shouldReceive('save')->once(); + + $report->options = $opts; + with(new GenerateReportJob($report))->handle(); + } + + public function testHandleWithNotificationsFalse() + { + $opts = ['disableNotifications' => false]; + + $report = Mockery::mock(Report::class); + $report->shouldReceive('generate')->once(); + $user = Mockery::mock(User::class); + $user->shouldReceive('notify')->once(); + $report->shouldReceive('getAttribute')->with('user')->andReturn($user); + $report->shouldReceive('setAttribute') + ->once() + ->with('ready_at', Mockery::type(Carbon::class)); + $report->shouldReceive('offsetExists') + ->with('options') + ->andReturn(true); + $report->shouldReceive('setAttribute') + ->with('options', $opts); + $report->shouldReceive('getAttribute') + ->with('options') + ->andReturn($opts); $report->shouldReceive('save')->once(); + + $report->options = $opts; with(new GenerateReportJob($report))->handle(); } + } From f6564b7c5023b2e5d67a248978b8551006c9557b Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 12 Oct 2021 10:49:20 +0200 Subject: [PATCH 284/407] Update vulnerable npm dependencies --- package-lock.json | 490 ++++++++++++++++++++++------------------------ 1 file changed, 234 insertions(+), 256 deletions(-) diff --git a/package-lock.json b/package-lock.json index 72313d88b..015afd4cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2117,9 +2117,9 @@ } }, "node_modules/@types/http-proxy": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.6.tgz", - "integrity": "sha512-+qsjqR75S/ib0ig0R9WN+CDoZeOBU6F2XLewgC4KVgdXiNHiKKHFEMRHOrs5PbYE97D5vataw5wPj4KLYfUkuQ==", + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz", + "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==", "dev": true, "dependencies": { "@types/node": "*" @@ -2172,9 +2172,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "node_modules/@types/minimatch": { @@ -2196,9 +2196,9 @@ "dev": true }, "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", "dev": true }, "node_modules/@types/svgo": { @@ -2648,10 +2648,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true, "engines": [ "node >= 0.8.0" @@ -2661,9 +2661,9 @@ } }, "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" @@ -4195,6 +4195,15 @@ "node": ">= 10" } }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -5393,9 +5402,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", + "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", "dev": true, "funding": [ { @@ -5963,9 +5972,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", - "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", + "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", "dev": true, "dependencies": { "@types/http-proxy": "^1.17.5", @@ -5975,7 +5984,7 @@ "micromatch": "^4.0.2" }, "engines": { - "node": ">=8.0.0" + "node": ">=12.0.0" } }, "node_modules/https-browserify": { @@ -6647,12 +6656,6 @@ "node": ">=8" } }, - "node_modules/killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -6672,9 +6675,9 @@ } }, "node_modules/laravel-mix": { - "version": "6.0.24", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.24.tgz", - "integrity": "sha512-64KE/HKm3jiAHzOz6k+niODh4kL6mgzAeKLzEiMLG1odq5vqCnPXsmXfUYm6XaAHDS+2gLN1JlxsdVqtT7GB/w==", + "version": "6.0.34", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.34.tgz", + "integrity": "sha512-Je9ksXGCk9ytD+OMsgir043sERPlROMv1Lw5DOvRg2599lT9jWMHQn9x7Hn83HfmFw54mc6tmPLNhSU/SdI7jw==", "dev": true, "dependencies": { "@babel/core": "^7.14.5", @@ -6695,7 +6698,7 @@ "chokidar": "^3.5.1", "clean-css": "^4.2.3 || ^5.1.2", "cli-table3": "^0.6.0", - "collect.js": "^4.28.6", + "collect.js": "^4.28.5", "commander": "^7.2.0", "concat": "^1.0.3", "css-loader": "^5.2.6", @@ -6722,7 +6725,7 @@ "vue-style-loader": "^4.1.3", "webpack": "^5.38.1", "webpack-cli": "^4.7.2", - "webpack-dev-server": "4.0.0-beta.3", + "webpack-dev-server": "4.1.1", "webpack-merge": "^5.8.0", "webpack-notifier": "^1.13.0", "webpackbar": "^5.0.0-3", @@ -6920,18 +6923,6 @@ "semver": "bin/semver.js" } }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/martinez-polygon-clipping": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.7.1.tgz", @@ -6979,35 +6970,10 @@ "node": ">= 0.6" } }, - "node_modules/mem": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", - "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", - "dev": true, - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/mem?sponsor=1" - } - }, - "node_modules/mem/node_modules/mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/memfs": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz", - "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.3.0.tgz", + "integrity": "sha512-BEE62uMfKOavX3iG7GYX43QJ+hAeeWnwIAuJ/R6q96jaMtiLzhsxHJC8B1L7fK7Pt/vXDRwb3SG/yBpNGDPqzg==", "dev": true, "dependencies": { "fs-monkey": "1.0.3" @@ -7109,21 +7075,21 @@ } }, "node_modules/mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", "dev": true, "dependencies": { - "mime-db": "1.47.0" + "mime-db": "1.50.0" }, "engines": { "node": ">= 0.6" @@ -7456,9 +7422,9 @@ } }, "node_modules/nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, "dependencies": { "boolbase": "^1.0.0" @@ -7569,16 +7535,17 @@ } }, "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.3.0.tgz", + "integrity": "sha512-7INcPWb1UcOwSQxAXTnBJ+FxVV4MPs/X++FWWBtgY69/J5lc+tCteMt/oFK1MnkyHC4VILLa9ntmwKTwDR4Q9w==", "dev": true, "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -7607,15 +7574,6 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/p-event": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", @@ -7695,13 +7653,13 @@ } }, "node_modules/p-retry": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.5.0.tgz", - "integrity": "sha512-5Hwh4aVQSu6BEP+w2zKlVXtFAaYQe1qWuVADSgoeVlLjwe/Q/AMSoRR4MDeaAfu8llT+YNbEijWu/YF3m6avkg==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", "dev": true, "dependencies": { "@types/retry": "^0.12.0", - "retry": "^0.12.0" + "retry": "^0.13.1" }, "engines": { "node": ">=8" @@ -9188,9 +9146,9 @@ } }, "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, "engines": { "node": ">= 4" @@ -9411,12 +9369,12 @@ } }, "node_modules/schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, @@ -10695,20 +10653,19 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz", - "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.1.tgz", + "integrity": "sha512-Kx1X+36Rn9JaZcQMrJ7qN3PMAuKmEDD9ZISjUj3Cgq4A6PtwYsC4mpaKotSRYH3iOF6HsUa8viHKS59FlyVifQ==", "dev": true, "dependencies": { - "colorette": "^1.2.2", - "mem": "^8.1.1", + "colorette": "^2.0.10", "memfs": "^3.2.2", - "mime-types": "^2.1.30", + "mime-types": "^2.1.31", "range-parser": "^1.2.1", - "schema-utils": "^3.0.0" + "schema-utils": "^3.1.0" }, "engines": { - "node": ">= v10.23.3" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", @@ -10718,39 +10675,43 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/webpack-dev-middleware/node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, "node_modules/webpack-dev-server": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.0.0-beta.3.tgz", - "integrity": "sha512-Ud7ieH15No/KiSdRuzk+2k+S4gSCR/N7m4hJhesDbKQEZy3P+NPXTXfsimNOZvbVX2TRuIEFB+VdLZFn8DwGwg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.1.1.tgz", + "integrity": "sha512-Kl1mnCEw8Cy1Kw173gCxLIB242LfPKEOj9WoKhKz/MbryZTNrILzOJTk8kiczw/YUEPzn3gcltCQv6hDsLudRg==", "dev": true, "dependencies": { - "ansi-html": "^0.0.7", + "ansi-html-community": "^0.0.8", "bonjour": "^3.5.0", "chokidar": "^3.5.1", + "colorette": "^1.2.2", "compression": "^1.7.4", "connect-history-api-fallback": "^1.6.0", "del": "^6.0.0", "express": "^4.17.1", - "find-cache-dir": "^3.3.1", "graceful-fs": "^4.2.6", "html-entities": "^2.3.2", - "http-proxy-middleware": "^1.3.1", + "http-proxy-middleware": "^2.0.0", "internal-ip": "^6.2.0", - "ipaddr.js": "^2.0.0", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "open": "^7.4.2", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", "p-retry": "^4.5.0", "portfinder": "^1.0.28", - "schema-utils": "^3.0.0", + "schema-utils": "^3.1.0", "selfsigned": "^1.10.11", "serve-index": "^1.9.1", "sockjs": "^0.3.21", "spdy": "^4.0.2", - "strip-ansi": "^6.0.0", + "strip-ansi": "^7.0.0", "url": "^0.11.0", - "webpack-dev-middleware": "^4.1.0", - "ws": "^7.4.5" + "webpack-dev-middleware": "^5.0.0", + "ws": "^8.1.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" @@ -10759,7 +10720,7 @@ "node": ">= 12.13.0" }, "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" + "webpack": "^4.37.0 || ^5.0.0" }, "peerDependenciesMeta": { "webpack-cli": { @@ -10767,6 +10728,33 @@ } } }, + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/webpack-merge": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", @@ -10939,12 +10927,12 @@ "dev": true }, "node_modules/ws": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz", - "integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "dev": true, "engines": { - "node": ">=8.3.0" + "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", @@ -12606,9 +12594,9 @@ } }, "@types/http-proxy": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.6.tgz", - "integrity": "sha512-+qsjqR75S/ib0ig0R9WN+CDoZeOBU6F2XLewgC4KVgdXiNHiKKHFEMRHOrs5PbYE97D5vataw5wPj4KLYfUkuQ==", + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz", + "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==", "dev": true, "requires": { "@types/node": "*" @@ -12661,9 +12649,9 @@ } }, "@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.9", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", + "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, "@types/minimatch": { @@ -12685,9 +12673,9 @@ "dev": true }, "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", + "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", "dev": true }, "@types/svgo": { @@ -13065,16 +13053,16 @@ } } }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true }, "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { @@ -14303,6 +14291,12 @@ "execa": "^5.0.0" } }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", @@ -15264,9 +15258,9 @@ "dev": true }, "follow-redirects": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", - "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", + "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", "dev": true }, "forwarded": { @@ -15699,9 +15693,9 @@ } }, "http-proxy-middleware": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", - "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", + "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", "dev": true, "requires": { "@types/http-proxy": "^1.17.5", @@ -16195,12 +16189,6 @@ "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", "dev": true }, - "killable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", - "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", - "dev": true - }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -16214,9 +16202,9 @@ "dev": true }, "laravel-mix": { - "version": "6.0.24", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.24.tgz", - "integrity": "sha512-64KE/HKm3jiAHzOz6k+niODh4kL6mgzAeKLzEiMLG1odq5vqCnPXsmXfUYm6XaAHDS+2gLN1JlxsdVqtT7GB/w==", + "version": "6.0.34", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.34.tgz", + "integrity": "sha512-Je9ksXGCk9ytD+OMsgir043sERPlROMv1Lw5DOvRg2599lT9jWMHQn9x7Hn83HfmFw54mc6tmPLNhSU/SdI7jw==", "dev": true, "requires": { "@babel/core": "^7.14.5", @@ -16237,7 +16225,7 @@ "chokidar": "^3.5.1", "clean-css": "^4.2.3 || ^5.1.2", "cli-table3": "^0.6.0", - "collect.js": "^4.28.6", + "collect.js": "^4.28.5", "commander": "^7.2.0", "concat": "^1.0.3", "css-loader": "^5.2.6", @@ -16264,7 +16252,7 @@ "vue-style-loader": "^4.1.3", "webpack": "^5.38.1", "webpack-cli": "^4.7.2", - "webpack-dev-server": "4.0.0-beta.3", + "webpack-dev-server": "4.1.1", "webpack-merge": "^5.8.0", "webpack-notifier": "^1.13.0", "webpackbar": "^5.0.0-3", @@ -16419,15 +16407,6 @@ } } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, "martinez-polygon-clipping": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.7.1.tgz", @@ -16472,28 +16451,10 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "mem": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", - "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.1.0" - }, - "dependencies": { - "mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", - "dev": true - } - } - }, "memfs": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.2.2.tgz", - "integrity": "sha512-RE0CwmIM3CEvpcdK3rZ19BC4E6hv9kADkMN5rPduRak58cNArWLi/9jFLsa4rhsjfVxMP3v0jO7FHXq7SvFY5Q==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.3.0.tgz", + "integrity": "sha512-BEE62uMfKOavX3iG7GYX43QJ+hAeeWnwIAuJ/R6q96jaMtiLzhsxHJC8B1L7fK7Pt/vXDRwb3SG/yBpNGDPqzg==", "dev": true, "requires": { "fs-monkey": "1.0.3" @@ -16575,18 +16536,18 @@ "dev": true }, "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", + "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", "dev": true }, "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "version": "2.1.33", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", + "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", "dev": true, "requires": { - "mime-db": "1.47.0" + "mime-db": "1.50.0" } }, "mimic-fn": { @@ -16850,9 +16811,9 @@ } }, "nth-check": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", - "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, "requires": { "boolbase": "^1.0.0" @@ -16930,13 +16891,14 @@ } }, "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.3.0.tgz", + "integrity": "sha512-7INcPWb1UcOwSQxAXTnBJ+FxVV4MPs/X++FWWBtgY69/J5lc+tCteMt/oFK1MnkyHC4VILLa9ntmwKTwDR4Q9w==", "dev": true, "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" } }, "optionator": { @@ -16959,12 +16921,6 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, "p-event": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", @@ -17014,13 +16970,13 @@ "dev": true }, "p-retry": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.5.0.tgz", - "integrity": "sha512-5Hwh4aVQSu6BEP+w2zKlVXtFAaYQe1qWuVADSgoeVlLjwe/Q/AMSoRR4MDeaAfu8llT+YNbEijWu/YF3m6avkg==", + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", "dev": true, "requires": { "@types/retry": "^0.12.0", - "retry": "^0.12.0" + "retry": "^0.13.1" } }, "p-timeout": { @@ -18113,9 +18069,9 @@ } }, "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true }, "reusify": { @@ -18267,12 +18223,12 @@ } }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } @@ -19312,52 +19268,74 @@ } }, "webpack-dev-middleware": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz", - "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.1.tgz", + "integrity": "sha512-Kx1X+36Rn9JaZcQMrJ7qN3PMAuKmEDD9ZISjUj3Cgq4A6PtwYsC4mpaKotSRYH3iOF6HsUa8viHKS59FlyVifQ==", "dev": true, "requires": { - "colorette": "^1.2.2", - "mem": "^8.1.1", + "colorette": "^2.0.10", "memfs": "^3.2.2", - "mime-types": "^2.1.30", + "mime-types": "^2.1.31", "range-parser": "^1.2.1", - "schema-utils": "^3.0.0" + "schema-utils": "^3.1.0" + }, + "dependencies": { + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + } } }, "webpack-dev-server": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.0.0-beta.3.tgz", - "integrity": "sha512-Ud7ieH15No/KiSdRuzk+2k+S4gSCR/N7m4hJhesDbKQEZy3P+NPXTXfsimNOZvbVX2TRuIEFB+VdLZFn8DwGwg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.1.1.tgz", + "integrity": "sha512-Kl1mnCEw8Cy1Kw173gCxLIB242LfPKEOj9WoKhKz/MbryZTNrILzOJTk8kiczw/YUEPzn3gcltCQv6hDsLudRg==", "dev": true, "requires": { - "ansi-html": "^0.0.7", + "ansi-html-community": "^0.0.8", "bonjour": "^3.5.0", "chokidar": "^3.5.1", + "colorette": "^1.2.2", "compression": "^1.7.4", "connect-history-api-fallback": "^1.6.0", "del": "^6.0.0", "express": "^4.17.1", - "find-cache-dir": "^3.3.1", "graceful-fs": "^4.2.6", "html-entities": "^2.3.2", - "http-proxy-middleware": "^1.3.1", + "http-proxy-middleware": "^2.0.0", "internal-ip": "^6.2.0", - "ipaddr.js": "^2.0.0", - "is-absolute-url": "^3.0.3", - "killable": "^1.0.1", - "open": "^7.4.2", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", "p-retry": "^4.5.0", "portfinder": "^1.0.28", - "schema-utils": "^3.0.0", + "schema-utils": "^3.1.0", "selfsigned": "^1.10.11", "serve-index": "^1.9.1", "sockjs": "^0.3.21", "spdy": "^4.0.2", - "strip-ansi": "^6.0.0", + "strip-ansi": "^7.0.0", "url": "^0.11.0", - "webpack-dev-middleware": "^4.1.0", - "ws": "^7.4.5" + "webpack-dev-middleware": "^5.0.0", + "ws": "^8.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + } } }, "webpack-merge": { @@ -19470,9 +19448,9 @@ "dev": true }, "ws": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.0.tgz", - "integrity": "sha512-6ezXvzOZupqKj4jUqbQ9tXuJNo+BR2gU8fFRk3XCP3e0G6WT414u5ELe6Y0vtp7kmSJ3F7YWObSNr1ESsgi4vw==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", + "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", "dev": true, "requires": {} }, From 3479ad8358a97bfb4c37be224f4093059b2ccb4f Mon Sep 17 00:00:00 2001 From: Rob Date: Mon, 18 Oct 2021 13:24:42 -0700 Subject: [PATCH 285/407] Implement pull request suggestions. --- src/Http/Requests/StoreReport.php | 13 +------------ src/Report.php | 1 - .../Api/Projects/ProjectReportControllerTest.php | 2 ++ .../Api/Volumes/VolumeReportControllerTest.php | 2 ++ 4 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/Http/Requests/StoreReport.php b/src/Http/Requests/StoreReport.php index 3bccad6c8..1494c7f01 100644 --- a/src/Http/Requests/StoreReport.php +++ b/src/Http/Requests/StoreReport.php @@ -77,7 +77,7 @@ public function getOptions() $options['aggregateChildLabels'] = boolval($this->input('aggregate_child_labels', false)); } - if ($this->isAllowedForDisableNotifications()) { + if ($this->has('disable_notifications')) { $options['disableNotifications'] = boolval($this->input('disable_notifications', false)); } @@ -131,15 +131,4 @@ protected function isAllowedForAggregateChildLabels() ]); } - /** - * Check if disable_notifications may be configured for the requested report type. - * - * @return boolean - */ - protected function isAllowedForDisableNotifications() - { - return true; - } - - } \ No newline at end of file diff --git a/src/Report.php b/src/Report.php index 354be521c..bff21e3c1 100644 --- a/src/Report.php +++ b/src/Report.php @@ -29,7 +29,6 @@ class Report extends Model 'source_id' => 'int', 'options' => 'array', 'ready_at' => 'datetime', - 'notify_when_ready' => 'boolean', ]; /** diff --git a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php index fbd6212ba..57fd407d4 100644 --- a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php @@ -41,6 +41,7 @@ public function testStore() $this->assertEquals($projectId, $report->source_id); $this->assertEquals(false, $report->options['exportArea']); $this->assertEquals(false, $report->options['newestLabel']); + $response->assertJson(['id' => $report->id]); $response = $this->json('POST', "api/v1/projects/{$projectId}/reports", [ 'type_id' => $typeId, @@ -56,6 +57,7 @@ public function testStore() $this->assertEquals($projectId, $report->source_id); $this->assertEquals(true, $report->options['exportArea']); $this->assertEquals(true, $report->options['newestLabel']); + $response->assertJson(['id' => $report->id]); } public function testStoreVideoVolume() diff --git a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php index bd63d108b..d58fff0ec 100644 --- a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php +++ b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php @@ -39,6 +39,7 @@ public function testStore() $this->assertEquals($volumeId, $report->source_id); $this->assertEquals(false, $report->options['exportArea']); $this->assertEquals(false, $report->options['newestLabel']); + $response->assertJson(['id' => $report->id]); $response = $this->json('POST', "api/v1/volumes/{$volumeId}/reports", [ 'type_id' => $typeId, @@ -54,6 +55,7 @@ public function testStore() $this->assertEquals($volumeId, $report->source_id); $this->assertEquals(true, $report->options['exportArea']); $this->assertEquals(true, $report->options['newestLabel']); + $response->assertJson(['id' => $report->id]); } public function testStoreImageVolumeTypes() From 427b5df270d9e0fe7d76cd5d4aa31205ac57e2cb Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 3 Jan 2022 12:25:25 +0100 Subject: [PATCH 286/407] Make test action independent of PHP version in action runner --- .github/workflows/test.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bd46d0e33..4a442b5e8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -31,7 +31,11 @@ jobs: working-directory: ../core - name: Copy .env - run: php -r "file_exists('.env') || copy('.env.example', '.env');" + run: cp .env.example .env + working-directory: ../core + + - name: Set testing key + run: echo "APP_KEY=base64:STZFA4bQKDjE2mlpRPmsJ/okG0eCh4RHd9BghtZeYmQ=" >> .env working-directory: ../core - name: Install Dependencies @@ -53,10 +57,6 @@ jobs: sed -i "/Insert Biigle module service providers/i Biigle\\\\Modules\\\\Laserpoints\\\\LaserpointsServiceProvider::class," config/app.php working-directory: ../core - - name: Generate key - run: php artisan key:generate - working-directory: ../core - - name: Fetch base images run: | docker pull ghcr.io/biigle/app:latest From b0333f8ac53e7139a72848ef6bb4fe4e34fe5a95 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 3 Jan 2022 15:39:04 +0100 Subject: [PATCH 287/407] Fix errors raised by PHP 8 --- .../Volumes/ImageAnnotations/AbundanceReportGenerator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGenerator.php index b7b62f4fd..43df47510 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGenerator.php @@ -100,7 +100,7 @@ protected function query() * * @return CsvFile */ - protected function createCsv($rows, $title = '', $labels) + protected function createCsv($rows, $title, $labels) { $rows = $rows->groupBy('filename'); From e78a05b5940cc6244b47b56372a0f31c5bef6e7d Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 4 Jan 2022 12:45:46 +0100 Subject: [PATCH 288/407] Fix error when report file is closed/destroyed twice --- src/Support/File.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Support/File.php b/src/Support/File.php index c8fee919c..80010bf6f 100644 --- a/src/Support/File.php +++ b/src/Support/File.php @@ -67,7 +67,9 @@ public function delete() public function close() { try { - fclose($this->handle); + if (is_resource($this->handle)) { + fclose($this->handle); + } } catch (\Exception $e) { // } From 60dc43b06d12604f8a5bc9eb469becc2724f35dd Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 4 Jan 2022 12:54:59 +0100 Subject: [PATCH 289/407] Fix PHP 8 error with empty ZIP archive --- src/Support/Reports/MakesZipArchives.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Support/Reports/MakesZipArchives.php b/src/Support/Reports/MakesZipArchives.php index 3c833a3cd..76d76f358 100644 --- a/src/Support/Reports/MakesZipArchives.php +++ b/src/Support/Reports/MakesZipArchives.php @@ -22,7 +22,7 @@ trait MakesZipArchives protected function makeZip($files, $path) { $zip = App::make(ZipArchive::class); - $open = $zip->open($path, ZipArchive::CREATE); + $open = $zip->open($path, ZipArchive::OVERWRITE); if ($open !== true) { throw new Exception("Could not open ZIP file '{$path}'."); From 5da17f3480271cc7086e652683b1e400059069da Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 17 Jan 2022 09:40:00 +0100 Subject: [PATCH 290/407] Update vulnerable NPM dependencies --- package-lock.json | 225 +++++++++++----------------------------------- 1 file changed, 50 insertions(+), 175 deletions(-) diff --git a/package-lock.json b/package-lock.json index 015afd4cf..320d33ac8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2208,95 +2208,32 @@ "dev": true }, "node_modules/@vue/component-compiler-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz", - "integrity": "sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", "dev": true, "dependencies": { "consolidate": "^0.15.1", "hash-sum": "^1.0.2", "lru-cache": "^4.1.2", "merge-source-map": "^1.1.0", - "postcss": "^7.0.14", + "postcss": "^7.0.36", "postcss-selector-parser": "^6.0.2", "source-map": "~0.6.1", "vue-template-es2015-compiler": "^1.9.0" }, "optionalDependencies": { - "prettier": "^1.18.2" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/@vue/component-compiler-utils/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" + "prettier": "^1.18.2 || ^2.0.0" } }, "node_modules/@vue/component-compiler-utils/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { "node": ">=6.0.0" @@ -2315,18 +2252,6 @@ "node": ">=0.10.0" } }, - "node_modules/@vue/component-compiler-utils/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@webassemblyjs/ast": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", @@ -5402,9 +5327,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", - "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", "dev": true, "funding": [ { @@ -7846,6 +7771,12 @@ "node": ">=0.12" } }, + "node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/picomatch": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", @@ -9393,9 +9324,9 @@ "dev": true }, "node_modules/selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "version": "1.10.14", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", + "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", "dev": true, "dependencies": { "node-forge": "^0.10.0" @@ -10438,9 +10369,9 @@ "dev": true }, "node_modules/vue-loader": { - "version": "15.9.7", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.7.tgz", - "integrity": "sha512-qzlsbLV1HKEMf19IqCJqdNvFJRCI58WNbS6XbPqK13MrLz65es75w392MSQ5TsARAfIjUw+ATm3vlCXUJSOH9Q==", + "version": "15.9.8", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.8.tgz", + "integrity": "sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==", "dev": true, "dependencies": { "@vue/component-compiler-utils": "^3.1.0", @@ -12685,83 +12616,30 @@ "dev": true }, "@vue/component-compiler-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.2.0.tgz", - "integrity": "sha512-lejBLa7xAMsfiZfNp7Kv51zOzifnb29FwdnMLa96z26kXErPFioSf9BMcePVIQ6/Gc6/mC0UrPpxAWIHyae0vw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", "dev": true, "requires": { "consolidate": "^0.15.1", "hash-sum": "^1.0.2", "lru-cache": "^4.1.2", "merge-source-map": "^1.1.0", - "postcss": "^7.0.14", + "postcss": "^7.0.36", "postcss-selector-parser": "^6.0.2", - "prettier": "^1.18.2", + "prettier": "^1.18.2 || ^2.0.0", "source-map": "~0.6.1", "vue-template-es2015-compiler": "^1.9.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" } }, "source-map": { @@ -12769,15 +12647,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } } } }, @@ -15258,9 +15127,9 @@ "dev": true }, "follow-redirects": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", - "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", "dev": true }, "forwarded": { @@ -17124,6 +16993,12 @@ "sha.js": "^2.4.8" } }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "picomatch": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", @@ -18240,9 +18115,9 @@ "dev": true }, "selfsigned": { - "version": "1.10.11", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.11.tgz", - "integrity": "sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==", + "version": "1.10.14", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", + "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", "dev": true, "requires": { "node-forge": "^0.10.0" @@ -19090,9 +18965,9 @@ "dev": true }, "vue-loader": { - "version": "15.9.7", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.7.tgz", - "integrity": "sha512-qzlsbLV1HKEMf19IqCJqdNvFJRCI58WNbS6XbPqK13MrLz65es75w392MSQ5TsARAfIjUw+ATm3vlCXUJSOH9Q==", + "version": "15.9.8", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.8.tgz", + "integrity": "sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==", "dev": true, "requires": { "@vue/component-compiler-utils": "^3.1.0", From 9b3c6c2defabc9739228c712fed99eba17d54727 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 24 Jan 2022 09:08:55 +0100 Subject: [PATCH 291/407] Update vulnerable NPM dependencies --- package-lock.json | 6205 ++++++++++++++++++++++++--------------------- 1 file changed, 3283 insertions(+), 2922 deletions(-) diff --git a/package-lock.json b/package-lock.json index 320d33ac8..15aac67af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,29 +34,29 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.5.tgz", - "integrity": "sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", + "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", - "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helpers": "^7.14.6", - "@babel/parser": "^7.14.6", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5", + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", + "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.12", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.10", + "@babel/types": "^7.16.8", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -73,12 +73,12 @@ } }, "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "dependencies": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -94,12 +94,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.16.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -108,39 +108,39 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", - "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", "dev": true, "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", - "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", "semver": "^6.3.0" }, "engines": { @@ -160,17 +160,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz", + "integrity": "sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -180,12 +181,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz", + "integrity": "sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-annotate-as-pure": "^7.16.7", "regexpu-core": "^4.7.1" }, "engines": { @@ -196,9 +197,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", - "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.13.0", @@ -223,239 +224,252 @@ "semver": "bin/semver.js" } }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", - "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz", - "integrity": "sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", - "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-wrap-function": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", "dev": true, "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", - "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", - "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", + "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", "dev": true, "dependencies": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -526,9 +540,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.6.tgz", - "integrity": "sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ==", + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz", + "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -537,15 +551,30 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", + "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", + "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -555,13 +584,13 @@ } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.5.tgz", - "integrity": "sha512-tbD/CG3l43FIXxmu4a7RBe4zH7MLJ+S/lFowPFO7HetS2hyOZ/0nnnznegDuzFzfkyQYTxqdTH/hKmuBngaDAA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -572,13 +601,13 @@ } }, "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", - "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -588,13 +617,13 @@ } }, "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", - "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", + "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -605,12 +634,12 @@ } }, "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", - "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -621,12 +650,12 @@ } }, "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", - "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", + "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -637,12 +666,12 @@ } }, "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", - "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -653,12 +682,12 @@ } }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", - "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -669,12 +698,12 @@ } }, "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", - "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -685,12 +714,12 @@ } }, "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", - "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -701,16 +730,16 @@ } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.5.tgz", - "integrity": "sha512-VzMyY6PWNPPT3pxc5hi9LloKNr4SSrVCg7Yr6aZpW4Ym07r7KqSU/QXYwjXLVxqwSv0t/XSXkFoKBPUkZ8vb2A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", + "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.5" + "@babel/plugin-transform-parameters": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -720,12 +749,12 @@ } }, "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", - "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -736,13 +765,13 @@ } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -753,13 +782,13 @@ } }, "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", - "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -769,14 +798,14 @@ } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", + "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -787,13 +816,13 @@ } }, "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", - "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=4" @@ -980,12 +1009,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", - "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -995,14 +1024,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" }, "engines": { "node": ">=6.9.0" @@ -1012,12 +1041,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", - "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1027,12 +1056,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", - "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1042,17 +1071,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", - "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", "globals": "^11.1.0" }, "engines": { @@ -1072,12 +1102,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", - "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1087,12 +1117,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.5.tgz", - "integrity": "sha512-wU9tYisEbRMxqDezKUqC9GleLycCRoUsai9ddlsq54r8QRLaeEhc+d+9DqCG+kV9W2GgQjTZESPTpn5bAFMDww==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", + "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1102,13 +1132,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", - "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1118,12 +1148,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", - "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1133,13 +1163,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", - "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1149,12 +1179,12 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", - "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1164,13 +1194,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", - "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", "dev": true, "dependencies": { - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1180,12 +1211,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", - "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1195,12 +1226,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", - "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1210,13 +1241,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", - "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { @@ -1227,14 +1258,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", - "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { @@ -1245,15 +1276,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", - "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", + "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", "dev": true, "dependencies": { - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" }, "engines": { @@ -1264,13 +1295,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", - "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1280,12 +1311,12 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.5.tgz", - "integrity": "sha512-+Xe5+6MWFo311U8SchgeX5c1+lJM+eZDBZgD+tvXu9VVQPXwwVzeManMMjYX6xw2HczngfOSZjoFYKwdeB/Jvw==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1295,12 +1326,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", - "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1310,13 +1341,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", - "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1326,12 +1357,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", - "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1341,12 +1372,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", - "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1356,9 +1387,9 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", - "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", + "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", "dev": true, "dependencies": { "regenerator-transform": "^0.14.2" @@ -1371,12 +1402,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", - "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", + "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1386,16 +1417,16 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", - "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz", + "integrity": "sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", "semver": "^6.3.0" }, "engines": { @@ -1415,12 +1446,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", - "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1430,13 +1461,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" }, "engines": { "node": ">=6.9.0" @@ -1446,12 +1477,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", - "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1461,12 +1492,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", - "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1476,12 +1507,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", - "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1491,12 +1522,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", - "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1506,13 +1537,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", - "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1522,31 +1553,32 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.5.tgz", - "integrity": "sha512-ci6TsS0bjrdPpWGnQ+m4f+JSSzDKlckqKIJJt9UZ/+g7Zz9k0N8lYU8IeLg/01o2h8LyNZDMLGgRLDTxpudLsA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.5", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.14.5", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.5", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", @@ -1561,44 +1593,44 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.5", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.5", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.14.5", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.14.5", - "@babel/plugin-transform-modules-systemjs": "^7.14.5", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.5", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@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.5", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.14.0", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", "semver": "^6.3.0" }, "engines": { @@ -1618,9 +1650,9 @@ } }, "node_modules/@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", @@ -1634,9 +1666,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", + "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.4" @@ -1646,44 +1678,45 @@ } }, "node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "dependencies": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.5.tgz", - "integrity": "sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz", + "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.16.10", + "@babel/types": "^7.16.8", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1692,12 +1725,12 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "dependencies": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.7" }, "engines": { "node": ">=6.9.0" @@ -1713,12 +1746,12 @@ } }, "node_modules/@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1742,9 +1775,9 @@ } }, "node_modules/@discoveryjs/json-ext": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", - "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", + "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", "dev": true, "engines": { "node": ">=10.0.0" @@ -1830,9 +1863,9 @@ } }, "node_modules/@trysound/sax": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", - "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true, "engines": { "node": ">=10.13.0" @@ -2021,9 +2054,9 @@ } }, "node_modules/@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "version": "7.1.18", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", + "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -2034,18 +2067,18 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", "dev": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "dependencies": { "@babel/parser": "^7.1.0", @@ -2053,18 +2086,37 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "dependencies": { "@babel/types": "^7.3.0" } }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-x8xEbfTtcv5uyQDrBXKg9Beo5QhTPqO4vM0uq4iU27/nhyRRWNEMKHjxvAb0WDvp2Mnt4Sw0jKmIi5yQF/k2Ag==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.5.tgz", + "integrity": "sha512-NEzjkGGpbs9S9fgC4abuBvTpVwE3i+Acu9BBod3PUyjDVZcNsGx61b8r2PphR61QGPnn0JHVs5ey6/I4eTrkxw==", "dev": true, "dependencies": { "@types/node": "*", @@ -2080,6 +2132,25 @@ "node": ">=0.10.0" } }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, "node_modules/@types/eslint": { "version": "7.2.10", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", @@ -2101,11 +2172,34 @@ } }, "node_modules/@types/estree": { - "version": "0.0.47", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", - "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", "dev": true }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, "node_modules/@types/glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", @@ -2117,9 +2211,9 @@ } }, "node_modules/@types/http-proxy": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz", - "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==", + "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", "dev": true, "dependencies": { "@types/node": "*" @@ -2135,27 +2229,27 @@ } }, "node_modules/@types/imagemin-gifsicle": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz", - "integrity": "sha512-RVFQZhPm/6vLC8wDvzHa34ZDrJECqmDV4XBS99AEk2ObyV4pcLQwObGYlmBv6fi9AtRLHf8mnKGczIHtF77u7w==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.1.tgz", + "integrity": "sha512-kUz6sUh0P95JOS0RGEaaemWUrASuw+dLsWIveK2UZJx74id/B9epgblMkCk/r5MjUWbZ83wFvacG5Rb/f97gyA==", "dev": true, "dependencies": { "@types/imagemin": "*" } }, "node_modules/@types/imagemin-mozjpeg": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz", - "integrity": "sha512-sR2nEZOrlbgnmVgG+lXetZOvhgtctLe1hBfvySnPnxDd2pOon9mMPq7SHFI89VZT1AXvFgRs8w6X8ik8potpgA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.1.tgz", + "integrity": "sha512-kMQWEoKxxhlnH4POI3qfW9DjXlQfi80ux3l2b3j5R3eudSCoUIzKQLkfMjNJ6eMYnMWBcB+rfQOWqIzdIwFGKw==", "dev": true, "dependencies": { "@types/imagemin": "*" } }, "node_modules/@types/imagemin-optipng": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.0.tgz", - "integrity": "sha512-Qn4gTV1fpPG2WIsUIl10yi2prudOuDIx+D+O0H3aKZRcTCwpMjszBVeRWUqkhG5wADhWO4giLut1sFNr3H2XIQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz", + "integrity": "sha512-XCM/3q+HUL7v4zOqMI+dJ5dTxT+MUukY9KU49DSnYb/4yWtSMHJyADP+WHSMVzTR63J2ZvfUOzSilzBNEQW78g==", "dev": true, "dependencies": { "@types/imagemin": "*" @@ -2177,6 +2271,12 @@ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, "node_modules/@types/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", @@ -2195,18 +2295,67 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, "node_modules/@types/retry": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", "dev": true }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/svgo": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.5.tgz", "integrity": "sha512-y9Pw8IK50OqFRDpdI9Is29KlWiENVW9FDvlTmGHelvTfR2brYFJbsClvulZfeq6YKacFrDsG9a39w0kJZdHLaw==", "dev": true }, + "node_modules/@types/ws": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", + "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@vue/component-compiler-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", @@ -2253,155 +2402,155 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, "node_modules/@webpack-cli/configtest": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.4.tgz", - "integrity": "sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", + "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", "dev": true, "peerDependencies": { "webpack": "4.x.x || 5.x.x", @@ -2409,9 +2558,9 @@ } }, "node_modules/@webpack-cli/info": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.3.0.tgz", - "integrity": "sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", + "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", "dev": true, "dependencies": { "envinfo": "^7.7.3" @@ -2421,9 +2570,9 @@ } }, "node_modules/@webpack-cli/serve": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.5.1.tgz", - "integrity": "sha512-4vSVUiOPJLmr45S8rMGy7WDvpWxfFxfP/Qx/cxZFCfvoypTYpPPL1X8VIZMe0WTA+Jr7blUxwUSEZNkjoMTgSw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", + "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", "dev": true, "peerDependencies": { "webpack-cli": "4.x.x" @@ -2522,6 +2671,45 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -2531,12 +2719,6 @@ "ajv": "^6.9.1" } }, - "node_modules/alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -2726,17 +2908,17 @@ } }, "node_modules/autoprefixer": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.6.tgz", - "integrity": "sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg==", + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz", + "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", - "caniuse-lite": "^1.0.30001230", - "colorette": "^1.2.2", - "fraction.js": "^4.1.1", + "browserslist": "^4.19.1", + "caniuse-lite": "^1.0.30001297", + "fraction.js": "^4.1.2", "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" }, "bin": { "autoprefixer": "bin/autoprefixer" @@ -2752,10 +2934,16 @@ "postcss": "^8.1.0" } }, + "node_modules/autoprefixer/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "node_modules/babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", "dev": true, "dependencies": { "find-cache-dir": "^3.3.1", @@ -2825,13 +3013,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", - "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", "dev": true, "dependencies": { "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.2", + "@babel/helper-define-polyfill-provider": "^0.3.1", "semver": "^6.1.1" }, "peerDependencies": { @@ -2848,25 +3036,25 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", - "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz", + "integrity": "sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.14.0" + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.20.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", - "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.2.2" + "@babel/helper-define-polyfill-provider": "^0.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -2935,30 +3123,30 @@ "dev": true }, "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", "dev": true, "dependencies": { - "bytes": "3.1.0", + "bytes": "3.1.1", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" }, "engines": { "node": ">= 0.8" } }, "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", "dev": true, "engines": { "node": ">= 0.8" @@ -3135,16 +3323,16 @@ } }, "node_modules/browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" }, "bin": { "browserslist": "cli.js" @@ -3157,6 +3345,12 @@ "url": "https://opencollective.com/browserslist" } }, + "node_modules/browserslist/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "node_modules/buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", @@ -3245,9 +3439,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001239", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz", - "integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==", + "version": "1.0.30001301", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz", + "integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==", "dev": true, "funding": { "type": "opencollective", @@ -3255,9 +3449,9 @@ } }, "node_modules/chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", @@ -3280,24 +3474,30 @@ } }, "node_modules/chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "dependencies": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "glob-parent": "~5.1.0", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.0" }, "engines": { "node": ">= 8.10.0" }, "optionalDependencies": { - "fsevents": "~2.3.1" + "fsevents": "~2.3.2" } }, "node_modules/chrome-trace-event": { @@ -3421,15 +3621,15 @@ "dev": true }, "node_modules/colord": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.0.1.tgz", - "integrity": "sha512-vm5YpaWamD0Ov6TSG0GGmUIwstrWcfKQV/h2CmbR7PbNu41+qdB5PW9lpzhjedrpm08uuYvcXi0Oel1RLZIJuA==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", "dev": true }, "node_modules/colorette": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", - "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, "node_modules/colors": { @@ -3578,17 +3778,37 @@ "dev": true }, "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "dependencies": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" }, "engines": { "node": ">= 0.6" } }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/content-type": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", @@ -3608,9 +3828,9 @@ } }, "node_modules/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", "dev": true, "engines": { "node": ">= 0.6" @@ -3623,12 +3843,12 @@ "dev": true }, "node_modules/core-js-compat": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.0.tgz", - "integrity": "sha512-8X6lWsG+s7IfOKzV93a7fRYfWRZobOfjw5V5rrq43Vh/W+V6qYxl7Akalsvgab4PFT/4L/pjQbdBUEM36NXKrw==", + "version": "3.20.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.3.tgz", + "integrity": "sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", + "browserslist": "^4.19.1", "semver": "7.0.0" }, "funding": { @@ -3652,9 +3872,9 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, "dependencies": { "@types/parse-json": "^4.0.0", @@ -3785,19 +4005,10 @@ "urix": "^0.1.0" } }, - "node_modules/css-color-names": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", - "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/css-declaration-sorter": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", - "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", + "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", "dev": true, "dependencies": { "timsort": "^0.3.0" @@ -3871,25 +4082,25 @@ "dev": true }, "node_modules/css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", "dev": true, "dependencies": { "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, "funding": { "url": "https://github.com/sponsors/fb55" } }, "node_modules/css-select/node_modules/domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -3924,9 +4135,9 @@ } }, "node_modules/css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true, "engines": { "node": ">= 6" @@ -3957,14 +4168,14 @@ } }, "node_modules/cssnano": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", - "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", + "version": "5.0.16", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.16.tgz", + "integrity": "sha512-ryhRI9/B9VFCwPbb1z60LLK5/ldoExi7nwdnJzpkLZkm2/r7j2X3jfY+ZvDVJhC/0fPZlrAguYdHNFg0iglPKQ==", "dev": true, "dependencies": { - "cosmiconfig": "^7.0.0", - "cssnano-preset-default": "^5.1.3", - "is-resolvable": "^1.1.0" + "cssnano-preset-default": "^5.1.11", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -3978,40 +4189,40 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", - "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.11.tgz", + "integrity": "sha512-ETet5hqHxmzQq2ynXMOQofKuLm7VOjMiOB7E2zdtm/hSeCKlD9fabzIUV4GoPcRyJRHi+4kGf0vsfGYbQ4nmPw==", "dev": true, "dependencies": { "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^2.0.1", - "postcss-calc": "^8.0.0", - "postcss-colormin": "^5.2.0", - "postcss-convert-values": "^5.0.1", - "postcss-discard-comments": "^5.0.1", - "postcss-discard-duplicates": "^5.0.1", - "postcss-discard-empty": "^5.0.1", - "postcss-discard-overridden": "^5.0.1", - "postcss-merge-longhand": "^5.0.2", - "postcss-merge-rules": "^5.0.2", - "postcss-minify-font-values": "^5.0.1", - "postcss-minify-gradients": "^5.0.1", - "postcss-minify-params": "^5.0.1", - "postcss-minify-selectors": "^5.1.0", - "postcss-normalize-charset": "^5.0.1", - "postcss-normalize-display-values": "^5.0.1", - "postcss-normalize-positions": "^5.0.1", - "postcss-normalize-repeat-style": "^5.0.1", - "postcss-normalize-string": "^5.0.1", - "postcss-normalize-timing-functions": "^5.0.1", - "postcss-normalize-unicode": "^5.0.1", - "postcss-normalize-url": "^5.0.2", - "postcss-normalize-whitespace": "^5.0.1", - "postcss-ordered-values": "^5.0.2", - "postcss-reduce-initial": "^5.0.1", - "postcss-reduce-transforms": "^5.0.1", - "postcss-svgo": "^5.0.2", - "postcss-unique-selectors": "^5.0.1" + "cssnano-utils": "^3.0.1", + "postcss-calc": "^8.2.0", + "postcss-colormin": "^5.2.4", + "postcss-convert-values": "^5.0.3", + "postcss-discard-comments": "^5.0.2", + "postcss-discard-duplicates": "^5.0.2", + "postcss-discard-empty": "^5.0.2", + "postcss-discard-overridden": "^5.0.3", + "postcss-merge-longhand": "^5.0.5", + "postcss-merge-rules": "^5.0.5", + "postcss-minify-font-values": "^5.0.3", + "postcss-minify-gradients": "^5.0.5", + "postcss-minify-params": "^5.0.4", + "postcss-minify-selectors": "^5.1.2", + "postcss-normalize-charset": "^5.0.2", + "postcss-normalize-display-values": "^5.0.2", + "postcss-normalize-positions": "^5.0.3", + "postcss-normalize-repeat-style": "^5.0.3", + "postcss-normalize-string": "^5.0.3", + "postcss-normalize-timing-functions": "^5.0.2", + "postcss-normalize-unicode": "^5.0.3", + "postcss-normalize-url": "^5.0.4", + "postcss-normalize-whitespace": "^5.0.3", + "postcss-ordered-values": "^5.0.4", + "postcss-reduce-initial": "^5.0.2", + "postcss-reduce-transforms": "^5.0.3", + "postcss-svgo": "^5.0.3", + "postcss-unique-selectors": "^5.0.3" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -4021,9 +4232,9 @@ } }, "node_modules/cssnano-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", - "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.1.tgz", + "integrity": "sha512-VNCHL364lh++/ono+S3j9NlUK+d97KNkxI77NlqZU2W3xd2/qmyN61dsa47pTpb55zuU4G4lI7qFjAXZJH1OAQ==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -4163,16 +4374,16 @@ } }, "node_modules/del/node_modules/globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" }, "engines": { @@ -4183,9 +4394,9 @@ } }, "node_modules/del/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true, "engines": { "node": ">= 4" @@ -4355,9 +4566,9 @@ } }, "node_modules/domutils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", - "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "dependencies": { "dom-serializer": "^1.0.1", @@ -4415,9 +4626,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.3.730", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.730.tgz", - "integrity": "sha512-1Tr3h09wXhmqXnvDyrRe6MFgTeU0ZXy3+rMJWTrOHh/HNesWwBBrKnMxRJWZ86dzs8qQdw2c7ZE1/qeGHygImA==", + "version": "1.4.51", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.51.tgz", + "integrity": "sha512-JNEmcYl3mk1tGQmy0EvL5eik/CKSBuzAyGP0QFdG6LIgxQe3II0BL1m2zKc2MZMf3uGqHWE1TFddJML0RpjSHQ==", "dev": true }, "node_modules/elliptic": { @@ -4466,9 +4677,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -4521,9 +4732,9 @@ } }, "node_modules/es-module-lexer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", - "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, "node_modules/es5-ext": { @@ -5038,17 +5249,17 @@ } }, "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", "dev": true, "dependencies": { "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.4.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -5062,13 +5273,13 @@ "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", @@ -5099,6 +5310,26 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ext": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", @@ -5121,20 +5352,19 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" }, "engines": { - "node": ">=8" + "node": ">=8.6.0" } }, "node_modules/fast-json-stable-stringify": { @@ -5278,9 +5508,9 @@ "dev": true }, "node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "dependencies": { "commondir": "^1.0.1", @@ -5356,9 +5586,9 @@ } }, "node_modules/fraction.js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", - "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz", + "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==", "dev": true, "engines": { "node": "*" @@ -5491,9 +5721,9 @@ } }, "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -5572,9 +5802,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, "node_modules/growly": { @@ -5693,12 +5923,6 @@ "he": "bin/he" } }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -5722,18 +5946,6 @@ "wbuf": "^1.1.0" } }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, "node_modules/html-entities": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", @@ -5855,31 +6067,25 @@ "dev": true }, "node_modules/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "dependencies": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.6" } }, - "node_modules/http-errors/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, "node_modules/http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", + "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", "dev": true }, "node_modules/http-proxy": { @@ -5897,12 +6103,12 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", - "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.2.tgz", + "integrity": "sha512-XtmDN5w+vdFTBZaYhdJAbMqn0DP/EhkUaAeo963mojwpKMMbw6nivtFKw07D7DDOH745L5k0VL0P8KRYNEVF/g==", "dev": true, "dependencies": { - "@types/http-proxy": "^1.17.5", + "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", "is-glob": "^4.0.1", "is-plain-obj": "^3.0.0", @@ -5910,6 +6116,9 @@ }, "engines": { "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" } }, "node_modules/https-browserify": { @@ -6038,18 +6247,6 @@ "node": ">=4.0.0" } }, - "node_modules/import-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", - "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", - "dev": true, - "dependencies": { - "import-from": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -6066,31 +6263,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-from/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "dependencies": { "pkg-dir": "^4.2.0", @@ -6101,6 +6277,9 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/imurmurhash": { @@ -6137,33 +6316,6 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "node_modules/internal-ip": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", - "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", - "dev": true, - "dependencies": { - "default-gateway": "^6.0.0", - "ipaddr.js": "^1.9.1", - "is-ip": "^3.1.0", - "p-event": "^4.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/internal-ip?sponsor=1" - } - }, - "node_modules/internal-ip/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", @@ -6179,15 +6331,6 @@ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, - "node_modules/ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/ipaddr.js": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", @@ -6197,15 +6340,6 @@ "node": ">= 10" } }, - "node_modules/is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-arguments": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", @@ -6244,33 +6378,10 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "dependencies": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "node_modules/is-color-stop/node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -6335,18 +6446,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-ip": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", - "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", - "dev": true, - "dependencies": { - "ip-regex": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -6413,19 +6512,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, "node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-wsl": { @@ -6462,9 +6558,9 @@ } }, "node_modules/jest-worker": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", - "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", + "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", "dev": true, "dependencies": { "@types/node": "*", @@ -6591,70 +6687,70 @@ } }, "node_modules/klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/laravel-mix": { - "version": "6.0.34", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.34.tgz", - "integrity": "sha512-Je9ksXGCk9ytD+OMsgir043sERPlROMv1Lw5DOvRg2599lT9jWMHQn9x7Hn83HfmFw54mc6tmPLNhSU/SdI7jw==", + "version": "6.0.41", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.41.tgz", + "integrity": "sha512-LA6ep2kUritCzvePgza98Ge2wmlntYSmd1mJx0BwRqyP6x8vMbh9VnMesTm5ezZql83mXI+hFumRCEBxzAnZaQ==", "dev": true, "dependencies": { - "@babel/core": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.5", + "@babel/core": "^7.15.8", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.14.5", - "@babel/preset-env": "^7.14.5", - "@babel/runtime": "^7.14.5", - "@types/babel__core": "^7.1.14", - "@types/clean-css": "^4.2.4", - "@types/imagemin-gifsicle": "^7.0.0", - "@types/imagemin-mozjpeg": "^8.0.0", - "@types/imagemin-optipng": "^5.2.0", + "@babel/plugin-transform-runtime": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "@babel/runtime": "^7.15.4", + "@types/babel__core": "^7.1.16", + "@types/clean-css": "^4.2.5", + "@types/imagemin-gifsicle": "^7.0.1", + "@types/imagemin-mozjpeg": "^8.0.1", + "@types/imagemin-optipng": "^5.2.1", "@types/imagemin-svgo": "^8.0.0", - "autoprefixer": "^10.2.6", - "babel-loader": "^8.2.2", - "chalk": "^4.1.1", - "chokidar": "^3.5.1", + "autoprefixer": "^10.4.0", + "babel-loader": "^8.2.3", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", "clean-css": "^4.2.3 || ^5.1.2", "cli-table3": "^0.6.0", "collect.js": "^4.28.5", "commander": "^7.2.0", "concat": "^1.0.3", "css-loader": "^5.2.6", - "cssnano": "^5.0.6", + "cssnano": "^5.0.8", "dotenv": "^10.0.0", "dotenv-expand": "^5.1.0", "file-loader": "^6.2.0", "fs-extra": "^10.0.0", - "glob": "^7.1.7", + "glob": "^7.2.0", "html-loader": "^1.3.2", "imagemin": "^7.0.1", "img-loader": "^4.0.0", "lodash": "^4.17.21", "md5": "^2.3.0", - "mini-css-extract-plugin": "^1.6.0", + "mini-css-extract-plugin": "^1.6.2", "node-libs-browser": "^2.2.1", - "postcss-load-config": "^3.0.1", - "postcss-loader": "^6.1.0", + "postcss-load-config": "^3.1.0", + "postcss-loader": "^6.2.0", "semver": "^7.3.5", "strip-ansi": "^6.0.0", "style-loader": "^2.0.0", - "terser": "^5.7.0", - "terser-webpack-plugin": "^5.1.3", + "terser": "^5.9.0", + "terser-webpack-plugin": "^5.2.4", "vue-style-loader": "^4.1.3", - "webpack": "^5.38.1", - "webpack-cli": "^4.7.2", - "webpack-dev-server": "4.1.1", + "webpack": "^5.60.0", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.7.3", "webpack-merge": "^5.8.0", - "webpack-notifier": "^1.13.0", + "webpack-notifier": "^1.14.1", "webpackbar": "^5.0.0-3", - "yargs": "^17.0.1" + "yargs": "^17.2.1" }, "bin": { "laravel-mix": "bin/cli.js", @@ -6664,7 +6760,14 @@ "node": ">=12.14.0" }, "peerDependencies": { - "postcss": "^8.3.1" + "@babel/core": "^7.15.8", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "postcss": "^8.3.11", + "webpack": "^5.60.0", + "webpack-cli": "^4.9.1" } }, "node_modules/laravel-mix-artisan-publish": { @@ -6682,6 +6785,20 @@ "laravel-mix": "^4.0||^5.0||^6.0" } }, + "node_modules/laravel-mix/node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/laravel-mix/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -6709,6 +6826,46 @@ "node": ">=10" } }, + "node_modules/laravel-mix/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/laravel-mix/node_modules/terser": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "acorn": "^8.5.0" + }, + "peerDependenciesMeta": { + "acorn": { + "optional": true + } + } + }, + "node_modules/laravel-mix/node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/laravel-mix/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -6728,10 +6885,19 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", + "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, "node_modules/loader-runner": { @@ -6896,9 +7062,9 @@ } }, "node_modules/memfs": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.3.0.tgz", - "integrity": "sha512-BEE62uMfKOavX3iG7GYX43QJ+hAeeWnwIAuJ/R6q96jaMtiLzhsxHJC8B1L7fK7Pt/vXDRwb3SG/yBpNGDPqzg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", + "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", "dev": true, "dependencies": { "fs-monkey": "1.0.3" @@ -7030,9 +7196,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", - "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", + "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", "dev": true, "dependencies": { "loader-utils": "^2.0.0", @@ -7118,9 +7284,9 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" @@ -7179,12 +7345,12 @@ "dev": true }, "node_modules/node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", + "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", "dev": true, "engines": { - "node": ">= 6.0.0" + "node": ">= 6.13.0" } }, "node_modules/node-libs-browser": { @@ -7259,15 +7425,6 @@ "node": ">=10" } }, - "node_modules/node-notifier/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/node-notifier/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -7290,9 +7447,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, "node_modules/normalize-path": { @@ -7314,9 +7471,9 @@ } }, "node_modules/normalize-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.0.1.tgz", - "integrity": "sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, "engines": { "node": ">=10" @@ -7460,9 +7617,9 @@ } }, "node_modules/open": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.3.0.tgz", - "integrity": "sha512-7INcPWb1UcOwSQxAXTnBJ+FxVV4MPs/X++FWWBtgY69/J5lc+tCteMt/oFK1MnkyHC4VILLa9ntmwKTwDR4Q9w==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, "dependencies": { "define-lazy-prop": "^2.0.0", @@ -7499,30 +7656,6 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "node_modules/p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, - "dependencies": { - "p-timeout": "^3.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -7590,18 +7723,6 @@ "node": ">=8" } }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -7843,14 +7964,14 @@ } }, "node_modules/postcss": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", "dev": true, "dependencies": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map-js": "^0.6.2" + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -7861,9 +7982,9 @@ } }, "node_modules/postcss-calc": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", - "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.2.tgz", + "integrity": "sha512-B5R0UeB4zLJvxNt1FVCaDZULdzsKLPc6FhjFJ+xwFiq7VG4i9cuaJLxVjNtExNK8ocm3n2o4unXXLiVX1SCqxA==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.2", @@ -7874,15 +7995,15 @@ } }, "node_modules/postcss-colormin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", - "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.4.tgz", + "integrity": "sha512-rYlC5015aNqVQt/B6Cy156g7sH5tRUJGmT9xeagYthtKehetbKx7jHxhyLpulP4bs4vbp8u/B2rac0J7S7qPQg==", "dev": true, "dependencies": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", - "colord": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -7892,12 +8013,12 @@ } }, "node_modules/postcss-convert-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", - "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.3.tgz", + "integrity": "sha512-fVkjHm2T0PSMqXUCIhHNWVGjhB9mHEWX2GboVs7j3iCgr6FpIl9c/IdXy0PHWZSQ9LFTRgmj98amxJE6KOnlsA==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -7907,9 +8028,9 @@ } }, "node_modules/postcss-discard-comments": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", - "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.2.tgz", + "integrity": "sha512-6VQ3pYTsJHEsN2Bic88Aa7J/Brn4Bv8j/rqaFQZkH+pcVkKYwxCIvoMQkykEW7fBjmofdTnQgcivt5CCBJhtrg==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -7919,9 +8040,9 @@ } }, "node_modules/postcss-discard-duplicates": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", - "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz", + "integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -7931,9 +8052,9 @@ } }, "node_modules/postcss-discard-empty": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", - "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.2.tgz", + "integrity": "sha512-SxBsbTjlsKUvZLL+dMrdWauuNZU8TBq5IOL/DHa6jBUSXFEwmDqeXRfTIK/FQpPTa8MJMxEHjSV3UbiuyLARPQ==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -7943,9 +8064,9 @@ } }, "node_modules/postcss-discard-overridden": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", - "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.3.tgz", + "integrity": "sha512-yRTXknIZA4k8Yo4FiF1xbsLj/VBxfXEWxJNIrtIy6HC9KQ4xJxcPtoaaskh6QptCGrrcGnhKsTsENTRPZOBu4g==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -7955,13 +8076,13 @@ } }, "node_modules/postcss-load-config": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.1.tgz", - "integrity": "sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz", + "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==", "dev": true, "dependencies": { - "cosmiconfig": "^7.0.0", - "import-cwd": "^3.0.0" + "lilconfig": "^2.0.4", + "yaml": "^1.10.2" }, "engines": { "node": ">= 10" @@ -7969,16 +8090,24 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } } }, "node_modules/postcss-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.1.0.tgz", - "integrity": "sha512-yA/cXBfACkthZNA2hQxOnaReVfQ6uLmvbEDQzNafpbK40URZJvP/28dL1DG174Gvz3ptkkHbbwDBCh+gXR94CA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", "dev": true, "dependencies": { "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", + "klona": "^2.0.5", "semver": "^7.3.5" }, "engines": { @@ -8027,14 +8156,13 @@ "dev": true }, "node_modules/postcss-merge-longhand": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", - "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.5.tgz", + "integrity": "sha512-R2BCPJJ/U2oh1uTWEYn9CcJ7MMcQ1iIbj9wfr2s/zHu5om5MP/ewKdaunpfJqR1WYzqCsgnXuRoVXPAzxdqy8g==", "dev": true, "dependencies": { - "css-color-names": "^1.0.1", - "postcss-value-parser": "^4.1.0", - "stylehacks": "^5.0.1" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.0.2" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8044,16 +8172,15 @@ } }, "node_modules/postcss-merge-rules": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", - "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.5.tgz", + "integrity": "sha512-3Oa26/Pb9VOFVksJjFG45SNoe4nhGvJ2Uc6TlRimqF8uhfOCEhVCaJ3rvEat5UFOn2UZqTY5Da8dFgCh3Iq0Ug==", "dev": true, "dependencies": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", - "cssnano-utils": "^2.0.1", - "postcss-selector-parser": "^6.0.5", - "vendors": "^1.0.3" + "cssnano-utils": "^3.0.1", + "postcss-selector-parser": "^6.0.5" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8063,12 +8190,12 @@ } }, "node_modules/postcss-minify-font-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", - "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.3.tgz", + "integrity": "sha512-bC45rVzEwsLhv/cL1eCjoo2OOjbSk9I7HKFBYnBvtyuIZlf7uMipMATXtA0Fc3jwPo3wuPIW1jRJWKzflMh1sA==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8078,14 +8205,14 @@ } }, "node_modules/postcss-minify-gradients": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", - "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.5.tgz", + "integrity": "sha512-/YjvXs8PepsoiZAIpjstOO4IHKwFAqYNqbA1yVdqklM84tbUUneh6omJxGlRlF3mi6K5Pa067Mg6IwqEnYC8Zg==", "dev": true, "dependencies": { - "cssnano-utils": "^2.0.1", - "is-color-stop": "^1.1.0", - "postcss-value-parser": "^4.1.0" + "colord": "^2.9.1", + "cssnano-utils": "^3.0.1", + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8095,16 +8222,14 @@ } }, "node_modules/postcss-minify-params": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", - "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.4.tgz", + "integrity": "sha512-Z0vjod9lRZEmEPfEmA2sCfjbfEEFKefMD3RDIQSUfXK4LpCyWkX1CniUgyNvnjJFLDPSxtgKzozhHhPHKoeGkg==", "dev": true, "dependencies": { - "alphanum-sort": "^1.0.2", - "browserslist": "^4.16.0", - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0", - "uniqs": "^2.0.0" + "browserslist": "^4.16.6", + "cssnano-utils": "^3.0.1", + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8114,12 +8239,11 @@ } }, "node_modules/postcss-minify-selectors": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", - "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.2.tgz", + "integrity": "sha512-gpn1nJDMCf3g32y/7kl+jsdamhiYT+/zmEt57RoT9GmzlixBNRPohI7k8UIHelLABhdLf3MSZhtM33xuH5eQOQ==", "dev": true, "dependencies": { - "alphanum-sort": "^1.0.2", "postcss-selector-parser": "^6.0.5" }, "engines": { @@ -8189,9 +8313,9 @@ } }, "node_modules/postcss-normalize-charset": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", - "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.2.tgz", + "integrity": "sha512-fEMhYXzO8My+gC009qDc/3bgnFP8Fv1Ic8uw4ec4YTlhIOw63tGPk1YFd7fk9bZUf1DAbkhiL/QPWs9JLqdF2g==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8201,13 +8325,12 @@ } }, "node_modules/postcss-normalize-display-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", - "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", + "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", "dev": true, "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8217,12 +8340,12 @@ } }, "node_modules/postcss-normalize-positions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", - "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.3.tgz", + "integrity": "sha512-U+rmhjrNBvIGYqr/1tD4wXPFFMKUbXsYXvlUCzLi0tOCUS6LoeEAnmVXXJY/MEB/1CKZZwBSs2tmzGawcygVBA==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8232,13 +8355,12 @@ } }, "node_modules/postcss-normalize-repeat-style": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", - "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.3.tgz", + "integrity": "sha512-uk1+xYx0AMbA3nLSNhbDrqbf/rx+Iuq5tVad2VNyaxxJzx79oGieJ6D9F6AfOL2GtiIbP7vTYlpYHtG+ERFXTg==", "dev": true, "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8248,12 +8370,12 @@ } }, "node_modules/postcss-normalize-string": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", - "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.3.tgz", + "integrity": "sha512-Mf2V4JbIDboNGQhW6xW0YREDiYXoX3WrD3EjKkjvnpAJ6W4qqjLnK/c9aioyVFaWWHVdP5zVRw/9DI5S3oLDFw==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8263,13 +8385,12 @@ } }, "node_modules/postcss-normalize-timing-functions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", - "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", + "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", "dev": true, "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8279,13 +8400,13 @@ } }, "node_modules/postcss-normalize-unicode": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", - "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.3.tgz", + "integrity": "sha512-uNC7BmS/7h6to2UWa4RFH8sOTzu2O9dVWPE/F9Vm9GdhONiD/c1kNaCLbmsFHlKWcEx7alNUChQ+jH/QAlqsQw==", "dev": true, "dependencies": { - "browserslist": "^4.16.0", - "postcss-value-parser": "^4.1.0" + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8295,14 +8416,13 @@ } }, "node_modules/postcss-normalize-url": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", - "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", + "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", "dev": true, "dependencies": { - "is-absolute-url": "^3.0.3", "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8312,12 +8432,12 @@ } }, "node_modules/postcss-normalize-whitespace": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", - "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.3.tgz", + "integrity": "sha512-333JWRnX655fSoUbufJ10HJop3c8mrpKkCCUnEmgz/Cb/QEtW+/TMZwDAUt4lnwqP6tCCk0x0b58jqvDgiQm/A==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8327,13 +8447,13 @@ } }, "node_modules/postcss-ordered-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", - "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.4.tgz", + "integrity": "sha512-taKtGDZtyYUMVYkg+MuJeBUiTF6cGHZmo/qcW7ibvW79UlyKuSHbo6dpCIiqI+j9oJsXWzP+ovIxoyLDOeQFdw==", "dev": true, "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "cssnano-utils": "^3.0.1", + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8343,12 +8463,12 @@ } }, "node_modules/postcss-reduce-initial": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", - "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", + "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", "dev": true, "dependencies": { - "browserslist": "^4.16.0", + "browserslist": "^4.16.6", "caniuse-api": "^3.0.0" }, "engines": { @@ -8359,13 +8479,12 @@ } }, "node_modules/postcss-reduce-transforms": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", - "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.3.tgz", + "integrity": "sha512-yDnTUab5i7auHiNwdcL1f+pBnqQFf+7eC4cbC7D8Lc1FkvNZhtpkdad+9U4wDdFb84haupMf0rA/Zc5LcTe/3A==", "dev": true, "dependencies": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8388,13 +8507,13 @@ } }, "node_modules/postcss-svgo": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", - "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", + "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", "dev": true, "dependencies": { "postcss-value-parser": "^4.1.0", - "svgo": "^2.3.0" + "svgo": "^2.7.0" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8404,14 +8523,12 @@ } }, "node_modules/postcss-unique-selectors": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", - "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.3.tgz", + "integrity": "sha512-V5tX2hadSSn+miVCluuK1IDGy+7jAXSOfRZ2DQ+s/4uQZb/orDYBjH0CHgFrXsRw78p4QTuEFA9kI6C956UnHQ==", "dev": true, "dependencies": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5", - "uniqs": "^2.0.0" + "postcss-selector-parser": "^6.0.5" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8421,9 +8538,15 @@ } }, "node_modules/postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/postcss/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "node_modules/prelude-ls": { @@ -8541,12 +8664,15 @@ "dev": true }, "node_modules/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", "dev": true, "engines": { "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/querystring": { @@ -8621,13 +8747,13 @@ } }, "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", "dev": true, "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.1", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, @@ -8636,9 +8762,9 @@ } }, "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", "dev": true, "engines": { "node": ">= 0.8" @@ -8677,9 +8803,9 @@ } }, "node_modules/readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "dependencies": { "picomatch": "^2.2.1" @@ -8689,9 +8815,9 @@ } }, "node_modules/rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", "dev": true, "dependencies": { "resolve": "^1.9.0" @@ -8707,21 +8833,21 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", "dev": true, "dependencies": { - "regenerate": "^1.4.0" + "regenerate": "^1.4.2" }, "engines": { "node": ">=4" } }, "node_modules/regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, "node_modules/regenerator-transform": { @@ -8767,17 +8893,17 @@ } }, "node_modules/regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", "dev": true, "dependencies": { - "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" }, "engines": { "node": ">=4" @@ -8790,9 +8916,9 @@ "dev": true }, "node_modules/regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", "dev": true, "dependencies": { "jsesc": "~0.5.0" @@ -8853,13 +8979,17 @@ "dev": true }, "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9117,18 +9247,6 @@ "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", "dev": true }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -9324,12 +9442,15 @@ "dev": true }, "node_modules/selfsigned": { - "version": "1.10.14", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", - "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz", + "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==", "dev": true, "dependencies": { - "node-forge": "^0.10.0" + "node-forge": "^1.2.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/semver": { @@ -9342,9 +9463,9 @@ } }, "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "dev": true, "dependencies": { "debug": "2.6.9", @@ -9354,9 +9475,9 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" @@ -9381,15 +9502,15 @@ "dev": true }, "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -9456,15 +9577,15 @@ "dev": true }, "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "dev": true, "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.17.2" }, "engines": { "node": ">= 0.8.0" @@ -9477,9 +9598,9 @@ "dev": true }, "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "node_modules/sha.js": { @@ -9535,9 +9656,9 @@ "dev": true }, "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, "node_modules/slash": { @@ -9567,13 +9688,13 @@ } }, "node_modules/sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "dependencies": { "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", + "uuid": "^8.3.2", "websocket-driver": "^0.7.4" } }, @@ -9593,9 +9714,9 @@ } }, "node_modules/source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true, "engines": { "node": ">=0.10.0" @@ -9615,9 +9736,9 @@ } }, "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", @@ -9771,26 +9892,26 @@ ] }, "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" @@ -9838,12 +9959,12 @@ } }, "node_modules/stylehacks": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", - "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.2.tgz", + "integrity": "sha512-114zeJdOpTrbQYRD4OU5UWJ99LKUaqCPJTU1HQ/n3q3BwmllFN8kHENaLnOeqVq6AhXrWfxHNZTl33iJ4oy3cQ==", "dev": true, "dependencies": { - "browserslist": "^4.16.0", + "browserslist": "^4.16.6", "postcss-selector-parser": "^6.0.4" }, "engines": { @@ -9865,18 +9986,30 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/svgo": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.5.0.tgz", - "integrity": "sha512-FSdBOOo271VyF/qZnOn1PgwCdt1v4Dx0Sey+U1jgqm1vqRYjPGdip0RGrFW6ItwtkBB8rHgHk26dlVr0uCs82Q==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "dev": true, "dependencies": { - "@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", + "picocolors": "^1.0.0", "stable": "^0.1.8" }, "bin": { @@ -9886,6 +10019,12 @@ "node": ">=10.13.0" } }, + "node_modules/svgo/node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "node_modules/table": { "version": "6.7.1", "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", @@ -9926,43 +10065,25 @@ "dev": true }, "node_modules/tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, "engines": { "node": ">=6" } }, - "node_modules/terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/terser-webpack-plugin": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", - "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", + "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", "dev": true, "dependencies": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", + "jest-worker": "^27.4.1", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", - "terser": "^5.7.0" + "terser": "^5.7.2" }, "engines": { "node": ">= 10.13.0" @@ -9973,23 +10094,39 @@ }, "peerDependencies": { "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "node_modules/terser-webpack-plugin/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node_modules/terser-webpack-plugin/node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" + "optional": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.4.0" } }, + "node_modules/terser-webpack-plugin/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/terser-webpack-plugin/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -9999,13 +10136,32 @@ "node": ">=0.10.0" } }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "node_modules/terser-webpack-plugin/node_modules/terser": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "acorn": "^8.5.0" + }, + "peerDependenciesMeta": { + "acorn": { + "optional": true + } + } }, - "node_modules/terser/node_modules/source-map": { + "node_modules/terser-webpack-plugin/node_modules/terser/node_modules/source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", @@ -10077,9 +10233,9 @@ } }, "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, "engines": { "node": ">=0.6" @@ -10141,51 +10297,45 @@ } }, "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "dependencies": { - "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" }, "engines": { "node": ">=4" } }, "node_modules/unicode-match-property-value-ecmascript": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true, "engines": { "node": ">=4" } }, - "node_modules/uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", - "dev": true - }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -10276,13 +10426,12 @@ } }, "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, "bin": { - "uuid": "bin/uuid" + "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache": { @@ -10300,16 +10449,6 @@ "node": ">= 0.8" } }, - "node_modules/vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", @@ -10472,9 +10611,9 @@ "dev": true }, "node_modules/watchpack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", - "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -10494,34 +10633,35 @@ } }, "node_modules/webpack": { - "version": "5.39.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.39.1.tgz", - "integrity": "sha512-ulOvoNCh2PvTUa+zbpRuEb1VPeQnhxpnHleMPVVCq3QqnaFogjsLyps+o42OviQFoaGtTQYrUqDXu1QNkvUPzw==", + "version": "5.67.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.67.0.tgz", + "integrity": "sha512-LjFbfMh89xBDpUMgA1W9Ur6Rn/gnr2Cq1jjHFPo4v6a79/ypznSYbAyPgGhwsxBtMIaEmDD1oJoA7BEYw/Fbrw==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.47", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.2.1", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "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.4.0", + "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", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "json-parse-better-errors": "^1.0.2", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", + "schema-utils": "^3.1.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" }, "bin": { "webpack": "bin/webpack.js" @@ -10540,23 +10680,22 @@ } }, "node_modules/webpack-cli": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.2.tgz", - "integrity": "sha512-mEoLmnmOIZQNiRl0ebnjzQ74Hk0iKS5SiEEnpq3dRezoyR3yPaeQZCMCe+db4524pj1Pd5ghZXjT41KLzIhSLw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.4", - "@webpack-cli/info": "^1.3.0", - "@webpack-cli/serve": "^1.5.1", - "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", "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" }, "bin": { @@ -10584,16 +10723,16 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.1.tgz", - "integrity": "sha512-Kx1X+36Rn9JaZcQMrJ7qN3PMAuKmEDD9ZISjUj3Cgq4A6PtwYsC4mpaKotSRYH3iOF6HsUa8viHKS59FlyVifQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", + "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", "dev": true, "dependencies": { "colorette": "^2.0.10", "memfs": "^3.2.2", "mime-types": "^2.1.31", "range-parser": "^1.2.1", - "schema-utils": "^3.1.0" + "schema-utils": "^4.0.0" }, "engines": { "node": ">= 12.13.0" @@ -10606,42 +10745,93 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/webpack-dev-middleware/node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/webpack-dev-server": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.1.1.tgz", - "integrity": "sha512-Kl1mnCEw8Cy1Kw173gCxLIB242LfPKEOj9WoKhKz/MbryZTNrILzOJTk8kiczw/YUEPzn3gcltCQv6hDsLudRg==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz", + "integrity": "sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q==", "dev": true, "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/serve-index": "^1.9.1", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.2.2", "ansi-html-community": "^0.0.8", "bonjour": "^3.5.0", - "chokidar": "^3.5.1", - "colorette": "^1.2.2", + "chokidar": "^3.5.2", + "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^1.6.0", + "default-gateway": "^6.0.3", "del": "^6.0.0", "express": "^4.17.1", "graceful-fs": "^4.2.6", "html-entities": "^2.3.2", "http-proxy-middleware": "^2.0.0", - "internal-ip": "^6.2.0", "ipaddr.js": "^2.0.1", "open": "^8.0.9", "p-retry": "^4.5.0", "portfinder": "^1.0.28", - "schema-utils": "^3.1.0", - "selfsigned": "^1.10.11", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.0", "serve-index": "^1.9.1", "sockjs": "^0.3.21", "spdy": "^4.0.2", "strip-ansi": "^7.0.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^5.0.0", + "webpack-dev-middleware": "^5.3.0", "ws": "^8.1.0" }, "bin": { @@ -10659,6 +10849,34 @@ } } }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, "node_modules/webpack-dev-server/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", @@ -10671,6 +10889,31 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/webpack-dev-server/node_modules/strip-ansi": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", @@ -10700,13 +10943,21 @@ } }, "node_modules/webpack-notifier": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.13.0.tgz", - "integrity": "sha512-QLk6l/TZKGhyN6Hd1zobaiYno7S9YPX3wH86+YOSufHes77SegGhnGdj+4vrLDFK5A4ZKoQD5GRXXFnM0h0N8A==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.15.0.tgz", + "integrity": "sha512-N2V8UMgRB5komdXQRavBsRpw0hPhJq2/SWNOGuhrXpIgRhcMexzkGQysUyGStHLV5hkUlgpRiF7IUXoBqyMmzQ==", "dev": true, "dependencies": { "node-notifier": "^9.0.0", "strip-ansi": "^6.0.0" + }, + "peerDependencies": { + "@types/webpack": ">4.41.31" + }, + "peerDependenciesMeta": { + "@types/webpack": { + "optional": true + } } }, "node_modules/webpack-sources": { @@ -10729,9 +10980,9 @@ } }, "node_modules/webpack/node_modules/acorn": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", - "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -10740,24 +10991,20 @@ "node": ">=0.4.0" } }, - "node_modules/webpack/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/webpack/node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "dev": true, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "acorn": "^8" } }, "node_modules/webpack/node_modules/webpack-sources": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", - "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, "engines": { "node": ">=10.13.0" } @@ -10858,9 +11105,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", + "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", "dev": true, "engines": { "node": ">=10.0.0" @@ -10912,42 +11159,30 @@ } }, "node_modules/yargs": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz", - "integrity": "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==", + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", + "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", "dev": true, "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.0.0" }, "engines": { "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", "dev": true, "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } } }, @@ -10962,26 +11197,26 @@ } }, "@babel/compat-data": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.5.tgz", - "integrity": "sha512-kixrYn4JwfAVPa0f2yfzc2AWti6WRRyO3XjWW5PJAvtE11qhSayrrcrEnee05KAtNaPC+EwehE8Qt1UedEVB8w==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", + "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", "dev": true }, "@babel/core": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", - "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helpers": "^7.14.6", - "@babel/parser": "^7.14.6", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5", + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", + "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helpers": "^7.16.7", + "@babel/parser": "^7.16.12", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.10", + "@babel/types": "^7.16.8", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -10991,12 +11226,12 @@ }, "dependencies": { "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "requires": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.7" } }, "semver": { @@ -11008,44 +11243,44 @@ } }, "@babel/generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", - "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", + "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", "dev": true, "requires": { - "@babel/types": "^7.14.5", + "@babel/types": "^7.16.8", "jsesc": "^2.5.1", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", - "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", - "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/helper-compilation-targets": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", - "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", + "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", "dev": true, "requires": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "browserslist": "^4.16.6", + "@babel/compat-data": "^7.16.4", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", "semver": "^6.3.0" }, "dependencies": { @@ -11058,33 +11293,34 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", - "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz", + "integrity": "sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", - "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz", + "integrity": "sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-annotate-as-pure": "^7.16.7", "regexpu-core": "^4.7.1" } }, "@babel/helper-define-polyfill-provider": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", - "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", "dev": true, "requires": { "@babel/helper-compilation-targets": "^7.13.0", @@ -11105,185 +11341,195 @@ } } }, + "@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "requires": { + "@babel/types": "^7.16.7" + } + }, "@babel/helper-explode-assignable-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", - "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" } }, "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", + "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-get-function-arity": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", + "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" } }, "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.5.tgz", - "integrity": "sha512-UxUeEYPrqH1Q/k0yRku1JE7dyfyehNwT6SVkMHvYvPDv4+uu627VXBckVj891BO8ruKBkiDoGnZf4qPDD8abDQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", + "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" } }, "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" } }, "@babel/helper-module-transforms": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", - "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", + "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" } }, "@babel/helper-plugin-utils": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", - "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", "dev": true }, "@babel/helper-remap-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", - "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-wrap-function": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" } }, "@babel/helper-replace-supers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", - "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/helper-simple-access": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", - "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", + "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" } }, "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", - "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.0" } }, "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.16.7" } }, "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/helper-validator-option": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", - "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", "dev": true }, "@babel/helper-wrap-function": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", - "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" } }, "@babel/helpers": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", - "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", + "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", "dev": true, "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" } }, "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, @@ -11341,178 +11587,187 @@ } }, "@babel/parser": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.6.tgz", - "integrity": "sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ==", + "version": "7.16.12", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz", + "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==", "dev": true }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", + "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.16.7" + } + }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", + "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", + "@babel/plugin-proposal-optional-chaining": "^7.16.7" } }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.5.tgz", - "integrity": "sha512-tbD/CG3l43FIXxmu4a7RBe4zH7MLJ+S/lFowPFO7HetS2hyOZ/0nnnznegDuzFzfkyQYTxqdTH/hKmuBngaDAA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", - "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-proposal-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", - "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", + "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", - "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", + "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" } }, "@babel/plugin-proposal-export-namespace-from": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", - "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", + "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", - "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", - "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", + "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" } }, "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", - "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", + "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" } }, "@babel/plugin-proposal-numeric-separator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", - "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", + "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.5.tgz", - "integrity": "sha512-VzMyY6PWNPPT3pxc5hi9LloKNr4SSrVCg7Yr6aZpW4Ym07r7KqSU/QXYwjXLVxqwSv0t/XSXkFoKBPUkZ8vb2A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", + "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", "dev": true, "requires": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/compat-data": "^7.16.4", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.14.5" + "@babel/plugin-transform-parameters": "^7.16.7" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", - "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-optional-chaining": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", - "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", + "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" } }, "@babel/plugin-proposal-private-methods": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", - "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", + "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-class-features-plugin": "^7.16.10", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-proposal-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", + "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-create-class-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", - "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-syntax-async-generators": { @@ -11642,55 +11897,56 @@ } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", - "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", - "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-remap-async-to-generator": "^7.14.5" + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", - "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", - "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-classes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", - "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", "globals": "^11.1.0" }, "dependencies": { @@ -11703,210 +11959,211 @@ } }, "@babel/plugin-transform-computed-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", - "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-destructuring": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.5.tgz", - "integrity": "sha512-wU9tYisEbRMxqDezKUqC9GleLycCRoUsai9ddlsq54r8QRLaeEhc+d+9DqCG+kV9W2GgQjTZESPTpn5bAFMDww==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", + "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", - "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", - "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", - "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-for-of": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", - "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", - "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", - "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", - "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", + "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", - "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", - "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", + "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", - "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", + "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", - "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.5.tgz", - "integrity": "sha512-+Xe5+6MWFo311U8SchgeX5c1+lJM+eZDBZgD+tvXu9VVQPXwwVzeManMMjYX6xw2HczngfOSZjoFYKwdeB/Jvw==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.16.7" } }, "@babel/plugin-transform-new-target": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", - "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-object-super": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", - "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-replace-supers": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" } }, "@babel/plugin-transform-parameters": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", - "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-property-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", - "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", + "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-regenerator": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", - "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", + "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", "dev": true, "requires": { "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", - "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", + "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-runtime": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.14.5.tgz", - "integrity": "sha512-fPMBhh1AV8ZyneiCIA+wYYUH1arzlXR1UMcApjvchDhfKxhy2r2lReJv8uHEyihi4IFIGlr1Pdx7S5fkESDQsg==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz", + "integrity": "sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", "semver": "^6.3.0" }, "dependencies": { @@ -11919,96 +12176,97 @@ } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", - "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-spread": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", - "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", - "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-template-literals": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", - "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", - "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-unicode-escapes": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", - "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", + "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", - "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", "dev": true, "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" } }, "@babel/preset-env": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.5.tgz", - "integrity": "sha512-ci6TsS0bjrdPpWGnQ+m4f+JSSzDKlckqKIJJt9UZ/+g7Zz9k0N8lYU8IeLg/01o2h8LyNZDMLGgRLDTxpudLsA==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.14.5", - "@babel/helper-compilation-targets": "^7.14.5", - "@babel/helper-plugin-utils": "^7.14.5", - "@babel/helper-validator-option": "^7.14.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-async-generator-functions": "^7.14.5", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-proposal-class-static-block": "^7.14.5", - "@babel/plugin-proposal-dynamic-import": "^7.14.5", - "@babel/plugin-proposal-export-namespace-from": "^7.14.5", - "@babel/plugin-proposal-json-strings": "^7.14.5", - "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", - "@babel/plugin-proposal-numeric-separator": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.5", - "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", - "@babel/plugin-proposal-optional-chaining": "^7.14.5", - "@babel/plugin-proposal-private-methods": "^7.14.5", - "@babel/plugin-proposal-private-property-in-object": "^7.14.5", - "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "version": "7.16.11", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", + "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.16.8", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-option": "^7.16.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-async-generator-functions": "^7.16.8", + "@babel/plugin-proposal-class-properties": "^7.16.7", + "@babel/plugin-proposal-class-static-block": "^7.16.7", + "@babel/plugin-proposal-dynamic-import": "^7.16.7", + "@babel/plugin-proposal-export-namespace-from": "^7.16.7", + "@babel/plugin-proposal-json-strings": "^7.16.7", + "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", + "@babel/plugin-proposal-numeric-separator": "^7.16.7", + "@babel/plugin-proposal-object-rest-spread": "^7.16.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", + "@babel/plugin-proposal-optional-chaining": "^7.16.7", + "@babel/plugin-proposal-private-methods": "^7.16.11", + "@babel/plugin-proposal-private-property-in-object": "^7.16.7", + "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", @@ -12023,44 +12281,44 @@ "@babel/plugin-syntax-optional-chaining": "^7.8.3", "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.14.5", - "@babel/plugin-transform-async-to-generator": "^7.14.5", - "@babel/plugin-transform-block-scoped-functions": "^7.14.5", - "@babel/plugin-transform-block-scoping": "^7.14.5", - "@babel/plugin-transform-classes": "^7.14.5", - "@babel/plugin-transform-computed-properties": "^7.14.5", - "@babel/plugin-transform-destructuring": "^7.14.5", - "@babel/plugin-transform-dotall-regex": "^7.14.5", - "@babel/plugin-transform-duplicate-keys": "^7.14.5", - "@babel/plugin-transform-exponentiation-operator": "^7.14.5", - "@babel/plugin-transform-for-of": "^7.14.5", - "@babel/plugin-transform-function-name": "^7.14.5", - "@babel/plugin-transform-literals": "^7.14.5", - "@babel/plugin-transform-member-expression-literals": "^7.14.5", - "@babel/plugin-transform-modules-amd": "^7.14.5", - "@babel/plugin-transform-modules-commonjs": "^7.14.5", - "@babel/plugin-transform-modules-systemjs": "^7.14.5", - "@babel/plugin-transform-modules-umd": "^7.14.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.5", - "@babel/plugin-transform-new-target": "^7.14.5", - "@babel/plugin-transform-object-super": "^7.14.5", - "@babel/plugin-transform-parameters": "^7.14.5", - "@babel/plugin-transform-property-literals": "^7.14.5", - "@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.5", - "@babel/plugin-transform-sticky-regex": "^7.14.5", - "@babel/plugin-transform-template-literals": "^7.14.5", - "@babel/plugin-transform-typeof-symbol": "^7.14.5", - "@babel/plugin-transform-unicode-escapes": "^7.14.5", - "@babel/plugin-transform-unicode-regex": "^7.14.5", - "@babel/preset-modules": "^0.1.4", - "@babel/types": "^7.14.5", - "babel-plugin-polyfill-corejs2": "^0.2.2", - "babel-plugin-polyfill-corejs3": "^0.2.2", - "babel-plugin-polyfill-regenerator": "^0.2.2", - "core-js-compat": "^3.14.0", + "@babel/plugin-transform-arrow-functions": "^7.16.7", + "@babel/plugin-transform-async-to-generator": "^7.16.8", + "@babel/plugin-transform-block-scoped-functions": "^7.16.7", + "@babel/plugin-transform-block-scoping": "^7.16.7", + "@babel/plugin-transform-classes": "^7.16.7", + "@babel/plugin-transform-computed-properties": "^7.16.7", + "@babel/plugin-transform-destructuring": "^7.16.7", + "@babel/plugin-transform-dotall-regex": "^7.16.7", + "@babel/plugin-transform-duplicate-keys": "^7.16.7", + "@babel/plugin-transform-exponentiation-operator": "^7.16.7", + "@babel/plugin-transform-for-of": "^7.16.7", + "@babel/plugin-transform-function-name": "^7.16.7", + "@babel/plugin-transform-literals": "^7.16.7", + "@babel/plugin-transform-member-expression-literals": "^7.16.7", + "@babel/plugin-transform-modules-amd": "^7.16.7", + "@babel/plugin-transform-modules-commonjs": "^7.16.8", + "@babel/plugin-transform-modules-systemjs": "^7.16.7", + "@babel/plugin-transform-modules-umd": "^7.16.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", + "@babel/plugin-transform-new-target": "^7.16.7", + "@babel/plugin-transform-object-super": "^7.16.7", + "@babel/plugin-transform-parameters": "^7.16.7", + "@babel/plugin-transform-property-literals": "^7.16.7", + "@babel/plugin-transform-regenerator": "^7.16.7", + "@babel/plugin-transform-reserved-words": "^7.16.7", + "@babel/plugin-transform-shorthand-properties": "^7.16.7", + "@babel/plugin-transform-spread": "^7.16.7", + "@babel/plugin-transform-sticky-regex": "^7.16.7", + "@babel/plugin-transform-template-literals": "^7.16.7", + "@babel/plugin-transform-typeof-symbol": "^7.16.7", + "@babel/plugin-transform-unicode-escapes": "^7.16.7", + "@babel/plugin-transform-unicode-regex": "^7.16.7", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.16.8", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "core-js-compat": "^3.20.2", "semver": "^6.3.0" }, "dependencies": { @@ -12073,9 +12331,9 @@ } }, "@babel/preset-modules": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", - "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -12086,60 +12344,61 @@ } }, "@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", + "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", "dev": true, "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" }, "dependencies": { "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "requires": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.7" } } } }, "@babel/traverse": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.5.tgz", - "integrity": "sha512-G3BiS15vevepdmFqmUc9X+64y0viZYygubAMO8SvBmKARuF6CPSZtH4Ng9vi/lrWlZFGe3FWdXNy835akH8Glg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.14.5", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz", + "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.16.8", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.16.10", + "@babel/types": "^7.16.8", "debug": "^4.1.0", "globals": "^11.1.0" }, "dependencies": { "@babel/code-frame": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", - "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "requires": { - "@babel/highlight": "^7.14.5" + "@babel/highlight": "^7.16.7" } }, "globals": { @@ -12151,12 +12410,12 @@ } }, "@babel/types": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", - "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "version": "7.16.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", + "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.14.5", + "@babel/helper-validator-identifier": "^7.16.7", "to-fast-properties": "^2.0.0" } }, @@ -12176,9 +12435,9 @@ } }, "@discoveryjs/json-ext": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.3.tgz", - "integrity": "sha512-Fxt+AfXgjMoin2maPIYzFZnQjAXjAL0PHscM5pRTtatFqB+vZxAM9tLp2Optnuw3QOQC40jTNeGYFOMvyf7v9g==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", + "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", "dev": true }, "@eslint/eslintrc": { @@ -12242,9 +12501,9 @@ } }, "@trysound/sax": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", - "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true }, "@turf/area": { @@ -12430,9 +12689,9 @@ } }, "@types/babel__core": { - "version": "7.1.14", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", - "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "version": "7.1.18", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", + "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -12443,18 +12702,18 @@ } }, "@types/babel__generator": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", - "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "version": "7.6.4", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", + "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", "dev": true, "requires": { "@babel/types": "^7.0.0" } }, "@types/babel__template": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", - "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", "dev": true, "requires": { "@babel/parser": "^7.1.0", @@ -12462,18 +12721,37 @@ } }, "@types/babel__traverse": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", - "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", "dev": true, "requires": { "@babel/types": "^7.3.0" } }, + "@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-x8xEbfTtcv5uyQDrBXKg9Beo5QhTPqO4vM0uq4iU27/nhyRRWNEMKHjxvAb0WDvp2Mnt4Sw0jKmIi5yQF/k2Ag==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.5.tgz", + "integrity": "sha512-NEzjkGGpbs9S9fgC4abuBvTpVwE3i+Acu9BBod3PUyjDVZcNsGx61b8r2PphR61QGPnn0JHVs5ey6/I4eTrkxw==", "dev": true, "requires": { "@types/node": "*", @@ -12488,6 +12766,25 @@ } } }, + "@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, "@types/eslint": { "version": "7.2.10", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", @@ -12509,11 +12806,34 @@ } }, "@types/estree": { - "version": "0.0.47", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", - "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", + "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", "dev": true }, + "@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.28", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", + "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, "@types/glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", @@ -12525,9 +12845,9 @@ } }, "@types/http-proxy": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.7.tgz", - "integrity": "sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==", + "version": "1.17.8", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", + "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", "dev": true, "requires": { "@types/node": "*" @@ -12543,27 +12863,27 @@ } }, "@types/imagemin-gifsicle": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.0.tgz", - "integrity": "sha512-RVFQZhPm/6vLC8wDvzHa34ZDrJECqmDV4XBS99AEk2ObyV4pcLQwObGYlmBv6fi9AtRLHf8mnKGczIHtF77u7w==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.1.tgz", + "integrity": "sha512-kUz6sUh0P95JOS0RGEaaemWUrASuw+dLsWIveK2UZJx74id/B9epgblMkCk/r5MjUWbZ83wFvacG5Rb/f97gyA==", "dev": true, "requires": { "@types/imagemin": "*" } }, "@types/imagemin-mozjpeg": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.0.tgz", - "integrity": "sha512-sR2nEZOrlbgnmVgG+lXetZOvhgtctLe1hBfvySnPnxDd2pOon9mMPq7SHFI89VZT1AXvFgRs8w6X8ik8potpgA==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.1.tgz", + "integrity": "sha512-kMQWEoKxxhlnH4POI3qfW9DjXlQfi80ux3l2b3j5R3eudSCoUIzKQLkfMjNJ6eMYnMWBcB+rfQOWqIzdIwFGKw==", "dev": true, "requires": { "@types/imagemin": "*" } }, "@types/imagemin-optipng": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.0.tgz", - "integrity": "sha512-Qn4gTV1fpPG2WIsUIl10yi2prudOuDIx+D+O0H3aKZRcTCwpMjszBVeRWUqkhG5wADhWO4giLut1sFNr3H2XIQ==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz", + "integrity": "sha512-XCM/3q+HUL7v4zOqMI+dJ5dTxT+MUukY9KU49DSnYb/4yWtSMHJyADP+WHSMVzTR63J2ZvfUOzSilzBNEQW78g==", "dev": true, "requires": { "@types/imagemin": "*" @@ -12585,6 +12905,12 @@ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, + "@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, "@types/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", @@ -12603,18 +12929,67 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, "@types/retry": { "version": "0.12.1", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", "dev": true }, + "@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@types/svgo": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.5.tgz", "integrity": "sha512-y9Pw8IK50OqFRDpdI9Is29KlWiENVW9FDvlTmGHelvTfR2brYFJbsClvulZfeq6YKacFrDsG9a39w0kJZdHLaw==", "dev": true }, + "@types/ws": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", + "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@vue/component-compiler-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", @@ -12651,171 +13026,171 @@ } }, "@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "requires": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, "@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, "@webpack-cli/configtest": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.4.tgz", - "integrity": "sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", + "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", "dev": true, "requires": {} }, "@webpack-cli/info": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.3.0.tgz", - "integrity": "sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", + "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", "dev": true, "requires": { "envinfo": "^7.7.3" } }, "@webpack-cli/serve": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.5.1.tgz", - "integrity": "sha512-4vSVUiOPJLmr45S8rMGy7WDvpWxfFxfP/Qx/cxZFCfvoypTYpPPL1X8VIZMe0WTA+Jr7blUxwUSEZNkjoMTgSw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", + "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", "dev": true, "requires": {} }, @@ -12886,6 +13261,35 @@ "uri-js": "^4.2.2" } }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -12893,12 +13297,6 @@ "dev": true, "requires": {} }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -13049,23 +13447,31 @@ "dev": true }, "autoprefixer": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.6.tgz", - "integrity": "sha512-8lChSmdU6dCNMCQopIf4Pe5kipkAGj/fvTMslCsih0uHpOrXOPUEVOmYMMqmw3cekQkSD7EhIeuYl5y0BLdKqg==", + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz", + "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==", "dev": true, "requires": { - "browserslist": "^4.16.6", - "caniuse-lite": "^1.0.30001230", - "colorette": "^1.2.2", - "fraction.js": "^4.1.1", + "browserslist": "^4.19.1", + "caniuse-lite": "^1.0.30001297", + "fraction.js": "^4.1.2", "normalize-range": "^0.1.2", - "postcss-value-parser": "^4.1.0" + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + } } }, "babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "version": "8.2.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", + "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", "dev": true, "requires": { "find-cache-dir": "^3.3.1", @@ -13117,13 +13523,13 @@ } }, "babel-plugin-polyfill-corejs2": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", - "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", "dev": true, "requires": { "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.2.2", + "@babel/helper-define-polyfill-provider": "^0.3.1", "semver": "^6.1.1" }, "dependencies": { @@ -13136,22 +13542,22 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", - "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz", + "integrity": "sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.2", - "core-js-compat": "^3.14.0" + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.20.0" } }, "babel-plugin-polyfill-regenerator": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", - "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", "dev": true, "requires": { - "@babel/helper-define-polyfill-provider": "^0.2.2" + "@babel/helper-define-polyfill-provider": "^0.3.1" } }, "balanced-match": { @@ -13197,27 +13603,27 @@ "dev": true }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", "dev": true, "requires": { - "bytes": "3.1.0", + "bytes": "3.1.1", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" }, "dependencies": { "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", "dev": true }, "debug": { @@ -13375,16 +13781,24 @@ } }, "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + } } }, "buffer": { @@ -13466,15 +13880,15 @@ } }, "caniuse-lite": { - "version": "1.0.30001239", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001239.tgz", - "integrity": "sha512-cyBkXJDMeI4wthy8xJ2FvDU6+0dtcZSJW3voUF8+e9f1bBeuvyZfc3PNbkOETyhbR+dGCPzn9E7MA3iwzusOhQ==", + "version": "1.0.30001301", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz", + "integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==", "dev": true }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -13488,19 +13902,19 @@ "dev": true }, "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "dev": true, "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.0" } }, "chrome-trace-event": { @@ -13603,15 +14017,15 @@ "dev": true }, "colord": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.0.1.tgz", - "integrity": "sha512-vm5YpaWamD0Ov6TSG0GGmUIwstrWcfKQV/h2CmbR7PbNu41+qdB5PW9lpzhjedrpm08uuYvcXi0Oel1RLZIJuA==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", "dev": true }, "colorette": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.3.0.tgz", - "integrity": "sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, "colors": { @@ -13740,12 +14154,20 @@ "dev": true }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "content-type": { @@ -13764,9 +14186,9 @@ } }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", "dev": true }, "cookie-signature": { @@ -13776,12 +14198,12 @@ "dev": true }, "core-js-compat": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.0.tgz", - "integrity": "sha512-8X6lWsG+s7IfOKzV93a7fRYfWRZobOfjw5V5rrq43Vh/W+V6qYxl7Akalsvgab4PFT/4L/pjQbdBUEM36NXKrw==", + "version": "3.20.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.3.tgz", + "integrity": "sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw==", "dev": true, "requires": { - "browserslist": "^4.16.6", + "browserslist": "^4.19.1", "semver": "7.0.0" }, "dependencies": { @@ -13800,9 +14222,9 @@ "dev": true }, "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, "requires": { "@types/parse-json": "^4.0.0", @@ -13924,16 +14346,10 @@ } } }, - "css-color-names": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", - "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", - "dev": true - }, "css-declaration-sorter": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.3.tgz", - "integrity": "sha512-52P95mvW1SMzuRZegvpluT6yEv0FqQusydKQPZsNN5Q7hh8EwQvN8E2nwuJ16BBvNN6LcoIZXu/Bk58DAhrrxw==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", + "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", "dev": true, "requires": { "timsort": "^0.3.0" @@ -13984,22 +14400,22 @@ } }, "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", "dev": true, "requires": { "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, "dependencies": { "domhandler": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", - "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -14026,9 +14442,9 @@ } }, "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true }, "cssesc": { @@ -14038,57 +14454,57 @@ "dev": true }, "cssnano": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.6.tgz", - "integrity": "sha512-NiaLH/7yqGksFGsFNvSRe2IV/qmEBAeDE64dYeD8OBrgp6lE8YoMeQJMtsv5ijo6MPyhuoOvFhI94reahBRDkw==", + "version": "5.0.16", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.16.tgz", + "integrity": "sha512-ryhRI9/B9VFCwPbb1z60LLK5/ldoExi7nwdnJzpkLZkm2/r7j2X3jfY+ZvDVJhC/0fPZlrAguYdHNFg0iglPKQ==", "dev": true, "requires": { - "cosmiconfig": "^7.0.0", - "cssnano-preset-default": "^5.1.3", - "is-resolvable": "^1.1.0" + "cssnano-preset-default": "^5.1.11", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" } }, "cssnano-preset-default": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", - "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", + "version": "5.1.11", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.11.tgz", + "integrity": "sha512-ETet5hqHxmzQq2ynXMOQofKuLm7VOjMiOB7E2zdtm/hSeCKlD9fabzIUV4GoPcRyJRHi+4kGf0vsfGYbQ4nmPw==", "dev": true, "requires": { "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^2.0.1", - "postcss-calc": "^8.0.0", - "postcss-colormin": "^5.2.0", - "postcss-convert-values": "^5.0.1", - "postcss-discard-comments": "^5.0.1", - "postcss-discard-duplicates": "^5.0.1", - "postcss-discard-empty": "^5.0.1", - "postcss-discard-overridden": "^5.0.1", - "postcss-merge-longhand": "^5.0.2", - "postcss-merge-rules": "^5.0.2", - "postcss-minify-font-values": "^5.0.1", - "postcss-minify-gradients": "^5.0.1", - "postcss-minify-params": "^5.0.1", - "postcss-minify-selectors": "^5.1.0", - "postcss-normalize-charset": "^5.0.1", - "postcss-normalize-display-values": "^5.0.1", - "postcss-normalize-positions": "^5.0.1", - "postcss-normalize-repeat-style": "^5.0.1", - "postcss-normalize-string": "^5.0.1", - "postcss-normalize-timing-functions": "^5.0.1", - "postcss-normalize-unicode": "^5.0.1", - "postcss-normalize-url": "^5.0.2", - "postcss-normalize-whitespace": "^5.0.1", - "postcss-ordered-values": "^5.0.2", - "postcss-reduce-initial": "^5.0.1", - "postcss-reduce-transforms": "^5.0.1", - "postcss-svgo": "^5.0.2", - "postcss-unique-selectors": "^5.0.1" + "cssnano-utils": "^3.0.1", + "postcss-calc": "^8.2.0", + "postcss-colormin": "^5.2.4", + "postcss-convert-values": "^5.0.3", + "postcss-discard-comments": "^5.0.2", + "postcss-discard-duplicates": "^5.0.2", + "postcss-discard-empty": "^5.0.2", + "postcss-discard-overridden": "^5.0.3", + "postcss-merge-longhand": "^5.0.5", + "postcss-merge-rules": "^5.0.5", + "postcss-minify-font-values": "^5.0.3", + "postcss-minify-gradients": "^5.0.5", + "postcss-minify-params": "^5.0.4", + "postcss-minify-selectors": "^5.1.2", + "postcss-normalize-charset": "^5.0.2", + "postcss-normalize-display-values": "^5.0.2", + "postcss-normalize-positions": "^5.0.3", + "postcss-normalize-repeat-style": "^5.0.3", + "postcss-normalize-string": "^5.0.3", + "postcss-normalize-timing-functions": "^5.0.2", + "postcss-normalize-unicode": "^5.0.3", + "postcss-normalize-url": "^5.0.4", + "postcss-normalize-whitespace": "^5.0.3", + "postcss-ordered-values": "^5.0.4", + "postcss-reduce-initial": "^5.0.2", + "postcss-reduce-transforms": "^5.0.3", + "postcss-svgo": "^5.0.3", + "postcss-unique-selectors": "^5.0.3" } }, "cssnano-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", - "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.1.tgz", + "integrity": "sha512-VNCHL364lh++/ono+S3j9NlUK+d97KNkxI77NlqZU2W3xd2/qmyN61dsa47pTpb55zuU4G4lI7qFjAXZJH1OAQ==", "dev": true, "requires": {} }, @@ -14191,23 +14607,23 @@ }, "dependencies": { "globby": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", "slash": "^3.0.0" } }, "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true } } @@ -14346,9 +14762,9 @@ } }, "domutils": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.6.0.tgz", - "integrity": "sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { "dom-serializer": "^1.0.1", @@ -14396,9 +14812,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.730", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.730.tgz", - "integrity": "sha512-1Tr3h09wXhmqXnvDyrRe6MFgTeU0ZXy3+rMJWTrOHh/HNesWwBBrKnMxRJWZ86dzs8qQdw2c7ZE1/qeGHygImA==", + "version": "1.4.51", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.51.tgz", + "integrity": "sha512-JNEmcYl3mk1tGQmy0EvL5eik/CKSBuzAyGP0QFdG6LIgxQe3II0BL1m2zKc2MZMf3uGqHWE1TFddJML0RpjSHQ==", "dev": true }, "elliptic": { @@ -14443,9 +14859,9 @@ "dev": true }, "enhanced-resolve": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.2.tgz", - "integrity": "sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -14483,9 +14899,9 @@ } }, "es-module-lexer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", - "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, "es5-ext": { @@ -14881,17 +15297,17 @@ } }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", "dev": true, "requires": { "accepts": "~1.3.7", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.4.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", @@ -14905,13 +15321,13 @@ "on-finished": "~2.3.0", "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", @@ -14938,6 +15354,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true } } }, @@ -14965,17 +15387,16 @@ "dev": true }, "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" } }, "fast-json-stable-stringify": { @@ -15090,9 +15511,9 @@ } }, "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, "requires": { "commondir": "^1.0.1", @@ -15139,9 +15560,9 @@ "dev": true }, "fraction.js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", - "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz", + "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==", "dev": true }, "fresh": { @@ -15239,9 +15660,9 @@ "dev": true }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -15301,9 +15722,9 @@ } }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, "growly": { @@ -15389,12 +15810,6 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, - "hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -15418,18 +15833,6 @@ "wbuf": "^1.1.0" } }, - "hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", - "dev": true - }, - "hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", - "dev": true - }, "html-entities": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", @@ -15524,30 +15927,22 @@ "dev": true }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "dev": true, "requires": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } + "toidentifier": "1.0.1" } }, "http-parser-js": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", - "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", + "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", "dev": true }, "http-proxy": { @@ -15562,12 +15957,12 @@ } }, "http-proxy-middleware": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.1.tgz", - "integrity": "sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.2.tgz", + "integrity": "sha512-XtmDN5w+vdFTBZaYhdJAbMqn0DP/EhkUaAeo963mojwpKMMbw6nivtFKw07D7DDOH745L5k0VL0P8KRYNEVF/g==", "dev": true, "requires": { - "@types/http-proxy": "^1.17.5", + "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", "is-glob": "^4.0.1", "is-plain-obj": "^3.0.0", @@ -15659,15 +16054,6 @@ } } }, - "import-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", - "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", - "dev": true, - "requires": { - "import-from": "^3.0.0" - } - }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -15678,27 +16064,10 @@ "resolve-from": "^4.0.0" } }, - "import-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "requires": { "pkg-dir": "^4.2.0", @@ -15733,26 +16102,6 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "internal-ip": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-6.2.0.tgz", - "integrity": "sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==", - "dev": true, - "requires": { - "default-gateway": "^6.0.0", - "ipaddr.js": "^1.9.1", - "is-ip": "^3.1.0", - "p-event": "^4.2.0" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - } - } - }, "interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", @@ -15765,24 +16114,12 @@ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", "dev": true }, - "ip-regex": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz", - "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==", - "dev": true - }, "ipaddr.js": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", "dev": true }, - "is-absolute-url": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", - "dev": true - }, "is-arguments": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", @@ -15812,32 +16149,10 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", - "dev": true, - "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - }, - "dependencies": { - "css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", - "dev": true - } - } - }, "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "requires": { "has": "^1.0.3" @@ -15875,15 +16190,6 @@ "is-extglob": "^2.1.1" } }, - "is-ip": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", - "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", - "dev": true, - "requires": { - "ip-regex": "^4.0.0" - } - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -15926,16 +16232,10 @@ "has-symbols": "^1.0.2" } }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "is-wsl": { @@ -15966,9 +16266,9 @@ "dev": true }, "jest-worker": { - "version": "27.0.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.0.2.tgz", - "integrity": "sha512-EoBdilOTTyOgmHXtw/cPc+ZrCA0KJMrkXzkrPGNwLmnvvlN1nj7MPrxpT7m+otSv2e1TLaVffzDnE/LB14zJMg==", + "version": "27.4.6", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", + "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", "dev": true, "requires": { "@types/node": "*", @@ -16065,69 +16365,77 @@ "dev": true }, "klona": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.4.tgz", - "integrity": "sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", + "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", "dev": true }, "laravel-mix": { - "version": "6.0.34", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.34.tgz", - "integrity": "sha512-Je9ksXGCk9ytD+OMsgir043sERPlROMv1Lw5DOvRg2599lT9jWMHQn9x7Hn83HfmFw54mc6tmPLNhSU/SdI7jw==", + "version": "6.0.41", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.41.tgz", + "integrity": "sha512-LA6ep2kUritCzvePgza98Ge2wmlntYSmd1mJx0BwRqyP6x8vMbh9VnMesTm5ezZql83mXI+hFumRCEBxzAnZaQ==", "dev": true, "requires": { - "@babel/core": "^7.14.5", - "@babel/plugin-proposal-object-rest-spread": "^7.14.5", + "@babel/core": "^7.15.8", + "@babel/plugin-proposal-object-rest-spread": "^7.15.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.14.5", - "@babel/preset-env": "^7.14.5", - "@babel/runtime": "^7.14.5", - "@types/babel__core": "^7.1.14", - "@types/clean-css": "^4.2.4", - "@types/imagemin-gifsicle": "^7.0.0", - "@types/imagemin-mozjpeg": "^8.0.0", - "@types/imagemin-optipng": "^5.2.0", + "@babel/plugin-transform-runtime": "^7.15.8", + "@babel/preset-env": "^7.15.8", + "@babel/runtime": "^7.15.4", + "@types/babel__core": "^7.1.16", + "@types/clean-css": "^4.2.5", + "@types/imagemin-gifsicle": "^7.0.1", + "@types/imagemin-mozjpeg": "^8.0.1", + "@types/imagemin-optipng": "^5.2.1", "@types/imagemin-svgo": "^8.0.0", - "autoprefixer": "^10.2.6", - "babel-loader": "^8.2.2", - "chalk": "^4.1.1", - "chokidar": "^3.5.1", + "autoprefixer": "^10.4.0", + "babel-loader": "^8.2.3", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", "clean-css": "^4.2.3 || ^5.1.2", "cli-table3": "^0.6.0", "collect.js": "^4.28.5", "commander": "^7.2.0", "concat": "^1.0.3", "css-loader": "^5.2.6", - "cssnano": "^5.0.6", + "cssnano": "^5.0.8", "dotenv": "^10.0.0", "dotenv-expand": "^5.1.0", "file-loader": "^6.2.0", "fs-extra": "^10.0.0", - "glob": "^7.1.7", + "glob": "^7.2.0", "html-loader": "^1.3.2", "imagemin": "^7.0.1", "img-loader": "^4.0.0", "lodash": "^4.17.21", "md5": "^2.3.0", - "mini-css-extract-plugin": "^1.6.0", + "mini-css-extract-plugin": "^1.6.2", "node-libs-browser": "^2.2.1", - "postcss-load-config": "^3.0.1", - "postcss-loader": "^6.1.0", + "postcss-load-config": "^3.1.0", + "postcss-loader": "^6.2.0", "semver": "^7.3.5", "strip-ansi": "^6.0.0", "style-loader": "^2.0.0", - "terser": "^5.7.0", - "terser-webpack-plugin": "^5.1.3", + "terser": "^5.9.0", + "terser-webpack-plugin": "^5.2.4", "vue-style-loader": "^4.1.3", - "webpack": "^5.38.1", - "webpack-cli": "^4.7.2", - "webpack-dev-server": "4.1.1", + "webpack": "^5.60.0", + "webpack-cli": "^4.9.1", + "webpack-dev-server": "^4.7.3", "webpack-merge": "^5.8.0", - "webpack-notifier": "^1.13.0", + "webpack-notifier": "^1.14.1", "webpackbar": "^5.0.0-3", - "yargs": "^17.0.1" + "yargs": "^17.2.1" }, "dependencies": { + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "optional": true, + "peer": true + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -16146,6 +16454,31 @@ "lru-cache": "^6.0.0" } }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "terser": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -16172,10 +16505,16 @@ "type-check": "~0.4.0" } }, + "lilconfig": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", + "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", + "dev": true + }, "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, "loader-runner": { @@ -16321,9 +16660,9 @@ "dev": true }, "memfs": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.3.0.tgz", - "integrity": "sha512-BEE62uMfKOavX3iG7GYX43QJ+hAeeWnwIAuJ/R6q96jaMtiLzhsxHJC8B1L7fK7Pt/vXDRwb3SG/yBpNGDPqzg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", + "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", "dev": true, "requires": { "fs-monkey": "1.0.3" @@ -16426,9 +16765,9 @@ "dev": true }, "mini-css-extract-plugin": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.0.tgz", - "integrity": "sha512-nPFKI7NSy6uONUo9yn2hIfb9vyYvkFu95qki0e21DQ9uaqNKDP15DGpK0KnV6wDroWxPHtExrdEwx/yDQ8nVRw==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", + "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", "dev": true, "requires": { "loader-utils": "^2.0.0", @@ -16495,9 +16834,9 @@ "dev": true }, "nanoid": { - "version": "3.1.23", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", - "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "dev": true }, "natural-compare": { @@ -16547,9 +16886,9 @@ "dev": true }, "node-forge": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", - "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", + "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", "dev": true }, "node-libs-browser": { @@ -16615,12 +16954,6 @@ "lru-cache": "^6.0.0" } }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -16639,9 +16972,9 @@ } }, "node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, "normalize-path": { @@ -16657,9 +16990,9 @@ "dev": true }, "normalize-url": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.0.1.tgz", - "integrity": "sha512-VU4pzAuh7Kip71XEmO9aNREYAdMHFGTVj/i+CaTImS8x0i1d3jUZkXhqluy/PRgjPLMgsLQulYY3PJ/aSbSjpQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true }, "npm-run-path": { @@ -16760,9 +17093,9 @@ } }, "open": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.3.0.tgz", - "integrity": "sha512-7INcPWb1UcOwSQxAXTnBJ+FxVV4MPs/X++FWWBtgY69/J5lc+tCteMt/oFK1MnkyHC4VILLa9ntmwKTwDR4Q9w==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", "dev": true, "requires": { "define-lazy-prop": "^2.0.0", @@ -16790,21 +17123,6 @@ "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", "dev": true }, - "p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, - "requires": { - "p-timeout": "^3.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -16840,21 +17158,12 @@ }, "p-retry": { "version": "4.6.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", - "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", - "dev": true, - "requires": { - "@types/retry": "^0.12.0", - "retry": "^0.13.1" - } - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", + "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", "dev": true, "requires": { - "p-finally": "^1.0.0" + "@types/retry": "^0.12.0", + "retry": "^0.13.1" } }, "p-try": { @@ -17057,20 +17366,28 @@ } }, "postcss": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.5.tgz", - "integrity": "sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==", + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", + "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", "dev": true, "requires": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", - "source-map-js": "^0.6.2" + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.1" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + } } }, "postcss-calc": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", - "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.2.tgz", + "integrity": "sha512-B5R0UeB4zLJvxNt1FVCaDZULdzsKLPc6FhjFJ+xwFiq7VG4i9cuaJLxVjNtExNK8ocm3n2o4unXXLiVX1SCqxA==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.2", @@ -17078,72 +17395,72 @@ } }, "postcss-colormin": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", - "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.4.tgz", + "integrity": "sha512-rYlC5015aNqVQt/B6Cy156g7sH5tRUJGmT9xeagYthtKehetbKx7jHxhyLpulP4bs4vbp8u/B2rac0J7S7qPQg==", "dev": true, "requires": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", - "colord": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" } }, "postcss-convert-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", - "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.3.tgz", + "integrity": "sha512-fVkjHm2T0PSMqXUCIhHNWVGjhB9mHEWX2GboVs7j3iCgr6FpIl9c/IdXy0PHWZSQ9LFTRgmj98amxJE6KOnlsA==", "dev": true, "requires": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-discard-comments": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", - "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.2.tgz", + "integrity": "sha512-6VQ3pYTsJHEsN2Bic88Aa7J/Brn4Bv8j/rqaFQZkH+pcVkKYwxCIvoMQkykEW7fBjmofdTnQgcivt5CCBJhtrg==", "dev": true, "requires": {} }, "postcss-discard-duplicates": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", - "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz", + "integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==", "dev": true, "requires": {} }, "postcss-discard-empty": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", - "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.2.tgz", + "integrity": "sha512-SxBsbTjlsKUvZLL+dMrdWauuNZU8TBq5IOL/DHa6jBUSXFEwmDqeXRfTIK/FQpPTa8MJMxEHjSV3UbiuyLARPQ==", "dev": true, "requires": {} }, "postcss-discard-overridden": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", - "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.3.tgz", + "integrity": "sha512-yRTXknIZA4k8Yo4FiF1xbsLj/VBxfXEWxJNIrtIy6HC9KQ4xJxcPtoaaskh6QptCGrrcGnhKsTsENTRPZOBu4g==", "dev": true, "requires": {} }, "postcss-load-config": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.1.tgz", - "integrity": "sha512-/pDHe30UYZUD11IeG8GWx9lNtu1ToyTsZHnyy45B4Mrwr/Kb6NgYl7k753+05CJNKnjbwh4975amoPJ+TEjHNQ==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz", + "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==", "dev": true, "requires": { - "cosmiconfig": "^7.0.0", - "import-cwd": "^3.0.0" + "lilconfig": "^2.0.4", + "yaml": "^1.10.2" } }, "postcss-loader": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.1.0.tgz", - "integrity": "sha512-yA/cXBfACkthZNA2hQxOnaReVfQ6uLmvbEDQzNafpbK40URZJvP/28dL1DG174Gvz3ptkkHbbwDBCh+gXR94CA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", "dev": true, "requires": { "cosmiconfig": "^7.0.0", - "klona": "^2.0.4", + "klona": "^2.0.5", "semver": "^7.3.5" }, "dependencies": { @@ -17174,69 +17491,64 @@ } }, "postcss-merge-longhand": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", - "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.5.tgz", + "integrity": "sha512-R2BCPJJ/U2oh1uTWEYn9CcJ7MMcQ1iIbj9wfr2s/zHu5om5MP/ewKdaunpfJqR1WYzqCsgnXuRoVXPAzxdqy8g==", "dev": true, "requires": { - "css-color-names": "^1.0.1", - "postcss-value-parser": "^4.1.0", - "stylehacks": "^5.0.1" + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.0.2" } }, "postcss-merge-rules": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", - "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.5.tgz", + "integrity": "sha512-3Oa26/Pb9VOFVksJjFG45SNoe4nhGvJ2Uc6TlRimqF8uhfOCEhVCaJ3rvEat5UFOn2UZqTY5Da8dFgCh3Iq0Ug==", "dev": true, "requires": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", - "cssnano-utils": "^2.0.1", - "postcss-selector-parser": "^6.0.5", - "vendors": "^1.0.3" + "cssnano-utils": "^3.0.1", + "postcss-selector-parser": "^6.0.5" } }, "postcss-minify-font-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", - "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.3.tgz", + "integrity": "sha512-bC45rVzEwsLhv/cL1eCjoo2OOjbSk9I7HKFBYnBvtyuIZlf7uMipMATXtA0Fc3jwPo3wuPIW1jRJWKzflMh1sA==", "dev": true, "requires": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-minify-gradients": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", - "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.5.tgz", + "integrity": "sha512-/YjvXs8PepsoiZAIpjstOO4IHKwFAqYNqbA1yVdqklM84tbUUneh6omJxGlRlF3mi6K5Pa067Mg6IwqEnYC8Zg==", "dev": true, "requires": { - "cssnano-utils": "^2.0.1", - "is-color-stop": "^1.1.0", - "postcss-value-parser": "^4.1.0" + "colord": "^2.9.1", + "cssnano-utils": "^3.0.1", + "postcss-value-parser": "^4.2.0" } }, "postcss-minify-params": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", - "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.4.tgz", + "integrity": "sha512-Z0vjod9lRZEmEPfEmA2sCfjbfEEFKefMD3RDIQSUfXK4LpCyWkX1CniUgyNvnjJFLDPSxtgKzozhHhPHKoeGkg==", "dev": true, "requires": { - "alphanum-sort": "^1.0.2", - "browserslist": "^4.16.0", - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0", - "uniqs": "^2.0.0" + "browserslist": "^4.16.6", + "cssnano-utils": "^3.0.1", + "postcss-value-parser": "^4.2.0" } }, "postcss-minify-selectors": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", - "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.2.tgz", + "integrity": "sha512-gpn1nJDMCf3g32y/7kl+jsdamhiYT+/zmEt57RoT9GmzlixBNRPohI7k8UIHelLABhdLf3MSZhtM33xuH5eQOQ==", "dev": true, "requires": { - "alphanum-sort": "^1.0.2", "postcss-selector-parser": "^6.0.5" } }, @@ -17277,118 +17589,113 @@ } }, "postcss-normalize-charset": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", - "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.2.tgz", + "integrity": "sha512-fEMhYXzO8My+gC009qDc/3bgnFP8Fv1Ic8uw4ec4YTlhIOw63tGPk1YFd7fk9bZUf1DAbkhiL/QPWs9JLqdF2g==", "dev": true, "requires": {} }, "postcss-normalize-display-values": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", - "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", + "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", "dev": true, "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-positions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", - "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.3.tgz", + "integrity": "sha512-U+rmhjrNBvIGYqr/1tD4wXPFFMKUbXsYXvlUCzLi0tOCUS6LoeEAnmVXXJY/MEB/1CKZZwBSs2tmzGawcygVBA==", "dev": true, "requires": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-repeat-style": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", - "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.3.tgz", + "integrity": "sha512-uk1+xYx0AMbA3nLSNhbDrqbf/rx+Iuq5tVad2VNyaxxJzx79oGieJ6D9F6AfOL2GtiIbP7vTYlpYHtG+ERFXTg==", "dev": true, "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-string": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", - "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.3.tgz", + "integrity": "sha512-Mf2V4JbIDboNGQhW6xW0YREDiYXoX3WrD3EjKkjvnpAJ6W4qqjLnK/c9aioyVFaWWHVdP5zVRw/9DI5S3oLDFw==", "dev": true, "requires": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-timing-functions": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", - "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", + "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", "dev": true, "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-unicode": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", - "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.3.tgz", + "integrity": "sha512-uNC7BmS/7h6to2UWa4RFH8sOTzu2O9dVWPE/F9Vm9GdhONiD/c1kNaCLbmsFHlKWcEx7alNUChQ+jH/QAlqsQw==", "dev": true, "requires": { - "browserslist": "^4.16.0", - "postcss-value-parser": "^4.1.0" + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-url": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", - "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", + "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", "dev": true, "requires": { - "is-absolute-url": "^3.0.3", "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-whitespace": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", - "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.3.tgz", + "integrity": "sha512-333JWRnX655fSoUbufJ10HJop3c8mrpKkCCUnEmgz/Cb/QEtW+/TMZwDAUt4lnwqP6tCCk0x0b58jqvDgiQm/A==", "dev": true, "requires": { - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-ordered-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", - "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.4.tgz", + "integrity": "sha512-taKtGDZtyYUMVYkg+MuJeBUiTF6cGHZmo/qcW7ibvW79UlyKuSHbo6dpCIiqI+j9oJsXWzP+ovIxoyLDOeQFdw==", "dev": true, "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "cssnano-utils": "^3.0.1", + "postcss-value-parser": "^4.2.0" } }, "postcss-reduce-initial": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", - "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", + "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", "dev": true, "requires": { - "browserslist": "^4.16.0", + "browserslist": "^4.16.6", "caniuse-api": "^3.0.0" } }, "postcss-reduce-transforms": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", - "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.3.tgz", + "integrity": "sha512-yDnTUab5i7auHiNwdcL1f+pBnqQFf+7eC4cbC7D8Lc1FkvNZhtpkdad+9U4wDdFb84haupMf0rA/Zc5LcTe/3A==", "dev": true, "requires": { - "cssnano-utils": "^2.0.1", - "postcss-value-parser": "^4.1.0" + "postcss-value-parser": "^4.2.0" } }, "postcss-selector-parser": { @@ -17402,30 +17709,28 @@ } }, "postcss-svgo": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", - "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", + "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", "dev": true, "requires": { "postcss-value-parser": "^4.1.0", - "svgo": "^2.3.0" + "svgo": "^2.7.0" } }, "postcss-unique-selectors": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", - "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.3.tgz", + "integrity": "sha512-V5tX2hadSSn+miVCluuK1IDGy+7jAXSOfRZ2DQ+s/4uQZb/orDYBjH0CHgFrXsRw78p4QTuEFA9kI6C956UnHQ==", "dev": true, "requires": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5", - "uniqs": "^2.0.0" + "postcss-selector-parser": "^6.0.5" } }, "postcss-value-parser": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, "prelude-ls": { @@ -17523,9 +17828,9 @@ "dev": true }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", "dev": true }, "querystring": { @@ -17577,21 +17882,21 @@ "dev": true }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", "dev": true, "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.1", + "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, "dependencies": { "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", "dev": true } } @@ -17631,18 +17936,18 @@ } }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { "picomatch": "^2.2.1" } }, "rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", "dev": true, "requires": { "resolve": "^1.9.0" @@ -17655,18 +17960,18 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", - "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", + "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", "dev": true, "requires": { - "regenerate": "^1.4.0" + "regenerate": "^1.4.2" } }, "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, "regenerator-transform": { @@ -17700,17 +18005,17 @@ "dev": true }, "regexpu-core": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", - "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", + "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", "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": { @@ -17720,9 +18025,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.9", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", - "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", + "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -17767,13 +18072,14 @@ "dev": true }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-cwd": { @@ -17979,18 +18285,6 @@ "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", "dev": true }, - "rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", - "dev": true - }, - "rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", - "dev": true - }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -18115,12 +18409,12 @@ "dev": true }, "selfsigned": { - "version": "1.10.14", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", - "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz", + "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==", "dev": true, "requires": { - "node-forge": "^0.10.0" + "node-forge": "^1.2.0" } }, "semver": { @@ -18130,9 +18424,9 @@ "dev": true }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", "dev": true, "requires": { "debug": "2.6.9", @@ -18142,9 +18436,9 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", + "http-errors": "1.8.1", "mime": "1.6.0", - "ms": "2.1.1", + "ms": "2.1.3", "on-finished": "~2.3.0", "range-parser": "~1.2.1", "statuses": "~1.5.0" @@ -18168,17 +18462,17 @@ } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } }, "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -18241,15 +18535,15 @@ } }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", "dev": true, "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.17.1" + "send": "0.17.2" } }, "setimmediate": { @@ -18259,9 +18553,9 @@ "dev": true }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "sha.js": { @@ -18305,9 +18599,9 @@ "dev": true }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, "slash": { @@ -18328,13 +18622,13 @@ } }, "sockjs": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.21.tgz", - "integrity": "sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==", + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "requires": { "faye-websocket": "^0.11.3", - "uuid": "^3.4.0", + "uuid": "^8.3.2", "websocket-driver": "^0.7.4" } }, @@ -18351,9 +18645,9 @@ "dev": true }, "source-map-js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "dev": true }, "source-map-resolve": { @@ -18370,9 +18664,9 @@ } }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -18506,23 +18800,23 @@ } }, "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "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" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "strip-final-newline": { @@ -18548,12 +18842,12 @@ } }, "stylehacks": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", - "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.2.tgz", + "integrity": "sha512-114zeJdOpTrbQYRD4OU5UWJ99LKUaqCPJTU1HQ/n3q3BwmllFN8kHENaLnOeqVq6AhXrWfxHNZTl33iJ4oy3cQ==", "dev": true, "requires": { - "browserslist": "^4.16.0", + "browserslist": "^4.16.6", "postcss-selector-parser": "^6.0.4" } }, @@ -18566,19 +18860,33 @@ "has-flag": "^4.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "svgo": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.5.0.tgz", - "integrity": "sha512-FSdBOOo271VyF/qZnOn1PgwCdt1v4Dx0Sey+U1jgqm1vqRYjPGdip0RGrFW6ItwtkBB8rHgHk26dlVr0uCs82Q==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "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", + "picocolors": "^1.0.0", "stable": "^0.1.8" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + } } }, "table": { @@ -18616,64 +18924,62 @@ } }, "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, - "terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", + "terser-webpack-plugin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", + "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", "dev": true, "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "jest-worker": "^27.4.1", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1", + "terser": "^5.7.2" }, "dependencies": { + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "optional": true, + "peer": true + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.3.tgz", - "integrity": "sha512-cxGbMqr6+A2hrIB5ehFIF+F/iST5ZOxvOmy9zih9ySbP1C2oEWQSOUS+2SNBTjzx5xLKO4xnod9eywdfq1Nb9A==", - "dev": true, - "requires": { - "jest-worker": "^27.0.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.7.0" - }, - "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true + }, + "terser": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } } } }, @@ -18731,9 +19037,9 @@ } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, "tslib": { @@ -18780,37 +19086,31 @@ } }, "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true }, "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "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.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", - "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", - "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", - "dev": true - }, - "uniqs": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", "dev": true }, "universalify": { @@ -18896,9 +19196,9 @@ "dev": true }, "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, "v8-compile-cache": { @@ -18913,12 +19213,6 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, - "vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "dev": true - }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", @@ -19048,9 +19342,9 @@ "dev": true }, "watchpack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", - "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", @@ -19067,141 +19361,214 @@ } }, "webpack": { - "version": "5.39.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.39.1.tgz", - "integrity": "sha512-ulOvoNCh2PvTUa+zbpRuEb1VPeQnhxpnHleMPVVCq3QqnaFogjsLyps+o42OviQFoaGtTQYrUqDXu1QNkvUPzw==", + "version": "5.67.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.67.0.tgz", + "integrity": "sha512-LjFbfMh89xBDpUMgA1W9Ur6Rn/gnr2Cq1jjHFPo4v6a79/ypznSYbAyPgGhwsxBtMIaEmDD1oJoA7BEYw/Fbrw==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.47", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.2.1", + "@types/estree": "^0.0.50", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.4.1", + "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.4.0", + "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", - "graceful-fs": "^4.2.4", + "graceful-fs": "^4.2.9", "json-parse-better-errors": "^1.0.2", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", + "schema-utils": "^3.1.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.2.0", - "webpack-sources": "^2.3.0" + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.3" }, "dependencies": { "acorn": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.2.4.tgz", - "integrity": "sha512-Ibt84YwBDDA890eDiDCEqcbwvHlBvzzDkU2cGBBDDI1QWT12jTiXIOn2CIw5KK4i6N5Z2HUxwYjzriDyqaqqZg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "requires": {} }, "webpack-sources": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.0.tgz", - "integrity": "sha512-WyOdtwSvOML1kbgtXbTDnEW0jkJ7hZr/bDByIwszhWd/4XX1A3XMkrbFMsuH4+/MfLlZCUzlAdg4r7jaGKEIgQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true } } }, "webpack-cli": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.7.2.tgz", - "integrity": "sha512-mEoLmnmOIZQNiRl0ebnjzQ74Hk0iKS5SiEEnpq3dRezoyR3yPaeQZCMCe+db4524pj1Pd5ghZXjT41KLzIhSLw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", "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.1", - "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", "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" } }, "webpack-dev-middleware": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.2.1.tgz", - "integrity": "sha512-Kx1X+36Rn9JaZcQMrJ7qN3PMAuKmEDD9ZISjUj3Cgq4A6PtwYsC4mpaKotSRYH3iOF6HsUa8viHKS59FlyVifQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", + "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", "dev": true, "requires": { "colorette": "^2.0.10", "memfs": "^3.2.2", "mime-types": "^2.1.31", "range-parser": "^1.2.1", - "schema-utils": "^3.1.0" + "schema-utils": "^4.0.0" }, "dependencies": { - "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } } } }, "webpack-dev-server": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.1.1.tgz", - "integrity": "sha512-Kl1mnCEw8Cy1Kw173gCxLIB242LfPKEOj9WoKhKz/MbryZTNrILzOJTk8kiczw/YUEPzn3gcltCQv6hDsLudRg==", + "version": "4.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz", + "integrity": "sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q==", "dev": true, "requires": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/serve-index": "^1.9.1", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.2.2", "ansi-html-community": "^0.0.8", "bonjour": "^3.5.0", - "chokidar": "^3.5.1", - "colorette": "^1.2.2", + "chokidar": "^3.5.2", + "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^1.6.0", + "default-gateway": "^6.0.3", "del": "^6.0.0", "express": "^4.17.1", "graceful-fs": "^4.2.6", "html-entities": "^2.3.2", "http-proxy-middleware": "^2.0.0", - "internal-ip": "^6.2.0", "ipaddr.js": "^2.0.1", "open": "^8.0.9", "p-retry": "^4.5.0", "portfinder": "^1.0.28", - "schema-utils": "^3.1.0", - "selfsigned": "^1.10.11", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.0", "serve-index": "^1.9.1", "sockjs": "^0.3.21", "spdy": "^4.0.2", "strip-ansi": "^7.0.0", - "url": "^0.11.0", - "webpack-dev-middleware": "^5.0.0", + "webpack-dev-middleware": "^5.3.0", "ws": "^8.1.0" }, "dependencies": { + "ajv": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", + "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, "ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + }, "strip-ansi": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", @@ -19224,9 +19591,9 @@ } }, "webpack-notifier": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.13.0.tgz", - "integrity": "sha512-QLk6l/TZKGhyN6Hd1zobaiYno7S9YPX3wH86+YOSufHes77SegGhnGdj+4vrLDFK5A4ZKoQD5GRXXFnM0h0N8A==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.15.0.tgz", + "integrity": "sha512-N2V8UMgRB5komdXQRavBsRpw0hPhJq2/SWNOGuhrXpIgRhcMexzkGQysUyGStHLV5hkUlgpRiF7IUXoBqyMmzQ==", "dev": true, "requires": { "node-notifier": "^9.0.0", @@ -19323,9 +19690,9 @@ "dev": true }, "ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", + "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", "dev": true, "requires": {} }, @@ -19354,30 +19721,24 @@ "dev": true }, "yargs": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz", - "integrity": "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==", + "version": "17.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", + "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.0.0" } }, "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "version": "21.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", + "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", "dev": true } } From f7e618be3e2529a675b1bf9d9030fbca7e79ea77 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 27 Jan 2022 16:38:48 +0100 Subject: [PATCH 292/407] WIP Start implementing the ImageIfdoReportGenerator --- composer.json | 1 + .../Volumes/ImageIfdoReportGenerator.php | 222 ++++++++++++++++++ .../Volumes/ImageIfdoReportGeneratorTest.php | 145 ++++++++++++ 3 files changed, 368 insertions(+) create mode 100644 src/Support/Reports/Volumes/ImageIfdoReportGenerator.php create mode 100644 tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php diff --git a/composer.json b/composer.json index 8f23c90df..a00b04ca5 100644 --- a/composer.json +++ b/composer.json @@ -16,6 +16,7 @@ ], "require": { "ext-zip": "*", + "ext-yaml": "*", "jmikola/geojson":"^1.0" }, "autoload": { diff --git a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php new file mode 100644 index 000000000..cbfc55879 --- /dev/null +++ b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php @@ -0,0 +1,222 @@ +users = $this->getUsers()->keyBy('id'); + $this->labels = $this->getLabels()->keyBy('id'); + + $this->query()->eachById([$this, 'processImage']); + + $ifdo = $this->source->getIfdo(); + + if (is_null($ifdo)) { + // throw + } + + $creators = array_map(function ($user) { + return [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + // TODO maybe leave this out? No way to determine the type here. + 'type' => 'expert', + ]; + }, $this->imageAnnotationCreators); + + $ifdo['image-set-header']['image-annotation-creators'] = $creators; + + $labels = array_map(function ($label) { + return [ + 'id' => $label->id, + 'name' => $label->name, + ]; + }, $this->imageAnnotationLabels); + + $ifdo['image-set-header']['image-annotation-labels'] = $labels; + + if (array_key_exists('image-set-items', $ifdo)) { + $ifdo['image-set-items'] = array_merge($ifdo['image-set-items'], $this->imageSetItems); + } else { + $ifdo['image-set-items'] = $this->imageSetItems; + } + + $this->writeYaml($ifdo, $path); + } + + /** + * Assemble a new DB query for the volume of this report. + * + * @return \Illuminate\Database\Query\Builder + */ + protected function query() + { + return $this->source->images() + ->with(['annotations' => function ($query) { + if ($this->isRestrictedToExportArea()) { + return $this->restrictToExportAreaQuery($query); + } + }]) + ->with(['annotations.labels' => function ($query) { + if ($this->isRestrictedToNewestLabel()) { + $query = $this->restrictToNewestLabelQuery($query); + } + + if ($this->isRestrictedToLabels()) { + $query = $this->restrictToLabelsQuery($query); + } + + return $query; + }]); + } + + /** + * Get all users who annotated in the volume. + * + * @return Illuminate\Support\Collection + */ + protected function getUsers() + { + return User::whereIn('id', function ($query) { + $query->select('user_id') + ->from('image_annotation_labels') + ->join('image_annotations', 'image_annotations.id', '=', 'image_annotation_labels.annotation_id') + ->join('images', 'image_annotations.image_id', '=', 'images.id') + ->where('images.volume_id', $this->source->id); + })->get(); + } + + /** + * Get all labels that were used in the volume. + * + * @return Illuminate\Support\Collection + */ + protected function getLabels() + { + return Label::whereIn('id', function ($query) { + $query->select('label_id') + ->from('image_annotation_labels') + ->join('image_annotations', 'image_annotations.id', '=', 'image_annotation_labels.annotation_id') + ->join('images', 'image_annotations.image_id', '=', 'images.id') + ->where('images.volume_id', $this->source->id); + })->get(); + } + + /** + * Create the image-set-item entry for an image. + * + * @param Image $image + * + */ + public function processImage(Image $image) + { + $annotations = $image->annotations->map(function ($annotation) { + $labels = $annotation->labels->map(function ($aLabel) { + $user = $this->users->get($aLabel->user_id); + if (!in_array($user, $this->imageAnnotationCreators)) { + $this->imageAnnotationCreators[] = $user; + } + + $label = $this->labels->get($aLabel->label_id); + if (!in_array($label, $this->imageAnnotationLabels)) { + $this->imageAnnotationLabels[] = $label; + } + + return [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'confidence' => $aLabel->confidence, + ]; + }); + + return [ + 'coordinates' => $annotation->points, + 'labels' => $labels->toArray(), + ]; + }); + + $this->imageSetItems[$image->filename] = [ + 'image-annotations' => $annotations->toArray(), + ]; + } + + /** + * Write the report YAML file. + * + * @param array $content + * @param string $path + */ + protected function writeYaml(array $content, string $path) + { + yaml_emit_file($path, $content); + } +} diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php new file mode 100644 index 000000000..a5708f415 --- /dev/null +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -0,0 +1,145 @@ +assertEquals('iFDO report', $generator->getName()); + $this->assertEquals('ifdo_report', $generator->getFilename()); + $this->assertStringEndsWith('.yaml', $generator->getFullFilename()); + } + + public function testGenerateReportEmpty() + { + $ifdo = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + ], + ]; + + $volume = VolumeTest::create(['name' => 'My Cool Volume']); + + $disk = Storage::fake('ifdos'); + $disk->put($volume->id, yaml_emit($ifdo)); + + $label = LabelTest::create(); + $user = UserTest::create(); + + $al = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + ]); + + $al->annotation->image->volume_id = $volume->id; + $al->annotation->image->attrs = ['image' => 'attrs']; + $al->annotation->image->save(); + + $generator = new ImageIfdoReportGeneratorStub; + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $al->label->id, + 'name' => $al->label->name, + ], + ], + ], + 'image-set-items' => [ + $al->annotation->image->filename => [ + 'image-annotations' => [ + [ + 'coordinates' => $al->annotation->points, + 'labels' => [ + [ + 'label' => $al->label->id, + 'annotator' => $user->uuid, + 'confidence' => $al->confidence, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } + + public function testGenerateReportImageLabels() + { + $this->markTestIncomplete(); + } + + public function testGenerateReportMergeSetItems() + { + $this->markTestIncomplete(); + } + + public function testGenerateReportRestrictExportArea() + { + $this->markTestIncomplete(); + } + + public function testGenerateReportRestrictNewestLabel() + { + $this->markTestIncomplete(); + } + + public function testGenerateReportRestrictToLabels() + { + $this->markTestIncomplete(); + } + + public function testGenerateReportNoIfdo() + { + $this->markTestIncomplete(); + } + + public function testGenerateReportLabelAphiaIdInfo() + { + $this->markTestIncomplete(); + } +} + +class ImageIfdoReportGeneratorStub extends ImageIfdoReportGenerator +{ + public $yaml; + + protected function writeYaml(array $content, string $path) + { + $this->yaml = $content; + } +} From dca64bd48db8646ec3f0fc89106873f135f19200 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 27 Jan 2022 17:00:24 +0100 Subject: [PATCH 293/407] Implement image labels contained in iFDO report --- .../Volumes/ImageIfdoReportGenerator.php | 71 +++++++++++++---- .../Volumes/ImageIfdoReportGeneratorTest.php | 77 ++++++++++++++++--- 2 files changed, 126 insertions(+), 22 deletions(-) diff --git a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php index cbfc55879..b2885ef7f 100644 --- a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php @@ -136,6 +136,11 @@ protected function query() } return $query; + }]) + ->with(['labels' => function ($query) { + if ($this->isRestrictedToLabels()) { + return $query->whereIn('image_labels.label_id', $this->getOnlyLabels()); + } }]); } @@ -147,12 +152,19 @@ protected function query() protected function getUsers() { return User::whereIn('id', function ($query) { - $query->select('user_id') - ->from('image_annotation_labels') - ->join('image_annotations', 'image_annotations.id', '=', 'image_annotation_labels.annotation_id') - ->join('images', 'image_annotations.image_id', '=', 'images.id') - ->where('images.volume_id', $this->source->id); - })->get(); + $query->select('user_id') + ->from('image_annotation_labels') + ->join('image_annotations', 'image_annotations.id', '=', 'image_annotation_labels.annotation_id') + ->join('images', 'image_annotations.image_id', '=', 'images.id') + ->where('images.volume_id', $this->source->id); + }) + ->orWhereIn('id', function ($query) { + $query->select('user_id') + ->from('image_labels') + ->join('images', 'image_labels.image_id', '=', 'images.id') + ->where('images.volume_id', $this->source->id); + }) + ->get(); } /** @@ -163,12 +175,19 @@ protected function getUsers() protected function getLabels() { return Label::whereIn('id', function ($query) { - $query->select('label_id') - ->from('image_annotation_labels') - ->join('image_annotations', 'image_annotations.id', '=', 'image_annotation_labels.annotation_id') - ->join('images', 'image_annotations.image_id', '=', 'images.id') - ->where('images.volume_id', $this->source->id); - })->get(); + $query->select('label_id') + ->from('image_annotation_labels') + ->join('image_annotations', 'image_annotations.id', '=', 'image_annotation_labels.annotation_id') + ->join('images', 'image_annotations.image_id', '=', 'images.id') + ->where('images.volume_id', $this->source->id); + }) + ->orWhereIn('id', function ($query) { + $query->select('label_id') + ->from('image_labels') + ->join('images', 'image_labels.image_id', '=', 'images.id') + ->where('images.volume_id', $this->source->id); + }) + ->get(); } /** @@ -195,6 +214,7 @@ public function processImage(Image $image) 'label' => $label->id, 'annotator' => $user->uuid, 'confidence' => $aLabel->confidence, + 'created-at' => (string) $aLabel->created_at, ]; }); @@ -204,8 +224,33 @@ public function processImage(Image $image) ]; }); + $labels = $image->labels->map(function ($iLabel) { + $user = $this->users->get($iLabel->user_id); + if (!in_array($user, $this->imageAnnotationCreators)) { + $this->imageAnnotationCreators[] = $user; + } + + $label = $this->labels->get($iLabel->label_id); + if (!in_array($label, $this->imageAnnotationLabels)) { + $this->imageAnnotationLabels[] = $label; + } + + return [ + 'coordinates' => [], + 'labels' => [ + [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'created-at' => (string) $iLabel->created_at, + ], + ], + ]; + }); + $this->imageSetItems[$image->filename] = [ - 'image-annotations' => $annotations->toArray(), + // Use toBase() because the merge method of Eloquent collections works + // differently. + 'image-annotations' => $annotations->toBase()->merge($labels)->toArray(), ]; } diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php index a5708f415..aab14b182 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -2,20 +2,14 @@ namespace Biigle\Tests\Modules\Reports\Support\Reports\Volumes; -use App; -use Biigle\Modules\Reports\Support\CsvFile; use Biigle\Modules\Reports\Support\Reports\Volumes\ImageIfdoReportGenerator; use Biigle\Tests\ImageAnnotationLabelTest; -use Biigle\Tests\ImageAnnotationTest; -use Biigle\Tests\ImageTest; +use Biigle\Tests\ImageLabelTest; use Biigle\Tests\LabelTest; -use Biigle\Tests\LabelTreeTest; use Biigle\Tests\UserTest; use Biigle\Tests\VolumeTest; -use Mockery; use Storage; use TestCase; -use ZipArchive; class ImageIfdoReportGeneratorTest extends TestCase { @@ -51,7 +45,6 @@ public function testGenerateReportEmpty() ]); $al->annotation->image->volume_id = $volume->id; - $al->annotation->image->attrs = ['image' => 'attrs']; $al->annotation->image->save(); $generator = new ImageIfdoReportGeneratorStub; @@ -87,6 +80,7 @@ public function testGenerateReportEmpty() 'label' => $al->label->id, 'annotator' => $user->uuid, 'confidence' => $al->confidence, + 'created-at' => (string) $al->created_at, ], ], ], @@ -100,7 +94,72 @@ public function testGenerateReportEmpty() public function testGenerateReportImageLabels() { - $this->markTestIncomplete(); + $ifdo = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + ], + ]; + + $volume = VolumeTest::create(['name' => 'My Cool Volume']); + + $disk = Storage::fake('ifdos'); + $disk->put($volume->id, yaml_emit($ifdo)); + + $label = LabelTest::create(); + $user = UserTest::create(); + + $il = ImageLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + ]); + + $il->image->volume_id = $volume->id; + $il->image->save(); + + $generator = new ImageIfdoReportGeneratorStub; + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $il->label->id, + 'name' => $il->label->name, + ], + ], + ], + 'image-set-items' => [ + $il->image->filename => [ + 'image-annotations' => [ + [ + 'coordinates' => [], + 'labels' => [ + [ + 'label' => $il->label->id, + 'annotator' => $user->uuid, + 'created-at' => (string) $il->created_at, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); } public function testGenerateReportMergeSetItems() From c37f4e4cbc17382af00a74a3d316cbb45e8f1105 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 10 Feb 2022 11:29:36 +0100 Subject: [PATCH 294/407] WIP Continue implementing ImageIfdoReportGenerator --- .../Volumes/ImageIfdoReportGenerator.php | 57 ++- .../Volumes/ImageIfdoReportGeneratorTest.php | 457 +++++++++++++++++- 2 files changed, 476 insertions(+), 38 deletions(-) diff --git a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php index b2885ef7f..ad30589ce 100644 --- a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php @@ -7,6 +7,7 @@ use Biigle\Modules\Reports\Support\Reports\Volumes\ImageAnnotations\AnnotationReportGenerator; use Biigle\User; use DB; +use Exception; class ImageIfdoReportGenerator extends AnnotationReportGenerator { @@ -81,7 +82,7 @@ public function generateReport($path) $ifdo = $this->source->getIfdo(); if (is_null($ifdo)) { - // throw + throw new Exception("No iFDO file found for the volume."); } $creators = array_map(function ($user) { @@ -93,7 +94,12 @@ public function generateReport($path) ]; }, $this->imageAnnotationCreators); - $ifdo['image-set-header']['image-annotation-creators'] = $creators; + if (!empty($creators)) { + $ifdo['image-set-header']['image-annotation-creators'] = array_merge( + $ifdo['image-set-header']['image-annotation-creators'] ?? [], + $creators + ); + } $labels = array_map(function ($label) { return [ @@ -102,12 +108,18 @@ public function generateReport($path) ]; }, $this->imageAnnotationLabels); - $ifdo['image-set-header']['image-annotation-labels'] = $labels; + if (!empty($labels)) { + $ifdo['image-set-header']['image-annotation-labels'] = array_merge( + $ifdo['image-set-header']['image-annotation-labels'] ?? [], + $labels + ); + } - if (array_key_exists('image-set-items', $ifdo)) { - $ifdo['image-set-items'] = array_merge($ifdo['image-set-items'], $this->imageSetItems); - } else { - $ifdo['image-set-items'] = $this->imageSetItems; + if (!empty($this->imageSetItems)) { + $ifdo['image-set-items'] = array_merge_recursive( + $ifdo['image-set-items'] ?? [], + $this->imageSetItems + ); } $this->writeYaml($ifdo, $path); @@ -120,13 +132,13 @@ public function generateReport($path) */ protected function query() { - return $this->source->images() - ->with(['annotations' => function ($query) { + $relations = [ + 'annotations' => function ($query) { if ($this->isRestrictedToExportArea()) { return $this->restrictToExportAreaQuery($query); } - }]) - ->with(['annotations.labels' => function ($query) { + }, + 'annotations.labels' => function ($query) { if ($this->isRestrictedToNewestLabel()) { $query = $this->restrictToNewestLabelQuery($query); } @@ -136,12 +148,15 @@ protected function query() } return $query; - }]) - ->with(['labels' => function ($query) { + }, + 'labels' => function ($query) { if ($this->isRestrictedToLabels()) { return $query->whereIn('image_labels.label_id', $this->getOnlyLabels()); } - }]); + }, + ]; + + return $this->source->images()->with($relations); } /** @@ -247,11 +262,15 @@ public function processImage(Image $image) ]; }); - $this->imageSetItems[$image->filename] = [ - // Use toBase() because the merge method of Eloquent collections works - // differently. - 'image-annotations' => $annotations->toBase()->merge($labels)->toArray(), - ]; + $this->imageSetItems[$image->filename] = []; + + // Use toBase() because the merge method of Eloquent collections works + // differently. + $imageAnnotations = $annotations->toBase()->merge($labels)->toArray(); + + if (!empty($imageAnnotations)) { + $this->imageSetItems[$image->filename]['image-annotations'] = $imageAnnotations; + } } /** diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php index aab14b182..58ec2ecd7 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -3,11 +3,15 @@ namespace Biigle\Tests\Modules\Reports\Support\Reports\Volumes; use Biigle\Modules\Reports\Support\Reports\Volumes\ImageIfdoReportGenerator; +use Biigle\Modules\Reports\Volume; use Biigle\Tests\ImageAnnotationLabelTest; +use Biigle\Tests\ImageAnnotationTest; use Biigle\Tests\ImageLabelTest; +use Biigle\Tests\ImageTest; use Biigle\Tests\LabelTest; use Biigle\Tests\UserTest; use Biigle\Tests\VolumeTest; +use Exception; use Storage; use TestCase; @@ -21,21 +25,28 @@ public function testProperties() $this->assertStringEndsWith('.yaml', $generator->getFullFilename()); } - public function testGenerateReportEmpty() + protected function setUpIfdo($merge = []) { - $ifdo = [ + $ifdo = array_merge_recursive([ 'image-set-header' => [ 'image-set-handle' => '20.500.12085/test-example', 'image-set-name' => 'My Cool Volume', 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', ], - ]; + ], $merge); $volume = VolumeTest::create(['name' => 'My Cool Volume']); $disk = Storage::fake('ifdos'); $disk->put($volume->id, yaml_emit($ifdo)); + return [$volume, $ifdo]; + } + + public function testGenerateReport() + { + [$volume, $ifdo] = $this->setUpIfdo(); + $label = LabelTest::create(); $user = UserTest::create(); @@ -65,7 +76,7 @@ public function testGenerateReportEmpty() ], 'image-annotation-labels' => [ [ - 'id' => $al->label->id, + 'id' => $al->label_id, 'name' => $al->label->name, ], ], @@ -77,7 +88,7 @@ public function testGenerateReportEmpty() 'coordinates' => $al->annotation->points, 'labels' => [ [ - 'label' => $al->label->id, + 'label' => $al->label_id, 'annotator' => $user->uuid, 'confidence' => $al->confidence, 'created-at' => (string) $al->created_at, @@ -92,20 +103,110 @@ public function testGenerateReportEmpty() $this->assertEquals($expect, $generator->yaml); } - public function testGenerateReportImageLabels() + public function testGenerateReportMultiLabel() { - $ifdo = [ + [$volume, $ifdo] = $this->setUpIfdo(); + + $label = LabelTest::create(); + $label2 = LabelTest::create(); + $user = UserTest::create(); + + $al = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + ]); + + $al2 = ImageAnnotationLabelTest::create([ + 'label_id' => $label2->id, + 'user_id' => $user->id, + 'annotation_id' => $al->annotation_id, + ]); + + $al->annotation->image->volume_id = $volume->id; + $al->annotation->image->save(); + + $generator = new ImageIfdoReportGeneratorStub; + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ 'image-set-header' => [ 'image-set-handle' => '20.500.12085/test-example', 'image-set-name' => 'My Cool Volume', 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $al->label_id, + 'name' => $al->label->name, + ], + [ + 'id' => $al2->label_id, + 'name' => $al2->label->name, + ], + ], + ], + 'image-set-items' => [ + $al->annotation->image->filename => [ + 'image-annotations' => [ + [ + 'coordinates' => $al->annotation->points, + 'labels' => [ + [ + 'label' => $al->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al->confidence, + 'created-at' => (string) $al->created_at, + ], + [ + 'label' => $al2->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al2->confidence, + 'created-at' => (string) $al->created_at, + ], + ], + ], + ], + ], ], ]; - $volume = VolumeTest::create(['name' => 'My Cool Volume']); + $this->assertEquals($expect, $generator->yaml); + } - $disk = Storage::fake('ifdos'); - $disk->put($volume->id, yaml_emit($ifdo)); + public function testGenerateReportEmpty() + { + [$volume, $ifdo] = $this->setUpIfdo(); + + $image = ImageTest::create(['volume_id' => $volume->id]); + + $generator = new ImageIfdoReportGeneratorStub; + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + ], + 'image-set-items' => [ + $image->filename => [], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } + + public function testGenerateReportImageLabels() + { + [$volume, $ifdo] = $this->setUpIfdo(); $label = LabelTest::create(); $user = UserTest::create(); @@ -136,7 +237,7 @@ public function testGenerateReportImageLabels() ], 'image-annotation-labels' => [ [ - 'id' => $il->label->id, + 'id' => $il->label_id, 'name' => $il->label->name, ], ], @@ -148,7 +249,7 @@ public function testGenerateReportImageLabels() 'coordinates' => [], 'labels' => [ [ - 'label' => $il->label->id, + 'label' => $il->label_id, 'annotator' => $user->uuid, 'created-at' => (string) $il->created_at, ], @@ -162,29 +263,347 @@ public function testGenerateReportImageLabels() $this->assertEquals($expect, $generator->yaml); } - public function testGenerateReportMergeSetItems() + public function testGenerateReportMergeImageSetItems() { - $this->markTestIncomplete(); + $label = LabelTest::create(); + $user = UserTest::create(); + + $al = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + ]); + + $merge = [ + 'image-set-header' => [ + 'image-annotation-creators' => [ + [ + 'id' => '123abc', + 'name' => "Test User", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => 123321, + 'name' => 'Test Label', + ], + ], + ], + 'image-set-items' => [ + $al->annotation->image->filename => [ + 'image-area-square-meter' => 5.5, + 'image-annotations' => [ + [ + 'coordinates' => [10, 20], + 'labels' => [ + [ + 'label' => 123321, + 'annotator' => '123abc', + 'confidence' => 1.0, + 'created-at' => '2022-02-10 09:47:00', + ], + ], + ], + ], + ], + ], + ]; + + [$volume, $ifdo] = $this->setUpIfdo($merge); + + $al->annotation->image->volume_id = $volume->id; + $al->annotation->image->save(); + + $generator = new ImageIfdoReportGeneratorStub; + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-annotation-creators' => [ + [ + 'id' => '123abc', + 'name' => "Test User", + 'type' => 'expert', + ], + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => 123321, + 'name' => 'Test Label', + ], + [ + 'id' => $al->label_id, + 'name' => $al->label->name, + ], + ], + ], + 'image-set-items' => [ + $al->annotation->image->filename => [ + 'image-area-square-meter' => 5.5, + 'image-annotations' => [ + [ + 'coordinates' => [10, 20], + 'labels' => [ + [ + 'label' => 123321, + 'annotator' => '123abc', + 'confidence' => 1.0, + 'created-at' => '2022-02-10 09:47:00', + ], + ], + ], + [ + 'coordinates' => $al->annotation->points, + 'labels' => [ + [ + 'label' => $al->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al->confidence, + 'created-at' => (string) $al->created_at, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); } - public function testGenerateReportRestrictExportArea() + public function testGenerateReportRestrictToExportArea() { - $this->markTestIncomplete(); + [$volume, $ifdo] = $this->setUpIfdo(); + + $volume = Volume::convert($volume); + $volume->exportArea = [100, 100, 200, 200]; + $volume->save(); + + $label = LabelTest::create(); + $user = UserTest::create(); + + $image = ImageTest::create(['volume_id' => $volume->id]); + $a1 = ImageAnnotationTest::create([ + 'image_id' => $image->id, + 'points' => [150, 150], + ]); + $al1 = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a1->id, + ]); + + $a2 = ImageAnnotationTest::create([ + 'image_id' => $image->id, + 'points' => [50, 50], + ]); + $al2 = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a2->id, + ]); + + $generator = new ImageIfdoReportGeneratorStub([ + 'exportArea' => true, + ]); + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $al1->label_id, + 'name' => $al1->label->name, + ], + ], + ], + 'image-set-items' => [ + $image->filename => [ + 'image-annotations' => [ + [ + 'coordinates' => $a1->points, + 'labels' => [ + [ + 'label' => $al1->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al1->confidence, + 'created-at' => (string) $al1->created_at, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); } public function testGenerateReportRestrictNewestLabel() { - $this->markTestIncomplete(); + [$volume, $ifdo] = $this->setUpIfdo(); + + $label = LabelTest::create(); + $label2 = LabelTest::create(); + $user = UserTest::create(); + + $al = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + ]); + + $al2 = ImageAnnotationLabelTest::create([ + 'label_id' => $label2->id, + 'user_id' => $user->id, + 'annotation_id' => $al->annotation_id, + ]); + + $al->annotation->image->volume_id = $volume->id; + $al->annotation->image->save(); + + $generator = new ImageIfdoReportGeneratorStub([ + 'newestLabel' => true, + ]); + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $al2->label_id, + 'name' => $al2->label->name, + ], + ], + ], + 'image-set-items' => [ + $al->annotation->image->filename => [ + 'image-annotations' => [ + [ + 'coordinates' => $al->annotation->points, + 'labels' => [ + [ + 'label' => $al2->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al2->confidence, + 'created-at' => (string) $al->created_at, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); } public function testGenerateReportRestrictToLabels() { - $this->markTestIncomplete(); + [$volume, $ifdo] = $this->setUpIfdo(); + + $label = LabelTest::create(); + $label2 = LabelTest::create(); + $user = UserTest::create(); + + $al = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + ]); + + $al2 = ImageAnnotationLabelTest::create([ + 'label_id' => $label2->id, + 'user_id' => $user->id, + 'annotation_id' => $al->annotation_id, + ]); + + $al->annotation->image->volume_id = $volume->id; + $al->annotation->image->save(); + + $generator = new ImageIfdoReportGeneratorStub([ + 'onlyLabels' => [$label->id], + ]); + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $al->label_id, + 'name' => $al->label->name, + ], + ], + ], + 'image-set-items' => [ + $al->annotation->image->filename => [ + 'image-annotations' => [ + [ + 'coordinates' => $al->annotation->points, + 'labels' => [ + [ + 'label' => $al->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al->confidence, + 'created-at' => (string) $al->created_at, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); } public function testGenerateReportNoIfdo() { - $this->markTestIncomplete(); + $volume = VolumeTest::create(); + $generator = new ImageIfdoReportGeneratorStub(); + $generator->setSource($volume); + $this->expectException(Exception::class); + $generator->generateReport('my/path'); } public function testGenerateReportLabelAphiaIdInfo() From 073f6b169fb2e3d8c74fbdd12a7a759a392f165a Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 10 Feb 2022 11:55:17 +0100 Subject: [PATCH 295/407] Finish ImageIfdoReportGenerator --- .../Volumes/ImageIfdoReportGenerator.php | 57 ++++++++++++++++- .../Volumes/ImageIfdoReportGeneratorTest.php | 64 ++++++++++++++++++- 2 files changed, 118 insertions(+), 3 deletions(-) diff --git a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php index ad30589ce..950a09010 100644 --- a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php @@ -4,6 +4,7 @@ use Biigle\Image; use Biigle\Label; +use Biigle\LabelSource; use Biigle\Modules\Reports\Support\Reports\Volumes\ImageAnnotations\AnnotationReportGenerator; use Biigle\User; use DB; @@ -67,6 +68,13 @@ class ImageIfdoReportGenerator extends AnnotationReportGenerator */ protected $imageSetItems = []; + /** + * Label source model for the WoRMS database. + * + * @var LabelSource + */ + protected $wormsLabelSource; + /** * Generate the report. * @@ -74,6 +82,7 @@ class ImageIfdoReportGenerator extends AnnotationReportGenerator */ public function generateReport($path) { + $this->wormsLabelSource = LabelSource::where('name', 'worms')->first(); $this->users = $this->getUsers()->keyBy('id'); $this->labels = $this->getLabels()->keyBy('id'); @@ -102,6 +111,14 @@ public function generateReport($path) } $labels = array_map(function ($label) { + if ($this->shouldConvertWormsId($label)) { + return [ + 'id' => $this->getWormsUrn($label), + 'name' => $label->name, + 'description' => 'Imported from WoRMS', + ]; + } + return [ 'id' => $label->id, 'name' => $label->name, @@ -225,8 +242,14 @@ public function processImage(Image $image) $this->imageAnnotationLabels[] = $label; } + if ($this->shouldConvertWormsId($label)) { + $labelId = $this->getWormsUrn($label); + } else { + $labelId = $label->id; + } + return [ - 'label' => $label->id, + 'label' => $labelId, 'annotator' => $user->uuid, 'confidence' => $aLabel->confidence, 'created-at' => (string) $aLabel->created_at, @@ -250,11 +273,17 @@ public function processImage(Image $image) $this->imageAnnotationLabels[] = $label; } + if ($this->shouldConvertWormsId($label)) { + $labelId = $this->getWormsUrn($label); + } else { + $labelId = $label->id; + } + return [ 'coordinates' => [], 'labels' => [ [ - 'label' => $label->id, + 'label' => $labelId, 'annotator' => $user->uuid, 'created-at' => (string) $iLabel->created_at, ], @@ -283,4 +312,28 @@ protected function writeYaml(array $content, string $path) { yaml_emit_file($path, $content); } + + /** + * Determine if the label ID should be converted to a WoRMS URN. + * + * @param Label $label + * + * @return bool + */ + protected function shouldConvertWormsId(Label $label) + { + return $this->wormsLabelSource && $label->label_source_id === $this->wormsLabelSource->id; + } + + /** + * Get the WoRMS URN for a label (if it has one). + * + * @param Label $label + * + * @return string + */ + protected function getWormsUrn($label) + { + return "urn:lsid:marinespecies.org:taxname:{$label->source_id}"; + } } diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php index 58ec2ecd7..74d173754 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -2,6 +2,7 @@ namespace Biigle\Tests\Modules\Reports\Support\Reports\Volumes; +use Biigle\LabelSource; use Biigle\Modules\Reports\Support\Reports\Volumes\ImageIfdoReportGenerator; use Biigle\Modules\Reports\Volume; use Biigle\Tests\ImageAnnotationLabelTest; @@ -608,7 +609,68 @@ public function testGenerateReportNoIfdo() public function testGenerateReportLabelAphiaIdInfo() { - $this->markTestIncomplete(); + $worms = LabelSource::where('name', 'worms')->first(); + + [$volume, $ifdo] = $this->setUpIfdo(); + + $label = LabelTest::create([ + 'label_source_id' => $worms->id, + 'source_id' => 123999, + ]); + $user = UserTest::create(); + + $al = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + ]); + + $al->annotation->image->volume_id = $volume->id; + $al->annotation->image->save(); + + $generator = new ImageIfdoReportGeneratorStub; + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => 'urn:lsid:marinespecies.org:taxname:123999', + 'name' => $al->label->name, + 'description' => 'Imported from WoRMS', + ], + ], + ], + 'image-set-items' => [ + $al->annotation->image->filename => [ + 'image-annotations' => [ + [ + 'coordinates' => $al->annotation->points, + 'labels' => [ + [ + 'label' => 'urn:lsid:marinespecies.org:taxname:123999', + 'annotator' => $user->uuid, + 'confidence' => $al->confidence, + 'created-at' => (string) $al->created_at, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); } } From b3e080765ef305fc297f232b4075d02ae1b346d7 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 10 Feb 2022 12:45:34 +0100 Subject: [PATCH 296/407] Add imageIfdo report type --- .../Api/Volumes/VolumeReportController.php | 14 ++++----- src/Http/Requests/StoreVolumeReport.php | 1 + src/ReportType.php | 1 + .../Volumes/ImageIfdoReportGenerator.php | 1 - ...2_10_123200_add_image_ifdo_report_type.php | 30 +++++++++++++++++++ tests/Support/Reports/ReportGeneratorTest.php | 1 + .../Volumes/ImageIfdoReportGeneratorTest.php | 1 - 7 files changed, 40 insertions(+), 9 deletions(-) create mode 100644 src/database/migrations/2022_02_10_123200_add_image_ifdo_report_type.php diff --git a/src/Http/Controllers/Api/Volumes/VolumeReportController.php b/src/Http/Controllers/Api/Volumes/VolumeReportController.php index 3cb587c70..be7be74d1 100644 --- a/src/Http/Controllers/Api/Volumes/VolumeReportController.php +++ b/src/Http/Controllers/Api/Volumes/VolumeReportController.php @@ -21,20 +21,20 @@ class VolumeReportController extends Controller * * @apiParam (Required arguments) {Number} type_id The report type ID. * - * @apiParam (Optional arguments) {Boolean} export_area If `true`, restrict the report to the export area of the volume. Only available for image annotation reports. + * @apiParam (Optional arguments) {Boolean} export_area If `true`, restrict the report to the export area of the volume. Only available for image annotation reports and the iFDO report. * @apiParam (Optional arguments) {Boolean} newest_label If `true`, restrict the report to the newest label of each annotation. - * @apiParam (Optional arguments) {Boolean} separate_label_trees If `true`, separate annotations with labels of different label trees to different files or sheets of the spreadsheet. Cannot be used together with `separate_users`. - * @apiParam (Optional arguments) {Boolean} separate_users If `true`, separate annotations with labels of different users to different files or sheets of the spreadsheet. Cannot be used together with `separate_label_trees`. - * @apiParam (Optional arguments) {Number} annotation_session_id ID of an annotation session of the volume. If given, only annotations belonging to the annotation session are included in the report. + * @apiParam (Optional arguments) {Boolean} separate_label_trees If `true`, separate annotations with labels of different label trees to different files or sheets of the spreadsheet. Cannot be used together with `separate_users`. Not available for the iFDO report. + * @apiParam (Optional arguments) {Boolean} separate_users If `true`, separate annotations with labels of different users to different files or sheets of the spreadsheet. Cannot be used together with `separate_label_trees`. Not available for the iFDO report. + * @apiParam (Optional arguments) {Number} annotation_session_id ID of an annotation session of the volume. If given, only annotations belonging to the annotation session are included in the report. Not available for the iFDO report. * @apiParam (Optional arguments) {Number[]} only_labels Array of label IDs to restrict the report to. Omit or leave empty to take all labels. * @apiParam (Optional arguments) {Boolean} aggregate_child_labels If `true`, add the abundance of child labels to the abundance of their parent labels and omit the child labels. This is only valid for the abundance report. Labels that are excluded with `only_labels` are not counted. * @apiParam (Optional arguments) {Boolean} disable_notifications If `true`, suppress notification to the user on report completion. - * + * * @apiPermission projectMember * * @param StoreVolumeReport $request * @param int $id Volume ID - * + * * @return mixed */ public function store(StoreVolumeReport $request, $id) @@ -51,6 +51,6 @@ public function store(StoreVolumeReport $request, $id) if ($this->isAutomatedRequest()) { return $report; - } + } } } diff --git a/src/Http/Requests/StoreVolumeReport.php b/src/Http/Requests/StoreVolumeReport.php index 040eaa2a6..a6ac61d9f 100644 --- a/src/Http/Requests/StoreVolumeReport.php +++ b/src/Http/Requests/StoreVolumeReport.php @@ -47,6 +47,7 @@ public function rules() ReportType::imageLabelsBasicId(), ReportType::imageLabelsCsvId(), ReportType::imageLabelsImageLocationId(), + ReportType::imageIfdoId(), ]; } else { $types = [ diff --git a/src/ReportType.php b/src/ReportType.php index 9822079db..5e56d80f0 100644 --- a/src/ReportType.php +++ b/src/ReportType.php @@ -28,6 +28,7 @@ class ReportType extends Model 'imageLabelsImageLocation' => 'ImageLabels\ImageLocation', 'videoAnnotationsCsv' => 'VideoAnnotations\Csv', 'videoLabelsCsv' => 'VideoLabels\Csv', + 'imageIfdo' => 'ImageIfdo', ]; /** diff --git a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php index 950a09010..33506aff6 100644 --- a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php @@ -115,7 +115,6 @@ public function generateReport($path) return [ 'id' => $this->getWormsUrn($label), 'name' => $label->name, - 'description' => 'Imported from WoRMS', ]; } diff --git a/src/database/migrations/2022_02_10_123200_add_image_ifdo_report_type.php b/src/database/migrations/2022_02_10_123200_add_image_ifdo_report_type.php new file mode 100644 index 000000000..aed19a4a0 --- /dev/null +++ b/src/database/migrations/2022_02_10_123200_add_image_ifdo_report_type.php @@ -0,0 +1,30 @@ +insert([ + ['name' => 'ImageIfdo'], + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + DB::table('report_types') + ->where('name', 'ImageIfdo') + ->delete(); + } +} diff --git a/tests/Support/Reports/ReportGeneratorTest.php b/tests/Support/Reports/ReportGeneratorTest.php index 783d274e1..36f77c701 100644 --- a/tests/Support/Reports/ReportGeneratorTest.php +++ b/tests/Support/Reports/ReportGeneratorTest.php @@ -41,6 +41,7 @@ public function testGetAllVolumeExist() public function testGetAllProjectExist() { + $this->markTestIncomplete('Implement project image iFDO report'); foreach (ReportType::get() as $type) { $this->assertNotNull(ReportGenerator::get(Project::class, $type)); } diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php index 74d173754..1ce4c409a 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -647,7 +647,6 @@ public function testGenerateReportLabelAphiaIdInfo() [ 'id' => 'urn:lsid:marinespecies.org:taxname:123999', 'name' => $al->label->name, - 'description' => 'Imported from WoRMS', ], ], ], From 09b8bdf1f41293d301767e8f7e01276dd28ed801 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 10 Feb 2022 14:38:08 +0100 Subject: [PATCH 297/407] Update NPM dependencies --- package-lock.json | 3957 ++++++++++++++++++++++++--------------------- 1 file changed, 2098 insertions(+), 1859 deletions(-) diff --git a/package-lock.json b/package-lock.json index 15aac67af..78ef74c93 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,18 @@ "vue-template-compiler": "^2.6.11" } }, + "node_modules/@ampproject/remapping": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.0.tgz", + "integrity": "sha512-d5RysTlJ7hmw5Tw4UxgxcY3lkMe92n8sXCcuLPAyIAHK6j8DefDwtGnVVDgOnv+RnEosulDJ9NPKQL27bDId0g==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/code-frame": { "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", @@ -34,35 +46,35 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", - "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", - "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz", + "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==", "dev": true, "dependencies": { + "@ampproject/remapping": "^2.0.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", + "@babel/generator": "^7.17.0", "@babel/helper-compilation-targets": "^7.16.7", "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.12", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.0", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.10", - "@babel/types": "^7.16.8", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "semver": "^6.3.0" }, "engines": { "node": ">=6.9.0" @@ -94,12 +106,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", - "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", + "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", "dev": true, "dependencies": { - "@babel/types": "^7.16.8", + "@babel/types": "^7.17.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -160,9 +172,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz", - "integrity": "sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg==", + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", + "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", @@ -181,13 +193,13 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz", - "integrity": "sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^4.7.1" + "regexpu-core": "^5.0.1" }, "engines": { "node": ">=6.9.0" @@ -450,14 +462,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", "dev": true, "dependencies": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" @@ -518,6 +530,15 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -540,9 +561,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz", - "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1417,9 +1438,9 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz", - "integrity": "sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.16.7", @@ -1666,9 +1687,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", - "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", + "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", "dev": true, "dependencies": { "regenerator-runtime": "^0.13.4" @@ -1704,19 +1725,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz", - "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", + "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", + "@babel/generator": "^7.17.0", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.10", - "@babel/types": "^7.16.8", + "@babel/parser": "^7.17.0", + "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1746,9 +1767,9 @@ } }, "node_modules/@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", @@ -1784,15 +1805,15 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", - "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", - "globals": "^12.1.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", @@ -1803,28 +1824,49 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", "dev": true, "dependencies": { - "type-fest": "^0.8.1" + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.10.0" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", + "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", + "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, "node_modules/@nodelib/fs.scandir": { @@ -1850,9 +1892,9 @@ } }, "node_modules/@nodelib/fs.walk": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", - "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -1872,82 +1914,106 @@ } }, "node_modules/@turf/area": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.3.0.tgz", - "integrity": "sha512-Y1cYyAQ2fk94npdgOeMF4msc2uabHY1m7A7ntixf1I8rkyDd6/iHh1IMy1QsM+VZXAEwDwsXhu+ZFYd3Jkeg4A==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.5.0.tgz", + "integrity": "sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg==", "dependencies": { - "@turf/helpers": "^6.3.0", - "@turf/meta": "^6.3.0" + "@turf/helpers": "^6.5.0", + "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, "node_modules/@turf/bbox": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.3.0.tgz", - "integrity": "sha512-N4ue5Xopu1qieSHP2MA/CJGWHPKaTrVXQJjzHRNcY1vtsO126xbSaJhWUrFc5x5vVkXp0dcucGryO0r5m4o/KA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.5.0.tgz", + "integrity": "sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==", "dependencies": { - "@turf/helpers": "^6.3.0", - "@turf/meta": "^6.3.0" + "@turf/helpers": "^6.5.0", + "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, "node_modules/@turf/bearing": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-6.3.0.tgz", - "integrity": "sha512-apuUm9xN6VQLO33m7F2mmzlm3dHfeesJjMSzh9iehGtgmp1IaVndjdcIvs0ieiwm8bN9UhwXpfPtO3pV0n9SFw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-6.5.0.tgz", + "integrity": "sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A==", "dependencies": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, "node_modules/@turf/boolean-contains": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-6.3.0.tgz", - "integrity": "sha512-1MW7B5G5tIu1lnAv3pXyFzl75wfBYnbA2GhwHDb4okIXMhloy/r5uIqAZHo0fOXykKVJS/gIfA/MioKIftoTug==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-6.5.0.tgz", + "integrity": "sha512-4m8cJpbw+YQcKVGi8y0cHhBUnYT+QRfx6wzM4GI1IdtYH3p4oh/DOBJKrepQyiDzFDaNIjxuWXBh0ai1zVwOQQ==", "dependencies": { - "@turf/bbox": "^6.3.0", - "@turf/boolean-point-in-polygon": "^6.3.0", - "@turf/boolean-point-on-line": "^6.3.0", - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" + "@turf/bbox": "^6.5.0", + "@turf/boolean-point-in-polygon": "^6.5.0", + "@turf/boolean-point-on-line": "^6.5.0", + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, "node_modules/@turf/boolean-overlap": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-6.3.0.tgz", - "integrity": "sha512-rWh8JKTqlJ1m27FY8YeWcGoXutLyCVfSi2/8AOkXi2F+36P9GM4tHz19yKY3btbnHJTgSZf1xO2YhX2d0BmNqg==", - "dependencies": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "@turf/line-intersect": "^6.3.0", - "@turf/line-overlap": "^6.3.0", - "@turf/meta": "^6.3.0", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-6.5.0.tgz", + "integrity": "sha512-8btMIdnbXVWUa1M7D4shyaSGxLRw6NjMcqKBcsTXcZdnaixl22k7ar7BvIzkaRYN3SFECk9VGXfLncNS3ckQUw==", + "dependencies": { + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0", + "@turf/line-intersect": "^6.5.0", + "@turf/line-overlap": "^6.5.0", + "@turf/meta": "^6.5.0", "geojson-equality": "0.1.6" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, "node_modules/@turf/boolean-point-in-polygon": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.3.0.tgz", - "integrity": "sha512-NqFSsoE6OwhDK19IllDQRhEQEkF7UVEOlqH9vgS1fGg4T6NcyKvACJs05c9457tL7QSbV9ZS53f2qiLneFL+qg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.5.0.tgz", + "integrity": "sha512-DtSuVFB26SI+hj0SjrvXowGTUCHlgevPAIsukssW6BG5MlNSBQAo70wpICBNJL6RjukXg8d2eXaAWuD/CqL00A==", "dependencies": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, "node_modules/@turf/boolean-point-on-line": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-6.3.0.tgz", - "integrity": "sha512-eScH8sfKJVjfbEX5Hgkt1nA7A8DUoiYD1riUVqTp2xikujrMfnYRjFpL/UAo01v33cPKZlhCXp7NE86bdOSrYg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-6.5.0.tgz", + "integrity": "sha512-A1BbuQ0LceLHvq7F/P7w3QvfpmZqbmViIUPHdNLvZimFNLo4e6IQunmzbe+8aSStH9QRZm3VOflyvNeXvvpZEQ==", "dependencies": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, "node_modules/@turf/destination": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-6.3.0.tgz", - "integrity": "sha512-aLt3U/XkJWyZW08Ln1qZwBNAGh27yhmYLu892+dBj3gKP6UUiR6ZopXxrBwjBVe00A6k2ktftKDn79qe0hptuw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-6.5.0.tgz", + "integrity": "sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ==", "dependencies": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, "node_modules/@turf/difference": { @@ -1963,94 +2029,121 @@ } }, "node_modules/@turf/distance": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-6.3.0.tgz", - "integrity": "sha512-basi24ssNFnH3iXPFjp/aNUrukjObiFWoIyDRqKyBJxVwVOwAWvfk4d38QQyBj5nDo5IahYRq/Q+T47/5hSs9w==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-6.5.0.tgz", + "integrity": "sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg==", "dependencies": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, "node_modules/@turf/helpers": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.3.0.tgz", - "integrity": "sha512-kr6KuD4Z0GZ30tblTEvi90rvvVNlKieXuMC8CTzE/rVQb0/f/Cb29zCXxTD7giQTEQY/P2nRW23wEqqyNHulCg==" + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.5.0.tgz", + "integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==", + "funding": { + "url": "https://opencollective.com/turf" + } }, "node_modules/@turf/invariant": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.3.0.tgz", - "integrity": "sha512-2OFOi9p+QOrcIMySEnr+WlOiKaFZ1bY56jA98YyECewJHfhPFWUBZEhc4nWGRT0ahK08Vus9+gcuBX8QIpCIIw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.5.0.tgz", + "integrity": "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==", "dependencies": { - "@turf/helpers": "^6.3.0" + "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, "node_modules/@turf/line-intersect": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.3.0.tgz", - "integrity": "sha512-3naxR7XpkPd2vst3Mw6DFry4C9m3o0/f2n/xu5UAyxb88Ie4m2k+1eqkhzMMx/0L+E6iThWpLx7DASM6q6o9ow==", - "dependencies": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "@turf/line-segment": "^6.3.0", - "@turf/meta": "^6.3.0", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.5.0.tgz", + "integrity": "sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA==", + "dependencies": { + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0", + "@turf/line-segment": "^6.5.0", + "@turf/meta": "^6.5.0", "geojson-rbush": "3.x" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, "node_modules/@turf/line-overlap": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-6.3.0.tgz", - "integrity": "sha512-fVyXfTpr/A+ZXZWG6PbuYz5rAGbTQWyrMZveCl2049SbOXSkVXGjUfpnLaklP0p+adw7eRR0LhZn6FGz9CQaFg==", - "dependencies": { - "@turf/boolean-point-on-line": "^6.3.0", - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "@turf/line-segment": "^6.3.0", - "@turf/meta": "^6.3.0", - "@turf/nearest-point-on-line": "^6.3.0", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-6.5.0.tgz", + "integrity": "sha512-xHOaWLd0hkaC/1OLcStCpfq55lPHpPNadZySDXYiYjEz5HXr1oKmtMYpn0wGizsLwrOixRdEp+j7bL8dPt4ojQ==", + "dependencies": { + "@turf/boolean-point-on-line": "^6.5.0", + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0", + "@turf/line-segment": "^6.5.0", + "@turf/meta": "^6.5.0", + "@turf/nearest-point-on-line": "^6.5.0", "deep-equal": "1.x", "geojson-rbush": "3.x" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, "node_modules/@turf/line-segment": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.3.0.tgz", - "integrity": "sha512-M+aDy83V+E7jYWNaf+b+A88yhnMrJhyg/lhAj6mU6UeB2PbruXB2qgSmmVDSE2dIknOvZZuIWNzEzUI07RO2kw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.5.0.tgz", + "integrity": "sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw==", "dependencies": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "@turf/meta": "^6.3.0" + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0", + "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, "node_modules/@turf/meta": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.3.0.tgz", - "integrity": "sha512-qBJjaAJS9H3ap0HlGXyF/Bzfl0qkA9suafX/jnDsZvWMfVLt+s+o6twKrXOGk5t7nnNON2NFRC8+czxpu104EQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.5.0.tgz", + "integrity": "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==", "dependencies": { - "@turf/helpers": "^6.3.0" + "@turf/helpers": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, "node_modules/@turf/nearest-point-on-line": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.3.0.tgz", - "integrity": "sha512-b4C9Md1VbGn9chMgdSj2grJD4w4t0owEWOKEBwOZfdhrcksyOedVvKB7XqOFdj/8Jitel40EKAC5LQTNu24kEQ==", - "dependencies": { - "@turf/bearing": "^6.3.0", - "@turf/destination": "^6.3.0", - "@turf/distance": "^6.3.0", - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "@turf/line-intersect": "^6.3.0", - "@turf/meta": "^6.3.0" + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.5.0.tgz", + "integrity": "sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg==", + "dependencies": { + "@turf/bearing": "^6.5.0", + "@turf/destination": "^6.5.0", + "@turf/distance": "^6.5.0", + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0", + "@turf/line-intersect": "^6.5.0", + "@turf/meta": "^6.5.0" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, "node_modules/@turf/union": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/union/-/union-6.3.0.tgz", - "integrity": "sha512-m8yh13Q5E0Y+YC10+iI/Qq0Txt7UmSIFByc7DfNVlMMGTceqLFa8xGwSVdFuB/d6MWwKuzKonQMl1PUx/Vd2Iw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/union/-/union-6.5.0.tgz", + "integrity": "sha512-igYWCwP/f0RFHIlC2c0SKDuM/ObBaqSljI3IdV/x71805QbIvY/BYGcJdyNcgEA6cylIGl/0VSlIbpJHZ9ldhw==", "dependencies": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "polygon-clipping": "^0.15.2" + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0", + "polygon-clipping": "^0.15.3" + }, + "funding": { + "url": "https://opencollective.com/turf" } }, "node_modules/@types/babel__core": { @@ -2152,9 +2245,9 @@ } }, "node_modules/@types/eslint": { - "version": "7.2.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", - "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", "dev": true, "dependencies": { "@types/estree": "*", @@ -2162,9 +2255,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -2200,10 +2293,15 @@ "@types/range-parser": "*" } }, + "node_modules/@types/geojson": { + "version": "7946.0.8", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", + "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==" + }, "node_modules/@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "dependencies": { "@types/minimatch": "*", @@ -2220,9 +2318,9 @@ } }, "node_modules/@types/imagemin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-7.0.0.tgz", - "integrity": "sha512-BiNd5FazD5ZmJUYD9txsbrttL0P0welrb9yAPn6ykKK3kWufwFsxYqw5KdggfZQDjiNYwsBrX+Fwei0Xsw4oAw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-8.0.0.tgz", + "integrity": "sha512-B9X2CUeDv/uUeY9CqkzSTfmsLkeJP6PkmXlh4lODBbf9SwpmNuLS30WzUOi863dgsjY3zt3gY5q2F+UdifRi1A==", "dev": true, "dependencies": { "@types/node": "*" @@ -2278,15 +2376,15 @@ "dev": true }, "node_modules/@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, "node_modules/@types/node": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.0.tgz", - "integrity": "sha512-8/bnjSZD86ZfpBsDlCIkNXIvm+h6wi9g7IqL+kmFkQ+Wvu3JrasgLElfiPgoo8V8vVfnEi0QVS12gbl94h9YsQ==", + "version": "17.0.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", + "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==", "dev": true }, "node_modules/@types/parse-json": { @@ -2342,9 +2440,9 @@ } }, "node_modules/@types/svgo": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.5.tgz", - "integrity": "sha512-y9Pw8IK50OqFRDpdI9Is29KlWiENVW9FDvlTmGHelvTfR2brYFJbsClvulZfeq6YKacFrDsG9a39w0kJZdHLaw==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.6.tgz", + "integrity": "sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug==", "dev": true }, "node_modules/@types/ws": { @@ -2375,6 +2473,12 @@ "prettier": "^1.18.2 || ^2.0.0" } }, + "node_modules/@vue/component-compiler-utils/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "node_modules/@vue/component-compiler-utils/node_modules/postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -2548,9 +2652,9 @@ } }, "node_modules/@webpack-cli/configtest": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", - "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", + "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", "dev": true, "peerDependencies": { "webpack": "4.x.x || 5.x.x", @@ -2558,9 +2662,9 @@ } }, "node_modules/@webpack-cli/info": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", - "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", + "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", "dev": true, "dependencies": { "envinfo": "^7.7.3" @@ -2570,9 +2674,9 @@ } }, "node_modules/@webpack-cli/serve": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", - "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", + "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", "dev": true, "peerDependencies": { "webpack-cli": "4.x.x" @@ -2596,13 +2700,13 @@ "dev": true }, "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" @@ -2621,9 +2725,9 @@ } }, "node_modules/acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -2642,6 +2746,20 @@ "node": ">=8.9" } }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -2689,9 +2807,9 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -2728,33 +2846,6 @@ "node": ">=6" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -2934,12 +3025,6 @@ "postcss": "^8.1.0" } }, - "node_modules/autoprefixer/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, "node_modules/babel-loader": { "version": "8.2.3", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", @@ -2959,50 +3044,6 @@ "webpack": ">=2" } }, - "node_modules/babel-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", @@ -3036,13 +3077,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz", - "integrity": "sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.20.0" + "core-js-compat": "^3.21.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -3345,12 +3386,6 @@ "url": "https://opencollective.com/browserslist" } }, - "node_modules/browserslist/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, "node_modules/buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", @@ -3363,9 +3398,9 @@ } }, "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "node_modules/buffer-indexof": { @@ -3426,6 +3461,15 @@ "tslib": "^2.0.3" } }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -3439,9 +3483,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001301", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz", - "integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==", + "version": "1.0.30001311", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001311.tgz", + "integrity": "sha512-mleTFtFKfykEeW34EyfhGIFjGCqzhh38Y0LhdQ9aWF+HorZTtdgKV/1hEE0NlFkG2ubvisPV6l400tlbPys98A==", "dev": true, "funding": { "type": "opencollective", @@ -3509,12 +3553,6 @@ "node": ">=6.0" } }, - "node_modules/ci-info": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", - "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", - "dev": true - }, "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -3526,9 +3564,9 @@ } }, "node_modules/clean-css": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz", - "integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz", + "integrity": "sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg==", "dev": true, "dependencies": { "source-map": "~0.6.0" @@ -3556,19 +3594,18 @@ } }, "node_modules/cli-table3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", - "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", "dev": true, "dependencies": { - "object-assign": "^4.1.0", "string-width": "^4.2.0" }, "engines": { "node": "10.* || >= 12.*" }, "optionalDependencies": { - "colors": "^1.1.2" + "colors": "1.4.0" } }, "node_modules/cliui": { @@ -3597,9 +3634,9 @@ } }, "node_modules/collect.js": { - "version": "4.28.6", - "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.28.6.tgz", - "integrity": "sha512-NAyuk1DnCotRaDZIS5kJ4sptgkwOeYqElird10yziN5JBuwYOGkOTguhNcPn5g344IfylZecxNYZAVXgv19p5Q==", + "version": "4.31.3", + "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.31.3.tgz", + "integrity": "sha512-pHXhGzo5qftTTlEj88MCRXN8YuhARhmEnCOmc7wzBlI+5fVVC5VZ9Z/Z5KEDuM90Fgwv025Fc2Gk4VpFKMrzQA==", "dev": true }, "node_modules/color-convert": { @@ -3819,9 +3856,9 @@ } }, "node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "dependencies": { "safe-buffer": "~5.1.1" @@ -3843,9 +3880,9 @@ "dev": true }, "node_modules/core-js-compat": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.3.tgz", - "integrity": "sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz", + "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==", "dev": true, "dependencies": { "browserslist": "^4.19.1", @@ -3866,9 +3903,9 @@ } }, "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "node_modules/cosmiconfig": { @@ -4021,31 +4058,30 @@ } }, "node_modules/css-loader": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", - "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.6.0.tgz", + "integrity": "sha512-FK7H2lisOixPT406s5gZM1S3l8GrfhEBT3ZiL2UX1Ng1XWs0y2GPllz/OTyvbaHe12VgQrIXIzuEGVlbUhodqg==", "dev": true, + "peer": true, "dependencies": { "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", + "postcss": "^8.4.5", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", + "postcss-value-parser": "^4.2.0", "semver": "^7.3.5" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" + "webpack": "^5.0.0" } }, "node_modules/css-loader/node_modules/lru-cache": { @@ -4053,6 +4089,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "peer": true, "dependencies": { "yallist": "^4.0.0" }, @@ -4065,6 +4102,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, + "peer": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -4079,7 +4117,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "peer": true }, "node_modules/css-select": { "version": "4.2.1", @@ -4168,12 +4207,12 @@ } }, "node_modules/cssnano": { - "version": "5.0.16", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.16.tgz", - "integrity": "sha512-ryhRI9/B9VFCwPbb1z60LLK5/ldoExi7nwdnJzpkLZkm2/r7j2X3jfY+ZvDVJhC/0fPZlrAguYdHNFg0iglPKQ==", + "version": "5.0.17", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.17.tgz", + "integrity": "sha512-fmjLP7k8kL18xSspeXTzRhaFtRI7DL9b8IcXR80JgtnWBpvAzHT7sCR/6qdn0tnxIaINUN6OEQu83wF57Gs3Xw==", "dev": true, "dependencies": { - "cssnano-preset-default": "^5.1.11", + "cssnano-preset-default": "^5.1.12", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, @@ -4189,40 +4228,40 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.11.tgz", - "integrity": "sha512-ETet5hqHxmzQq2ynXMOQofKuLm7VOjMiOB7E2zdtm/hSeCKlD9fabzIUV4GoPcRyJRHi+4kGf0vsfGYbQ4nmPw==", + "version": "5.1.12", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.12.tgz", + "integrity": "sha512-rO/JZYyjW1QNkWBxMGV28DW7d98UDLaF759frhli58QFehZ+D/LSmwQ2z/ylBAe2hUlsIWTq6NYGfQPq65EF9w==", "dev": true, "dependencies": { "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-calc": "^8.2.0", - "postcss-colormin": "^5.2.4", - "postcss-convert-values": "^5.0.3", - "postcss-discard-comments": "^5.0.2", - "postcss-discard-duplicates": "^5.0.2", - "postcss-discard-empty": "^5.0.2", - "postcss-discard-overridden": "^5.0.3", - "postcss-merge-longhand": "^5.0.5", - "postcss-merge-rules": "^5.0.5", - "postcss-minify-font-values": "^5.0.3", - "postcss-minify-gradients": "^5.0.5", - "postcss-minify-params": "^5.0.4", - "postcss-minify-selectors": "^5.1.2", - "postcss-normalize-charset": "^5.0.2", - "postcss-normalize-display-values": "^5.0.2", - "postcss-normalize-positions": "^5.0.3", - "postcss-normalize-repeat-style": "^5.0.3", - "postcss-normalize-string": "^5.0.3", - "postcss-normalize-timing-functions": "^5.0.2", - "postcss-normalize-unicode": "^5.0.3", - "postcss-normalize-url": "^5.0.4", - "postcss-normalize-whitespace": "^5.0.3", - "postcss-ordered-values": "^5.0.4", - "postcss-reduce-initial": "^5.0.2", - "postcss-reduce-transforms": "^5.0.3", - "postcss-svgo": "^5.0.3", - "postcss-unique-selectors": "^5.0.3" + "postcss-colormin": "^5.2.5", + "postcss-convert-values": "^5.0.4", + "postcss-discard-comments": "^5.0.3", + "postcss-discard-duplicates": "^5.0.3", + "postcss-discard-empty": "^5.0.3", + "postcss-discard-overridden": "^5.0.4", + "postcss-merge-longhand": "^5.0.6", + "postcss-merge-rules": "^5.0.6", + "postcss-minify-font-values": "^5.0.4", + "postcss-minify-gradients": "^5.0.6", + "postcss-minify-params": "^5.0.5", + "postcss-minify-selectors": "^5.1.3", + "postcss-normalize-charset": "^5.0.3", + "postcss-normalize-display-values": "^5.0.3", + "postcss-normalize-positions": "^5.0.4", + "postcss-normalize-repeat-style": "^5.0.4", + "postcss-normalize-string": "^5.0.4", + "postcss-normalize-timing-functions": "^5.0.3", + "postcss-normalize-unicode": "^5.0.4", + "postcss-normalize-url": "^5.0.5", + "postcss-normalize-whitespace": "^5.0.4", + "postcss-ordered-values": "^5.0.5", + "postcss-reduce-initial": "^5.0.3", + "postcss-reduce-transforms": "^5.0.4", + "postcss-svgo": "^5.0.4", + "postcss-unique-selectors": "^5.0.4" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -4232,9 +4271,9 @@ } }, "node_modules/cssnano-utils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.1.tgz", - "integrity": "sha512-VNCHL364lh++/ono+S3j9NlUK+d97KNkxI77NlqZU2W3xd2/qmyN61dsa47pTpb55zuU4G4lI7qFjAXZJH1OAQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.2.tgz", + "integrity": "sha512-KhprijuQv2sP4kT92sSQwhlK3SJTbDIsxcfIEySB0O+3m9esFOai7dP9bMx5enHAh2MwarVIcnwiWoOm01RIbQ==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -4272,9 +4311,9 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -4314,9 +4353,9 @@ } }, "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "node_modules/default-gateway": { @@ -4514,9 +4553,9 @@ } }, "node_modules/dom-serializer/node_modules/domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -4580,9 +4619,9 @@ } }, "node_modules/domutils/node_modules/domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" @@ -4626,9 +4665,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.51", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.51.tgz", - "integrity": "sha512-JNEmcYl3mk1tGQmy0EvL5eik/CKSBuzAyGP0QFdG6LIgxQe3II0BL1m2zKc2MZMf3uGqHWE1TFddJML0RpjSHQ==", + "version": "1.4.68", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", + "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==", "dev": true }, "node_modules/elliptic": { @@ -4677,9 +4716,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.0.tgz", + "integrity": "sha512-weDYmzbBygL7HzGGS26M3hGQx68vehdEg6VUmqSOaFzXExFqlnKuSvsEJCVGQHScS8CQMbrAqftT+AzzHNt/YA==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -4785,37 +4824,43 @@ "dev": true }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", - "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "dependencies": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", + "glob-parent": "^5.1.2", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", @@ -4824,7 +4869,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.21", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -4833,7 +4878,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -4848,56 +4893,79 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.9.0.tgz", - "integrity": "sha512-2Q0qQp5+5h+pZvJKCbG1/jCRUYrdgAz5BYKGyTlp2NU8mx09u3Hp7PsH6d5qef6ojuPoCXMnrbbDxeoplihrSw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz", + "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==", "dev": true, "dependencies": { "eslint-utils": "^2.1.0", "natural-compare": "^1.4.0", - "semver": "^7.3.2", - "vue-eslint-parser": "^7.6.0" + "semver": "^6.3.0", + "vue-eslint-parser": "^7.10.0" }, "engines": { "node": ">=8.10" }, "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0" + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/eslint-plugin-vue/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/eslint-plugin-vue/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-vue/node_modules/espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" }, "engines": { - "node": ">=10" + "node": ">=6.0.0" } }, "node_modules/eslint-plugin-vue/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-vue/node_modules/vue-eslint-parser": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", + "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^6.3.0" }, "engines": { - "node": ">=10" + "node": ">=8.10" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5.0.0" } }, - "node_modules/eslint-plugin-vue/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -5085,9 +5153,9 @@ } }, "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" @@ -5106,9 +5174,9 @@ } }, "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" @@ -5331,18 +5399,18 @@ ] }, "node_modules/ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", "dev": true, "dependencies": { - "type": "^2.0.0" + "type": "^2.5.0" } }, "node_modules/ext/node_modules/type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==", "dev": true }, "node_modules/fast-deep-equal": { @@ -5386,9 +5454,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -5406,21 +5474,6 @@ "node": ">=0.8.0" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -5453,6 +5506,38 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/file-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/file-type": { "version": "12.4.2", "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", @@ -5551,15 +5636,15 @@ } }, "node_modules/flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "node_modules/follow-redirects": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", - "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", "dev": true, "funding": [ { @@ -5586,9 +5671,9 @@ } }, "node_modules/fraction.js": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz", - "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.3.tgz", + "integrity": "sha512-pUHWWt6vHzZZiQJcM6S/0PXfS+g6FM4BF5rj9wZyreivhQPdsh5PpE25VtSNxq80wHS5RfY51Ii+8Z0Zl/pmzg==", "dev": true, "engines": { "node": "*" @@ -5676,14 +5761,28 @@ } }, "node_modules/geojson-rbush": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.1.2.tgz", - "integrity": "sha512-grkfdg3HIeTjwTfiJe5FT8+fGU3fABCc+vRJDBwdQz9kkLF0Sbif2gs2JUzjewwgmnvLGy9fInySDeADoNuk7w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.2.0.tgz", + "integrity": "sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w==", "dependencies": { "@turf/bbox": "*", "@turf/helpers": "6.x", "@turf/meta": "6.x", - "rbush": "^2.0.0" + "@types/geojson": "7946.0.8", + "rbush": "^3.0.1" + } + }, + "node_modules/geojson-rbush/node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "node_modules/geojson-rbush/node_modules/rbush": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + "dependencies": { + "quickselect": "^2.0.0" } }, "node_modules/get-caller-file": { @@ -5759,9 +5858,9 @@ "dev": true }, "node_modules/globals": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", - "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -5793,9 +5892,9 @@ } }, "node_modules/globby/node_modules/ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true, "engines": { "node": ">= 4" @@ -5850,6 +5949,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -5974,6 +6087,38 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/html-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/html-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/html-minifier-terser": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", @@ -5996,9 +6141,9 @@ } }, "node_modules/html-minifier-terser/node_modules/clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", "dev": true, "dependencies": { "source-map": "~0.6.0" @@ -6025,29 +6170,6 @@ "node": ">=0.10.0" } }, - "node_modules/html-minifier-terser/node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/html-minifier-terser/node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "node_modules/htmlparser2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", @@ -6103,9 +6225,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.2.tgz", - "integrity": "sha512-XtmDN5w+vdFTBZaYhdJAbMqn0DP/EhkUaAeo963mojwpKMMbw6nivtFKw07D7DDOH745L5k0VL0P8KRYNEVF/g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz", + "integrity": "sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA==", "dev": true, "dependencies": { "@types/http-proxy": "^1.17.8", @@ -6119,6 +6241,11 @@ }, "peerDependencies": { "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } } }, "node_modules/https-browserify": { @@ -6221,31 +6348,11 @@ "imagemin": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/img-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/img-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } + "node_modules/immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true }, "node_modules/import-fresh": { "version": "3.3.0", @@ -6341,11 +6448,12 @@ } }, "node_modules/is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dependencies": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6391,9 +6499,12 @@ } }, "node_modules/is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -6435,9 +6546,9 @@ } }, "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" @@ -6498,12 +6609,12 @@ } }, "node_modules/is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6558,9 +6669,9 @@ } }, "node_modules/jest-worker": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", - "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "dependencies": { "@types/node": "*", @@ -6799,6 +6910,48 @@ "node": ">=0.4.0" } }, + "node_modules/laravel-mix/node_modules/css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/laravel-mix/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, "node_modules/laravel-mix/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -6811,6 +6964,24 @@ "node": ">=10" } }, + "node_modules/laravel-mix/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/laravel-mix/node_modules/semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -6910,17 +7081,29 @@ } }, "node_modules/loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "json5": "^1.0.1" }, "engines": { - "node": ">=8.9.0" + "node": ">=4.0.0" + } + }, + "node_modules/loader-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, "node_modules/locate-path": { @@ -6941,12 +7124,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -6959,6 +7136,12 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -7166,21 +7349,21 @@ } }, "node_modules/mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "dependencies": { - "mime-db": "1.50.0" + "mime-db": "1.51.0" }, "engines": { "node": ">= 0.6" @@ -7216,6 +7399,38 @@ "webpack": "^4.4.0 || ^5.0.0" } }, + "node_modules/mini-css-extract-plugin/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -7229,9 +7444,9 @@ "dev": true }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -7302,9 +7517,9 @@ "dev": true }, "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "engines": { "node": ">= 0.6" @@ -7447,9 +7662,9 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", "dev": true }, "node_modules/normalize-path": { @@ -7893,15 +8108,15 @@ } }, "node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "node_modules/picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { "node": ">=8.6" @@ -7964,14 +8179,14 @@ } }, "node_modules/postcss": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", - "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", + "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", "dev": true, "dependencies": { - "nanoid": "^3.1.30", + "nanoid": "^3.2.0", "picocolors": "^1.0.0", - "source-map-js": "^1.0.1" + "source-map-js": "^1.0.2" }, "engines": { "node": "^10 || ^12 || >=14" @@ -7982,22 +8197,22 @@ } }, "node_modules/postcss-calc": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.2.tgz", - "integrity": "sha512-B5R0UeB4zLJvxNt1FVCaDZULdzsKLPc6FhjFJ+xwFiq7VG4i9cuaJLxVjNtExNK8ocm3n2o4unXXLiVX1SCqxA==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.2.2" } }, "node_modules/postcss-colormin": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.4.tgz", - "integrity": "sha512-rYlC5015aNqVQt/B6Cy156g7sH5tRUJGmT9xeagYthtKehetbKx7jHxhyLpulP4bs4vbp8u/B2rac0J7S7qPQg==", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.5.tgz", + "integrity": "sha512-+X30aDaGYq81mFqwyPpnYInsZQnNpdxMX0ajlY7AExCexEFkPVV+KrO7kXwayqEWL2xwEbNQ4nUO0ZsRWGnevg==", "dev": true, "dependencies": { "browserslist": "^4.16.6", @@ -8013,9 +8228,9 @@ } }, "node_modules/postcss-convert-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.3.tgz", - "integrity": "sha512-fVkjHm2T0PSMqXUCIhHNWVGjhB9mHEWX2GboVs7j3iCgr6FpIl9c/IdXy0PHWZSQ9LFTRgmj98amxJE6KOnlsA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.4.tgz", + "integrity": "sha512-bugzSAyjIexdObovsPZu/sBCTHccImJxLyFgeV0MmNBm/Lw5h5XnjfML6gzEmJ3A6nyfCW7hb1JXzcsA4Zfbdw==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8028,9 +8243,9 @@ } }, "node_modules/postcss-discard-comments": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.2.tgz", - "integrity": "sha512-6VQ3pYTsJHEsN2Bic88Aa7J/Brn4Bv8j/rqaFQZkH+pcVkKYwxCIvoMQkykEW7fBjmofdTnQgcivt5CCBJhtrg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.3.tgz", + "integrity": "sha512-6W5BemziRoqIdAKT+1QjM4bNcJAQ7z7zk073730NHg4cUXh3/rQHHj7pmYxUB9aGhuRhBiUf0pXvIHkRwhQP0Q==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8040,9 +8255,9 @@ } }, "node_modules/postcss-discard-duplicates": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz", - "integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.3.tgz", + "integrity": "sha512-vPtm1Mf+kp7iAENTG7jI1MN1lk+fBqL5y+qxyi4v3H+lzsXEdfS3dwUZD45KVhgzDEgduur8ycB4hMegyMTeRw==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8052,9 +8267,9 @@ } }, "node_modules/postcss-discard-empty": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.2.tgz", - "integrity": "sha512-SxBsbTjlsKUvZLL+dMrdWauuNZU8TBq5IOL/DHa6jBUSXFEwmDqeXRfTIK/FQpPTa8MJMxEHjSV3UbiuyLARPQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.3.tgz", + "integrity": "sha512-xGJugpaXKakwKI7sSdZjUuN4V3zSzb2Y0LOlmTajFbNinEjTfVs9PFW2lmKBaC/E64WwYppfqLD03P8l9BuueA==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8064,9 +8279,9 @@ } }, "node_modules/postcss-discard-overridden": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.3.tgz", - "integrity": "sha512-yRTXknIZA4k8Yo4FiF1xbsLj/VBxfXEWxJNIrtIy6HC9KQ4xJxcPtoaaskh6QptCGrrcGnhKsTsENTRPZOBu4g==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.4.tgz", + "integrity": "sha512-3j9QH0Qh1KkdxwiZOW82cId7zdwXVQv/gRXYDnwx5pBtR1sTkU4cXRK9lp5dSdiM0r0OICO/L8J6sV1/7m0kHg==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8156,13 +8371,13 @@ "dev": true }, "node_modules/postcss-merge-longhand": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.5.tgz", - "integrity": "sha512-R2BCPJJ/U2oh1uTWEYn9CcJ7MMcQ1iIbj9wfr2s/zHu5om5MP/ewKdaunpfJqR1WYzqCsgnXuRoVXPAzxdqy8g==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.6.tgz", + "integrity": "sha512-rkmoPwQO6ymJSmWsX6l2hHeEBQa7C4kJb9jyi5fZB1sE8nSCv7sqchoYPixRwX/yvLoZP2y6FA5kcjiByeJqDg==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.0.2" + "stylehacks": "^5.0.3" }, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8172,14 +8387,14 @@ } }, "node_modules/postcss-merge-rules": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.5.tgz", - "integrity": "sha512-3Oa26/Pb9VOFVksJjFG45SNoe4nhGvJ2Uc6TlRimqF8uhfOCEhVCaJ3rvEat5UFOn2UZqTY5Da8dFgCh3Iq0Ug==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.6.tgz", + "integrity": "sha512-nzJWJ9yXWp8AOEpn/HFAW72WKVGD2bsLiAmgw4hDchSij27bt6TF+sIK0cJUBAYT3SGcjtGGsOR89bwkkMuMgQ==", "dev": true, "dependencies": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-selector-parser": "^6.0.5" }, "engines": { @@ -8190,9 +8405,9 @@ } }, "node_modules/postcss-minify-font-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.3.tgz", - "integrity": "sha512-bC45rVzEwsLhv/cL1eCjoo2OOjbSk9I7HKFBYnBvtyuIZlf7uMipMATXtA0Fc3jwPo3wuPIW1jRJWKzflMh1sA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.4.tgz", + "integrity": "sha512-RN6q3tyuEesvyCYYFCRGJ41J1XFvgV+dvYGHr0CeHv8F00yILlN8Slf4t8XW4IghlfZYCeyRrANO6HpJ948ieA==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8205,13 +8420,13 @@ } }, "node_modules/postcss-minify-gradients": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.5.tgz", - "integrity": "sha512-/YjvXs8PepsoiZAIpjstOO4IHKwFAqYNqbA1yVdqklM84tbUUneh6omJxGlRlF3mi6K5Pa067Mg6IwqEnYC8Zg==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.6.tgz", + "integrity": "sha512-E/dT6oVxB9nLGUTiY/rG5dX9taugv9cbLNTFad3dKxOO+BQg25Q/xo2z2ddG+ZB1CbkZYaVwx5blY8VC7R/43A==", "dev": true, "dependencies": { "colord": "^2.9.1", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -8222,13 +8437,13 @@ } }, "node_modules/postcss-minify-params": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.4.tgz", - "integrity": "sha512-Z0vjod9lRZEmEPfEmA2sCfjbfEEFKefMD3RDIQSUfXK4LpCyWkX1CniUgyNvnjJFLDPSxtgKzozhHhPHKoeGkg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.5.tgz", + "integrity": "sha512-YBNuq3Rz5LfLFNHb9wrvm6t859b8qIqfXsWeK7wROm3jSKNpO1Y5e8cOyBv6Acji15TgSrAwb3JkVNCqNyLvBg==", "dev": true, "dependencies": { "browserslist": "^4.16.6", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -8239,9 +8454,9 @@ } }, "node_modules/postcss-minify-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.2.tgz", - "integrity": "sha512-gpn1nJDMCf3g32y/7kl+jsdamhiYT+/zmEt57RoT9GmzlixBNRPohI7k8UIHelLABhdLf3MSZhtM33xuH5eQOQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.3.tgz", + "integrity": "sha512-9RJfTiQEKA/kZhMaEXND893nBqmYQ8qYa/G+uPdVnXF6D/FzpfI6kwBtWEcHx5FqDbA79O9n6fQJfrIj6M8jvQ==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.5" @@ -8313,9 +8528,9 @@ } }, "node_modules/postcss-normalize-charset": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.2.tgz", - "integrity": "sha512-fEMhYXzO8My+gC009qDc/3bgnFP8Fv1Ic8uw4ec4YTlhIOw63tGPk1YFd7fk9bZUf1DAbkhiL/QPWs9JLqdF2g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.3.tgz", + "integrity": "sha512-iKEplDBco9EfH7sx4ut7R2r/dwTnUqyfACf62Unc9UiyFuI7uUqZZtY+u+qp7g8Qszl/U28HIfcsI3pEABWFfA==", "dev": true, "engines": { "node": "^10 || ^12 || >=14.0" @@ -8325,9 +8540,9 @@ } }, "node_modules/postcss-normalize-display-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", - "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.3.tgz", + "integrity": "sha512-FIV5FY/qs4Ja32jiDb5mVj5iWBlS3N8tFcw2yg98+8MkRgyhtnBgSC0lxU+16AMHbjX5fbSJgw5AXLMolonuRQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8340,9 +8555,9 @@ } }, "node_modules/postcss-normalize-positions": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.3.tgz", - "integrity": "sha512-U+rmhjrNBvIGYqr/1tD4wXPFFMKUbXsYXvlUCzLi0tOCUS6LoeEAnmVXXJY/MEB/1CKZZwBSs2tmzGawcygVBA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.4.tgz", + "integrity": "sha512-qynirjBX0Lc73ROomZE3lzzmXXTu48/QiEzKgMeqh28+MfuHLsuqC9po4kj84igZqqFGovz8F8hf44hA3dPYmQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8355,9 +8570,9 @@ } }, "node_modules/postcss-normalize-repeat-style": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.3.tgz", - "integrity": "sha512-uk1+xYx0AMbA3nLSNhbDrqbf/rx+Iuq5tVad2VNyaxxJzx79oGieJ6D9F6AfOL2GtiIbP7vTYlpYHtG+ERFXTg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.4.tgz", + "integrity": "sha512-Innt+wctD7YpfeDR7r5Ik6krdyppyAg2HBRpX88fo5AYzC1Ut/l3xaxACG0KsbX49cO2n5EB13clPwuYVt8cMA==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8370,9 +8585,9 @@ } }, "node_modules/postcss-normalize-string": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.3.tgz", - "integrity": "sha512-Mf2V4JbIDboNGQhW6xW0YREDiYXoX3WrD3EjKkjvnpAJ6W4qqjLnK/c9aioyVFaWWHVdP5zVRw/9DI5S3oLDFw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.4.tgz", + "integrity": "sha512-Dfk42l0+A1CDnVpgE606ENvdmksttLynEqTQf5FL3XGQOyqxjbo25+pglCUvziicTxjtI2NLUR6KkxyUWEVubQ==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8385,9 +8600,9 @@ } }, "node_modules/postcss-normalize-timing-functions": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", - "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.3.tgz", + "integrity": "sha512-QRfjvFh11moN4PYnJ7hia4uJXeFotyK3t2jjg8lM9mswleGsNw2Lm3I5wO+l4k1FzK96EFwEVn8X8Ojrp2gP4g==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8400,9 +8615,9 @@ } }, "node_modules/postcss-normalize-unicode": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.3.tgz", - "integrity": "sha512-uNC7BmS/7h6to2UWa4RFH8sOTzu2O9dVWPE/F9Vm9GdhONiD/c1kNaCLbmsFHlKWcEx7alNUChQ+jH/QAlqsQw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.4.tgz", + "integrity": "sha512-W79Regn+a+eXTzB+oV/8XJ33s3pDyFTND2yDuUCo0Xa3QSy1HtNIfRVPXNubHxjhlqmMFADr3FSCHT84ITW3ig==", "dev": true, "dependencies": { "browserslist": "^4.16.6", @@ -8416,9 +8631,9 @@ } }, "node_modules/postcss-normalize-url": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", - "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.5.tgz", + "integrity": "sha512-Ws3tX+PcekYlXh+ycAt0wyzqGthkvVtZ9SZLutMVvHARxcpu4o7vvXcNoiNKyjKuWecnjS6HDI3fjBuDr5MQxQ==", "dev": true, "dependencies": { "normalize-url": "^6.0.1", @@ -8432,9 +8647,9 @@ } }, "node_modules/postcss-normalize-whitespace": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.3.tgz", - "integrity": "sha512-333JWRnX655fSoUbufJ10HJop3c8mrpKkCCUnEmgz/Cb/QEtW+/TMZwDAUt4lnwqP6tCCk0x0b58jqvDgiQm/A==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.4.tgz", + "integrity": "sha512-wsnuHolYZjMwWZJoTC9jeI2AcjA67v4UuidDrPN9RnX8KIZfE+r2Nd6XZRwHVwUiHmRvKQtxiqo64K+h8/imaw==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8447,12 +8662,12 @@ } }, "node_modules/postcss-ordered-values": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.4.tgz", - "integrity": "sha512-taKtGDZtyYUMVYkg+MuJeBUiTF6cGHZmo/qcW7ibvW79UlyKuSHbo6dpCIiqI+j9oJsXWzP+ovIxoyLDOeQFdw==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.5.tgz", + "integrity": "sha512-mfY7lXpq+8bDEHfP+muqibDPhZ5eP9zgBEF9XRvoQgXcQe2Db3G1wcvjbnfjXG6wYsl+0UIjikqq4ym1V2jGMQ==", "dev": true, "dependencies": { - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -8463,9 +8678,9 @@ } }, "node_modules/postcss-reduce-initial": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", - "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.3.tgz", + "integrity": "sha512-c88TkSnQ/Dnwgb4OZbKPOBbCaauwEjbECP5uAuFPOzQ+XdjNjRH7SG0dteXrpp1LlIFEKK76iUGgmw2V0xeieA==", "dev": true, "dependencies": { "browserslist": "^4.16.6", @@ -8479,9 +8694,9 @@ } }, "node_modules/postcss-reduce-transforms": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.3.tgz", - "integrity": "sha512-yDnTUab5i7auHiNwdcL1f+pBnqQFf+7eC4cbC7D8Lc1FkvNZhtpkdad+9U4wDdFb84haupMf0rA/Zc5LcTe/3A==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.4.tgz", + "integrity": "sha512-VIJB9SFSaL8B/B7AXb7KHL6/GNNbbCHslgdzS9UDfBZYIA2nx8NLY7iD/BXFSO/1sRUILzBTfHCoW5inP37C5g==", "dev": true, "dependencies": { "postcss-value-parser": "^4.2.0" @@ -8494,9 +8709,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", + "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -8507,12 +8722,12 @@ } }, "node_modules/postcss-svgo": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", - "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.4.tgz", + "integrity": "sha512-yDKHvULbnZtIrRqhZoA+rxreWpee28JSRH/gy9727u0UCgtpv1M/9WEWY3xySlFa0zQJcqf6oCBJPR5NwkmYpg==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.1.0", + "postcss-value-parser": "^4.2.0", "svgo": "^2.7.0" }, "engines": { @@ -8523,9 +8738,9 @@ } }, "node_modules/postcss-unique-selectors": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.3.tgz", - "integrity": "sha512-V5tX2hadSSn+miVCluuK1IDGy+7jAXSOfRZ2DQ+s/4uQZb/orDYBjH0CHgFrXsRw78p4QTuEFA9kI6C956UnHQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.4.tgz", + "integrity": "sha512-5ampwoSDJCxDPoANBIlMgoBcYUHnhaiuLYJR5pj1DLnYQvMRVyFuTA5C3Bvt+aHtiqWpJkD/lXT50Vo1D0ZsAQ==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.5" @@ -8543,12 +8758,6 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "node_modules/postcss/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -8559,16 +8768,16 @@ } }, "node_modules/prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true, "optional": true, "bin": { "prettier": "bin-prettier.js" }, "engines": { - "node": ">=4" + "node": ">=10.13.0" } }, "node_modules/pretty-time": { @@ -8605,9 +8814,9 @@ } }, "node_modules/protocol-buffers-schema": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.5.1.tgz", - "integrity": "sha512-YVCvdhxWNDP8/nJDyXLuM+UFsuPk4+1PB7WGPVDzm3HTHbzFLxQYeW2iZpS4mmnXrQJGBzt230t/BbEb7PrQaw==" + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" }, "node_modules/proxy-addr": { "version": "2.0.7", @@ -8679,6 +8888,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", "dev": true, "engines": { "node": ">=0.4.x" @@ -8833,9 +9043,9 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", "dev": true, "dependencies": { "regenerate": "^1.4.2" @@ -8866,9 +9076,9 @@ "dev": true }, "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", + "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" @@ -8881,9 +9091,9 @@ } }, "node_modules/regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "engines": { "node": ">=8" @@ -8893,15 +9103,15 @@ } }, "node_modules/regexpu-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", "dev": true, "dependencies": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.0.0" }, @@ -8910,15 +9120,15 @@ } }, "node_modules/regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", "dev": true }, "node_modules/regjsparser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", "dev": true, "dependencies": { "jsesc": "~0.5.0" @@ -9073,15 +9283,6 @@ "node": ">=4" } }, - "node_modules/resolve-url-loader/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/resolve-url-loader/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -9123,6 +9324,15 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "node_modules/resolve-url-loader/node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, "node_modules/resolve-url-loader/node_modules/emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", @@ -9132,6 +9342,15 @@ "node": ">= 0.10" } }, + "node_modules/resolve-url-loader/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/resolve-url-loader/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -9313,18 +9532,20 @@ "dev": true }, "node_modules/sass": { - "version": "1.32.13", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.13.tgz", - "integrity": "sha512-dEgI9nShraqP7cXQH+lEXVf73WOPCse0QlFzSD8k+1TcOxCMwVXfQlr0jtoluZysQOyJGnfr21dLvYKDJq8HkA==", + "version": "1.49.7", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.7.tgz", + "integrity": "sha512-13dml55EMIR2rS4d/RDHHP0sXMY3+30e1TKsyXaSz3iLWVoDWEoboY8WzJd5JMnxrRHffKO3wq2mpJ0jxRJiEQ==", "dev": true, "dependencies": { - "chokidar": ">=3.0.0 <4.0.0" + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { "sass": "sass.js" }, "engines": { - "node": ">=8.9.0" + "node": ">=12.0.0" } }, "node_modules/sass-loader": { @@ -9364,50 +9585,6 @@ } } }, - "node_modules/sass-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/sass-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/sass-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/sass-loader/node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -9418,17 +9595,17 @@ } }, "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 8.9.0" }, "funding": { "type": "opencollective", @@ -9656,9 +9833,9 @@ "dev": true }, "node_modules/signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "node_modules/slash": { @@ -9726,6 +9903,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dev": true, "dependencies": { "atob": "^2.1.2", @@ -9758,6 +9936,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", "dev": true }, "node_modules/spdy": { @@ -9831,13 +10010,10 @@ } }, "node_modules/std-env": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz", - "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==", - "dev": true, - "dependencies": { - "ci-info": "^3.0.0" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.0.1.tgz", + "integrity": "sha512-mC1Ps9l77/97qeOZc+HrOL7TIaOboHqMZ24dGVQrlxFcpPpfCHpH+qfUT7Dz+6mlG8+JPA1KfBQo19iC/+Ngcw==", + "dev": true }, "node_modules/stream-browserify": { "version": "2.0.2", @@ -9958,10 +10134,42 @@ "webpack": "^4.0.0 || ^5.0.0" } }, + "node_modules/style-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/style-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/stylehacks": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.2.tgz", - "integrity": "sha512-114zeJdOpTrbQYRD4OU5UWJ99LKUaqCPJTU1HQ/n3q3BwmllFN8kHENaLnOeqVq6AhXrWfxHNZTl33iJ4oy3cQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.3.tgz", + "integrity": "sha512-ENcUdpf4yO0E1rubu8rkxI+JGQk4CgjchynZ4bDBJDfqdy+uhTRSWb8/F3Jtu+Bw5MW45Po3/aQGeIyyxgQtxg==", "dev": true, "dependencies": { "browserslist": "^4.16.6", @@ -10019,33 +10227,26 @@ "node": ">=10.13.0" } }, - "node_modules/svgo/node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, "node_modules/table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", "dev": true, "dependencies": { "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=10.0.0" } }, "node_modules/table/node_modules/ajv": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.4.0.tgz", - "integrity": "sha512-7QD2l6+KBSLwf+7MuYocbWvRPdOu63/trReTLu2KFwkgctnub1auoF+Y1WYcm09CTM7quuscrzqmASaLHC/K4Q==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -10073,13 +10274,30 @@ "node": ">=6" } }, + "node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/terser-webpack-plugin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", - "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", + "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", "dev": true, "dependencies": { - "jest-worker": "^27.4.1", + "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", @@ -10127,6 +10345,24 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/terser-webpack-plugin/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10170,6 +10406,21 @@ "node": ">= 8" } }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -10242,9 +10493,9 @@ } }, "node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", "dev": true }, "node_modules/tty-browserify": { @@ -10431,76 +10682,30 @@ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "node_modules/vue-eslint-parser": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz", - "integrity": "sha512-QXxqH8ZevBrtiZMZK0LpwaMfevQi9UL7lY6Kcp+ogWHC88AuwUPwwCIzkOUc1LR4XsYAt/F9yHXAB/QoD17QXA==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "eslint-scope": "^5.0.0", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.2.1", - "esquery": "^1.4.0", - "lodash": "^4.17.15" - }, - "engines": { - "node": ">=8.10" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, - "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" + "uuid": "dist/bin/uuid" } }, - "node_modules/vue-eslint-parser/node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - }, "engines": { - "node": ">=6.0.0" + "node": ">= 0.8" } }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, "node_modules/vue-hot-reload-api": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", @@ -10532,32 +10737,6 @@ } } }, - "node_modules/vue-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/vue-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/vue-style-loader": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", @@ -10568,36 +10747,10 @@ "loader-utils": "^1.0.2" } }, - "node_modules/vue-style-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/vue-style-loader/node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/vue-template-compiler": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz", - "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==", + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz", + "integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==", "dev": true, "dependencies": { "de-indent": "^1.0.2", @@ -10633,9 +10786,9 @@ } }, "node_modules/webpack": { - "version": "5.67.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.67.0.tgz", - "integrity": "sha512-LjFbfMh89xBDpUMgA1W9Ur6Rn/gnr2Cq1jjHFPo4v6a79/ypznSYbAyPgGhwsxBtMIaEmDD1oJoA7BEYw/Fbrw==", + "version": "5.68.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.68.0.tgz", + "integrity": "sha512-zUcqaUO0772UuuW2bzaES2Zjlm/y3kRBQDVFVCge+s2Y8mwuUTdperGaAv65/NtRL/1zanpSJOq/MD8u61vo6g==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.0", @@ -10680,15 +10833,15 @@ } }, "node_modules/webpack-cli": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", - "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", + "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.0", - "@webpack-cli/info": "^1.4.0", - "@webpack-cli/serve": "^1.6.0", + "@webpack-cli/configtest": "^1.1.1", + "@webpack-cli/info": "^1.4.1", + "@webpack-cli/serve": "^1.6.1", "colorette": "^2.0.14", "commander": "^7.0.0", "execa": "^5.0.0", @@ -10723,13 +10876,13 @@ } }, "node_modules/webpack-dev-middleware": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", - "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", + "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", "dev": true, "dependencies": { "colorette": "^2.0.10", - "memfs": "^3.2.2", + "memfs": "^3.4.1", "mime-types": "^2.1.31", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" @@ -10746,9 +10899,9 @@ } }, "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -10799,19 +10952,20 @@ } }, "node_modules/webpack-dev-server": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz", - "integrity": "sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.4.tgz", + "integrity": "sha512-nfdsb02Zi2qzkNmgtZjkrMOcXnYZ6FLKcQwpxT7MvmHKc+oTtDsBju8j+NMyAygZ9GW1jMEUpy3itHtqgEhe1A==", "dev": true, "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", "@types/serve-index": "^1.9.1", "@types/sockjs": "^0.3.33", "@types/ws": "^8.2.2", "ansi-html-community": "^0.0.8", "bonjour": "^3.5.0", - "chokidar": "^3.5.2", + "chokidar": "^3.5.3", "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^1.6.0", @@ -10831,8 +10985,8 @@ "sockjs": "^0.3.21", "spdy": "^4.0.2", "strip-ansi": "^7.0.0", - "webpack-dev-middleware": "^5.3.0", - "ws": "^8.1.0" + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" @@ -10850,9 +11004,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -11000,6 +11154,24 @@ "acorn": "^8" } }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/webpack/node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -11010,22 +11182,18 @@ } }, "node_modules/webpackbar": { - "version": "5.0.0-3", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", - "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", + "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", "dev": true, "dependencies": { - "ansi-escapes": "^4.3.1", "chalk": "^4.1.0", - "consola": "^2.15.0", - "figures": "^3.2.0", + "consola": "^2.15.3", "pretty-time": "^1.1.0", - "std-env": "^2.2.1", - "text-table": "^0.2.0", - "wrap-ansi": "^7.0.0" + "std-env": "^3.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" }, "peerDependencies": { "webpack": "3 || 4 || 5" @@ -11105,9 +11273,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", - "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -11187,6 +11355,15 @@ } }, "dependencies": { + "@ampproject/remapping": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.0.tgz", + "integrity": "sha512-d5RysTlJ7hmw5Tw4UxgxcY3lkMe92n8sXCcuLPAyIAHK6j8DefDwtGnVVDgOnv+RnEosulDJ9NPKQL27bDId0g==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" + } + }, "@babel/code-frame": { "version": "7.12.11", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", @@ -11197,32 +11374,32 @@ } }, "@babel/compat-data": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.8.tgz", - "integrity": "sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", + "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", "dev": true }, "@babel/core": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", - "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz", + "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==", "dev": true, "requires": { + "@ampproject/remapping": "^2.0.0", "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", + "@babel/generator": "^7.17.0", "@babel/helper-compilation-targets": "^7.16.7", "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.12", + "@babel/helpers": "^7.17.2", + "@babel/parser": "^7.17.0", "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.10", - "@babel/types": "^7.16.8", + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "semver": "^6.3.0" }, "dependencies": { "@babel/code-frame": { @@ -11243,12 +11420,12 @@ } }, "@babel/generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.8.tgz", - "integrity": "sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", + "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", "dev": true, "requires": { - "@babel/types": "^7.16.8", + "@babel/types": "^7.17.0", "jsesc": "^2.5.1", "source-map": "^0.5.0" } @@ -11293,9 +11470,9 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.10.tgz", - "integrity": "sha512-wDeej0pu3WN/ffTxMNCPW5UCiOav8IcLRxSIyp/9+IF2xJUM9h/OYjg0IJLHaL6F8oU8kqMz9nc1vryXhMsgXg==", + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", + "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", @@ -11308,13 +11485,13 @@ } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz", - "integrity": "sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^4.7.1" + "regexpu-core": "^5.0.1" } }, "@babel/helper-define-polyfill-provider": { @@ -11513,14 +11690,14 @@ } }, "@babel/helpers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.7.tgz", - "integrity": "sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw==", + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", + "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", "dev": true, "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" + "@babel/traverse": "^7.17.0", + "@babel/types": "^7.17.0" } }, "@babel/highlight": { @@ -11569,6 +11746,12 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -11587,9 +11770,9 @@ } }, "@babel/parser": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.12.tgz", - "integrity": "sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", + "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", "dev": true }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { @@ -12154,9 +12337,9 @@ } }, "@babel/plugin-transform-runtime": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.10.tgz", - "integrity": "sha512-9nwTiqETv2G7xI4RvXHNfpGdr8pAA+Q/YtN3yLK7OoK7n9OibVm/xymJ838a9A6E/IciOLPj82lZk0fW6O4O7w==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", "dev": true, "requires": { "@babel/helper-module-imports": "^7.16.7", @@ -12344,9 +12527,9 @@ } }, "@babel/runtime": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.7.tgz", - "integrity": "sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ==", + "version": "7.17.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", + "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", "dev": true, "requires": { "regenerator-runtime": "^0.13.4" @@ -12375,19 +12558,19 @@ } }, "@babel/traverse": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.10.tgz", - "integrity": "sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", + "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", + "@babel/generator": "^7.17.0", "@babel/helper-environment-visitor": "^7.16.7", "@babel/helper-function-name": "^7.16.7", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.16.10", - "@babel/types": "^7.16.8", + "@babel/parser": "^7.17.0", + "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -12410,9 +12593,9 @@ } }, "@babel/types": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.8.tgz", - "integrity": "sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -12441,37 +12624,59 @@ "dev": true }, "@eslint/eslintrc": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", - "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.1.1", "espree": "^7.3.0", - "globals": "^12.1.0", + "globals": "^13.9.0", "ignore": "^4.0.6", "import-fresh": "^3.2.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", - "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, - "requires": { - "type-fest": "^0.8.1" - } - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true - } + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/resolve-uri": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", + "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", + "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", + "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, "@nodelib/fs.scandir": { @@ -12491,9 +12696,9 @@ "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", - "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { "@nodelib/fs.scandir": "2.1.5", @@ -12507,82 +12712,82 @@ "dev": true }, "@turf/area": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.3.0.tgz", - "integrity": "sha512-Y1cYyAQ2fk94npdgOeMF4msc2uabHY1m7A7ntixf1I8rkyDd6/iHh1IMy1QsM+VZXAEwDwsXhu+ZFYd3Jkeg4A==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.5.0.tgz", + "integrity": "sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg==", "requires": { - "@turf/helpers": "^6.3.0", - "@turf/meta": "^6.3.0" + "@turf/helpers": "^6.5.0", + "@turf/meta": "^6.5.0" } }, "@turf/bbox": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.3.0.tgz", - "integrity": "sha512-N4ue5Xopu1qieSHP2MA/CJGWHPKaTrVXQJjzHRNcY1vtsO126xbSaJhWUrFc5x5vVkXp0dcucGryO0r5m4o/KA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.5.0.tgz", + "integrity": "sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==", "requires": { - "@turf/helpers": "^6.3.0", - "@turf/meta": "^6.3.0" + "@turf/helpers": "^6.5.0", + "@turf/meta": "^6.5.0" } }, "@turf/bearing": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-6.3.0.tgz", - "integrity": "sha512-apuUm9xN6VQLO33m7F2mmzlm3dHfeesJjMSzh9iehGtgmp1IaVndjdcIvs0ieiwm8bN9UhwXpfPtO3pV0n9SFw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-6.5.0.tgz", + "integrity": "sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A==", "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0" } }, "@turf/boolean-contains": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-6.3.0.tgz", - "integrity": "sha512-1MW7B5G5tIu1lnAv3pXyFzl75wfBYnbA2GhwHDb4okIXMhloy/r5uIqAZHo0fOXykKVJS/gIfA/MioKIftoTug==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-6.5.0.tgz", + "integrity": "sha512-4m8cJpbw+YQcKVGi8y0cHhBUnYT+QRfx6wzM4GI1IdtYH3p4oh/DOBJKrepQyiDzFDaNIjxuWXBh0ai1zVwOQQ==", "requires": { - "@turf/bbox": "^6.3.0", - "@turf/boolean-point-in-polygon": "^6.3.0", - "@turf/boolean-point-on-line": "^6.3.0", - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" + "@turf/bbox": "^6.5.0", + "@turf/boolean-point-in-polygon": "^6.5.0", + "@turf/boolean-point-on-line": "^6.5.0", + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0" } }, "@turf/boolean-overlap": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-6.3.0.tgz", - "integrity": "sha512-rWh8JKTqlJ1m27FY8YeWcGoXutLyCVfSi2/8AOkXi2F+36P9GM4tHz19yKY3btbnHJTgSZf1xO2YhX2d0BmNqg==", - "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "@turf/line-intersect": "^6.3.0", - "@turf/line-overlap": "^6.3.0", - "@turf/meta": "^6.3.0", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-6.5.0.tgz", + "integrity": "sha512-8btMIdnbXVWUa1M7D4shyaSGxLRw6NjMcqKBcsTXcZdnaixl22k7ar7BvIzkaRYN3SFECk9VGXfLncNS3ckQUw==", + "requires": { + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0", + "@turf/line-intersect": "^6.5.0", + "@turf/line-overlap": "^6.5.0", + "@turf/meta": "^6.5.0", "geojson-equality": "0.1.6" } }, "@turf/boolean-point-in-polygon": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.3.0.tgz", - "integrity": "sha512-NqFSsoE6OwhDK19IllDQRhEQEkF7UVEOlqH9vgS1fGg4T6NcyKvACJs05c9457tL7QSbV9ZS53f2qiLneFL+qg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.5.0.tgz", + "integrity": "sha512-DtSuVFB26SI+hj0SjrvXowGTUCHlgevPAIsukssW6BG5MlNSBQAo70wpICBNJL6RjukXg8d2eXaAWuD/CqL00A==", "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0" } }, "@turf/boolean-point-on-line": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-6.3.0.tgz", - "integrity": "sha512-eScH8sfKJVjfbEX5Hgkt1nA7A8DUoiYD1riUVqTp2xikujrMfnYRjFpL/UAo01v33cPKZlhCXp7NE86bdOSrYg==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-6.5.0.tgz", + "integrity": "sha512-A1BbuQ0LceLHvq7F/P7w3QvfpmZqbmViIUPHdNLvZimFNLo4e6IQunmzbe+8aSStH9QRZm3VOflyvNeXvvpZEQ==", "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0" } }, "@turf/destination": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-6.3.0.tgz", - "integrity": "sha512-aLt3U/XkJWyZW08Ln1qZwBNAGh27yhmYLu892+dBj3gKP6UUiR6ZopXxrBwjBVe00A6k2ktftKDn79qe0hptuw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-6.5.0.tgz", + "integrity": "sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ==", "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0" } }, "@turf/difference": { @@ -12598,94 +12803,94 @@ } }, "@turf/distance": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-6.3.0.tgz", - "integrity": "sha512-basi24ssNFnH3iXPFjp/aNUrukjObiFWoIyDRqKyBJxVwVOwAWvfk4d38QQyBj5nDo5IahYRq/Q+T47/5hSs9w==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-6.5.0.tgz", + "integrity": "sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg==", "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0" + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0" } }, "@turf/helpers": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.3.0.tgz", - "integrity": "sha512-kr6KuD4Z0GZ30tblTEvi90rvvVNlKieXuMC8CTzE/rVQb0/f/Cb29zCXxTD7giQTEQY/P2nRW23wEqqyNHulCg==" + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.5.0.tgz", + "integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==" }, "@turf/invariant": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.3.0.tgz", - "integrity": "sha512-2OFOi9p+QOrcIMySEnr+WlOiKaFZ1bY56jA98YyECewJHfhPFWUBZEhc4nWGRT0ahK08Vus9+gcuBX8QIpCIIw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.5.0.tgz", + "integrity": "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==", "requires": { - "@turf/helpers": "^6.3.0" + "@turf/helpers": "^6.5.0" } }, "@turf/line-intersect": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.3.0.tgz", - "integrity": "sha512-3naxR7XpkPd2vst3Mw6DFry4C9m3o0/f2n/xu5UAyxb88Ie4m2k+1eqkhzMMx/0L+E6iThWpLx7DASM6q6o9ow==", - "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "@turf/line-segment": "^6.3.0", - "@turf/meta": "^6.3.0", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.5.0.tgz", + "integrity": "sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA==", + "requires": { + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0", + "@turf/line-segment": "^6.5.0", + "@turf/meta": "^6.5.0", "geojson-rbush": "3.x" } }, "@turf/line-overlap": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-6.3.0.tgz", - "integrity": "sha512-fVyXfTpr/A+ZXZWG6PbuYz5rAGbTQWyrMZveCl2049SbOXSkVXGjUfpnLaklP0p+adw7eRR0LhZn6FGz9CQaFg==", - "requires": { - "@turf/boolean-point-on-line": "^6.3.0", - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "@turf/line-segment": "^6.3.0", - "@turf/meta": "^6.3.0", - "@turf/nearest-point-on-line": "^6.3.0", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-6.5.0.tgz", + "integrity": "sha512-xHOaWLd0hkaC/1OLcStCpfq55lPHpPNadZySDXYiYjEz5HXr1oKmtMYpn0wGizsLwrOixRdEp+j7bL8dPt4ojQ==", + "requires": { + "@turf/boolean-point-on-line": "^6.5.0", + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0", + "@turf/line-segment": "^6.5.0", + "@turf/meta": "^6.5.0", + "@turf/nearest-point-on-line": "^6.5.0", "deep-equal": "1.x", "geojson-rbush": "3.x" } }, "@turf/line-segment": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.3.0.tgz", - "integrity": "sha512-M+aDy83V+E7jYWNaf+b+A88yhnMrJhyg/lhAj6mU6UeB2PbruXB2qgSmmVDSE2dIknOvZZuIWNzEzUI07RO2kw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.5.0.tgz", + "integrity": "sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw==", "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "@turf/meta": "^6.3.0" + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0", + "@turf/meta": "^6.5.0" } }, "@turf/meta": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.3.0.tgz", - "integrity": "sha512-qBJjaAJS9H3ap0HlGXyF/Bzfl0qkA9suafX/jnDsZvWMfVLt+s+o6twKrXOGk5t7nnNON2NFRC8+czxpu104EQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.5.0.tgz", + "integrity": "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==", "requires": { - "@turf/helpers": "^6.3.0" + "@turf/helpers": "^6.5.0" } }, "@turf/nearest-point-on-line": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.3.0.tgz", - "integrity": "sha512-b4C9Md1VbGn9chMgdSj2grJD4w4t0owEWOKEBwOZfdhrcksyOedVvKB7XqOFdj/8Jitel40EKAC5LQTNu24kEQ==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.5.0.tgz", + "integrity": "sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg==", "requires": { - "@turf/bearing": "^6.3.0", - "@turf/destination": "^6.3.0", - "@turf/distance": "^6.3.0", - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "@turf/line-intersect": "^6.3.0", - "@turf/meta": "^6.3.0" + "@turf/bearing": "^6.5.0", + "@turf/destination": "^6.5.0", + "@turf/distance": "^6.5.0", + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0", + "@turf/line-intersect": "^6.5.0", + "@turf/meta": "^6.5.0" } }, "@turf/union": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/@turf/union/-/union-6.3.0.tgz", - "integrity": "sha512-m8yh13Q5E0Y+YC10+iI/Qq0Txt7UmSIFByc7DfNVlMMGTceqLFa8xGwSVdFuB/d6MWwKuzKonQMl1PUx/Vd2Iw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/union/-/union-6.5.0.tgz", + "integrity": "sha512-igYWCwP/f0RFHIlC2c0SKDuM/ObBaqSljI3IdV/x71805QbIvY/BYGcJdyNcgEA6cylIGl/0VSlIbpJHZ9ldhw==", "requires": { - "@turf/helpers": "^6.3.0", - "@turf/invariant": "^6.3.0", - "polygon-clipping": "^0.15.2" + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0", + "polygon-clipping": "^0.15.3" } }, "@types/babel__core": { @@ -12786,9 +12991,9 @@ } }, "@types/eslint": { - "version": "7.2.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", - "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==", + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", + "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", "dev": true, "requires": { "@types/estree": "*", @@ -12796,9 +13001,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", "dev": true, "requires": { "@types/eslint": "*", @@ -12834,10 +13039,15 @@ "@types/range-parser": "*" } }, + "@types/geojson": { + "version": "7946.0.8", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", + "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==" + }, "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "requires": { "@types/minimatch": "*", @@ -12854,9 +13064,9 @@ } }, "@types/imagemin": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-7.0.0.tgz", - "integrity": "sha512-BiNd5FazD5ZmJUYD9txsbrttL0P0welrb9yAPn6ykKK3kWufwFsxYqw5KdggfZQDjiNYwsBrX+Fwei0Xsw4oAw==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-8.0.0.tgz", + "integrity": "sha512-B9X2CUeDv/uUeY9CqkzSTfmsLkeJP6PkmXlh4lODBbf9SwpmNuLS30WzUOi863dgsjY3zt3gY5q2F+UdifRi1A==", "dev": true, "requires": { "@types/node": "*" @@ -12912,15 +13122,15 @@ "dev": true }, "@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, "@types/node": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.3.0.tgz", - "integrity": "sha512-8/bnjSZD86ZfpBsDlCIkNXIvm+h6wi9g7IqL+kmFkQ+Wvu3JrasgLElfiPgoo8V8vVfnEi0QVS12gbl94h9YsQ==", + "version": "17.0.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", + "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==", "dev": true }, "@types/parse-json": { @@ -12976,9 +13186,9 @@ } }, "@types/svgo": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.5.tgz", - "integrity": "sha512-y9Pw8IK50OqFRDpdI9Is29KlWiENVW9FDvlTmGHelvTfR2brYFJbsClvulZfeq6YKacFrDsG9a39w0kJZdHLaw==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.6.tgz", + "integrity": "sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug==", "dev": true }, "@types/ws": { @@ -13007,6 +13217,12 @@ "vue-template-es2015-compiler": "^1.9.0" }, "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, "postcss": { "version": "7.0.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", @@ -13172,25 +13388,25 @@ } }, "@webpack-cli/configtest": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.0.tgz", - "integrity": "sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", + "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", "dev": true, "requires": {} }, "@webpack-cli/info": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.0.tgz", - "integrity": "sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", + "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", "dev": true, "requires": { "envinfo": "^7.7.3" } }, "@webpack-cli/serve": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.0.tgz", - "integrity": "sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", + "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", "dev": true, "requires": {} }, @@ -13207,13 +13423,13 @@ "dev": true }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "acorn": { @@ -13223,9 +13439,9 @@ "dev": true }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, @@ -13237,6 +13453,19 @@ "requires": { "loader-utils": "^2.0.0", "regex-parser": "^2.2.11" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + } } }, "aggregate-error": { @@ -13271,9 +13500,9 @@ }, "dependencies": { "ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -13303,23 +13532,6 @@ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, "ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -13458,14 +13670,6 @@ "normalize-range": "^0.1.2", "picocolors": "^1.0.0", "postcss-value-parser": "^4.2.0" - }, - "dependencies": { - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - } } }, "babel-loader": { @@ -13478,39 +13682,6 @@ "loader-utils": "^1.4.0", "make-dir": "^3.1.0", "schema-utils": "^2.6.5" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } } }, "babel-plugin-dynamic-import-node": { @@ -13542,13 +13713,13 @@ } }, "babel-plugin-polyfill-corejs3": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.1.tgz", - "integrity": "sha512-TihqEe4sQcb/QcPJvxe94/9RZuLQuF1+To4WqQcRvc+3J3gLCPIPgDKzGLG6zmQLfH3nn25heRuDNkS2KR4I8A==", + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", "dev": true, "requires": { "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.20.0" + "core-js-compat": "^3.21.0" } }, "babel-plugin-polyfill-regenerator": { @@ -13791,14 +13962,6 @@ "escalade": "^3.1.1", "node-releases": "^2.0.1", "picocolors": "^1.0.0" - }, - "dependencies": { - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - } } }, "buffer": { @@ -13813,9 +13976,9 @@ } }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "buffer-indexof": { @@ -13867,6 +14030,12 @@ "tslib": "^2.0.3" } }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, "caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", @@ -13880,9 +14049,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001301", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz", - "integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA==", + "version": "1.0.30001311", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001311.tgz", + "integrity": "sha512-mleTFtFKfykEeW34EyfhGIFjGCqzhh38Y0LhdQ9aWF+HorZTtdgKV/1hEE0NlFkG2ubvisPV6l400tlbPys98A==", "dev": true }, "chalk": { @@ -13923,12 +14092,6 @@ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true }, - "ci-info": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.1.1.tgz", - "integrity": "sha512-kdRWLBIJwdsYJWYJFtAFFYxybguqeF91qpZaggjG5Nf8QKdizFG2hjqvaTXbxFIcYbSaD74KpAXv6BSm17DHEQ==", - "dev": true - }, "cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -13940,9 +14103,9 @@ } }, "clean-css": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz", - "integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==", + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz", + "integrity": "sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg==", "dev": true, "requires": { "source-map": "~0.6.0" @@ -13963,13 +14126,12 @@ "dev": true }, "cli-table3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.0.tgz", - "integrity": "sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", + "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", "dev": true, "requires": { - "colors": "^1.1.2", - "object-assign": "^4.1.0", + "colors": "1.4.0", "string-width": "^4.2.0" } }, @@ -13996,9 +14158,9 @@ } }, "collect.js": { - "version": "4.28.6", - "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.28.6.tgz", - "integrity": "sha512-NAyuk1DnCotRaDZIS5kJ4sptgkwOeYqElird10yziN5JBuwYOGkOTguhNcPn5g344IfylZecxNYZAVXgv19p5Q==", + "version": "4.31.3", + "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.31.3.tgz", + "integrity": "sha512-pHXhGzo5qftTTlEj88MCRXN8YuhARhmEnCOmc7wzBlI+5fVVC5VZ9Z/Z5KEDuM90Fgwv025Fc2Gk4VpFKMrzQA==", "dev": true }, "color-convert": { @@ -14177,9 +14339,9 @@ "dev": true }, "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -14198,9 +14360,9 @@ "dev": true }, "core-js-compat": { - "version": "3.20.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.20.3.tgz", - "integrity": "sha512-c8M5h0IkNZ+I92QhIpuSijOxGAcj3lgpsWdkCqmUTZNwidujF4r3pi6x1DCN+Vcs5qTS2XWWMfWSuCqyupX8gw==", + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz", + "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==", "dev": true, "requires": { "browserslist": "^4.19.1", @@ -14216,9 +14378,9 @@ } }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "cosmiconfig": { @@ -14356,20 +14518,19 @@ } }, "css-loader": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.6.tgz", - "integrity": "sha512-0wyN5vXMQZu6BvjbrPdUJvkCzGEO24HC7IS7nW4llc6BBFC+zwR9CKtYGv63Puzsg10L/o12inMY5/2ByzfD6w==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.6.0.tgz", + "integrity": "sha512-FK7H2lisOixPT406s5gZM1S3l8GrfhEBT3ZiL2UX1Ng1XWs0y2GPllz/OTyvbaHe12VgQrIXIzuEGVlbUhodqg==", "dev": true, + "peer": true, "requires": { "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", + "postcss": "^8.4.5", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", + "postcss-value-parser": "^4.2.0", "semver": "^7.3.5" }, "dependencies": { @@ -14378,6 +14539,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "peer": true, "requires": { "yallist": "^4.0.0" } @@ -14387,6 +14549,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, + "peer": true, "requires": { "lru-cache": "^6.0.0" } @@ -14395,7 +14558,8 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "peer": true } } }, @@ -14454,57 +14618,57 @@ "dev": true }, "cssnano": { - "version": "5.0.16", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.16.tgz", - "integrity": "sha512-ryhRI9/B9VFCwPbb1z60LLK5/ldoExi7nwdnJzpkLZkm2/r7j2X3jfY+ZvDVJhC/0fPZlrAguYdHNFg0iglPKQ==", + "version": "5.0.17", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.17.tgz", + "integrity": "sha512-fmjLP7k8kL18xSspeXTzRhaFtRI7DL9b8IcXR80JgtnWBpvAzHT7sCR/6qdn0tnxIaINUN6OEQu83wF57Gs3Xw==", "dev": true, "requires": { - "cssnano-preset-default": "^5.1.11", + "cssnano-preset-default": "^5.1.12", "lilconfig": "^2.0.3", "yaml": "^1.10.2" } }, "cssnano-preset-default": { - "version": "5.1.11", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.11.tgz", - "integrity": "sha512-ETet5hqHxmzQq2ynXMOQofKuLm7VOjMiOB7E2zdtm/hSeCKlD9fabzIUV4GoPcRyJRHi+4kGf0vsfGYbQ4nmPw==", + "version": "5.1.12", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.12.tgz", + "integrity": "sha512-rO/JZYyjW1QNkWBxMGV28DW7d98UDLaF759frhli58QFehZ+D/LSmwQ2z/ylBAe2hUlsIWTq6NYGfQPq65EF9w==", "dev": true, "requires": { "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-calc": "^8.2.0", - "postcss-colormin": "^5.2.4", - "postcss-convert-values": "^5.0.3", - "postcss-discard-comments": "^5.0.2", - "postcss-discard-duplicates": "^5.0.2", - "postcss-discard-empty": "^5.0.2", - "postcss-discard-overridden": "^5.0.3", - "postcss-merge-longhand": "^5.0.5", - "postcss-merge-rules": "^5.0.5", - "postcss-minify-font-values": "^5.0.3", - "postcss-minify-gradients": "^5.0.5", - "postcss-minify-params": "^5.0.4", - "postcss-minify-selectors": "^5.1.2", - "postcss-normalize-charset": "^5.0.2", - "postcss-normalize-display-values": "^5.0.2", - "postcss-normalize-positions": "^5.0.3", - "postcss-normalize-repeat-style": "^5.0.3", - "postcss-normalize-string": "^5.0.3", - "postcss-normalize-timing-functions": "^5.0.2", - "postcss-normalize-unicode": "^5.0.3", - "postcss-normalize-url": "^5.0.4", - "postcss-normalize-whitespace": "^5.0.3", - "postcss-ordered-values": "^5.0.4", - "postcss-reduce-initial": "^5.0.2", - "postcss-reduce-transforms": "^5.0.3", - "postcss-svgo": "^5.0.3", - "postcss-unique-selectors": "^5.0.3" + "postcss-colormin": "^5.2.5", + "postcss-convert-values": "^5.0.4", + "postcss-discard-comments": "^5.0.3", + "postcss-discard-duplicates": "^5.0.3", + "postcss-discard-empty": "^5.0.3", + "postcss-discard-overridden": "^5.0.4", + "postcss-merge-longhand": "^5.0.6", + "postcss-merge-rules": "^5.0.6", + "postcss-minify-font-values": "^5.0.4", + "postcss-minify-gradients": "^5.0.6", + "postcss-minify-params": "^5.0.5", + "postcss-minify-selectors": "^5.1.3", + "postcss-normalize-charset": "^5.0.3", + "postcss-normalize-display-values": "^5.0.3", + "postcss-normalize-positions": "^5.0.4", + "postcss-normalize-repeat-style": "^5.0.4", + "postcss-normalize-string": "^5.0.4", + "postcss-normalize-timing-functions": "^5.0.3", + "postcss-normalize-unicode": "^5.0.4", + "postcss-normalize-url": "^5.0.5", + "postcss-normalize-whitespace": "^5.0.4", + "postcss-ordered-values": "^5.0.5", + "postcss-reduce-initial": "^5.0.3", + "postcss-reduce-transforms": "^5.0.4", + "postcss-svgo": "^5.0.4", + "postcss-unique-selectors": "^5.0.4" } }, "cssnano-utils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.1.tgz", - "integrity": "sha512-VNCHL364lh++/ono+S3j9NlUK+d97KNkxI77NlqZU2W3xd2/qmyN61dsa47pTpb55zuU4G4lI7qFjAXZJH1OAQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.2.tgz", + "integrity": "sha512-KhprijuQv2sP4kT92sSQwhlK3SJTbDIsxcfIEySB0O+3m9esFOai7dP9bMx5enHAh2MwarVIcnwiWoOm01RIbQ==", "dev": true, "requires": {} }, @@ -14534,9 +14698,9 @@ "dev": true }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -14562,9 +14726,9 @@ } }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "default-gateway": { @@ -14730,9 +14894,9 @@ }, "dependencies": { "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -14773,9 +14937,9 @@ }, "dependencies": { "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", "dev": true, "requires": { "domelementtype": "^2.2.0" @@ -14812,9 +14976,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.51", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.51.tgz", - "integrity": "sha512-JNEmcYl3mk1tGQmy0EvL5eik/CKSBuzAyGP0QFdG6LIgxQe3II0BL1m2zKc2MZMf3uGqHWE1TFddJML0RpjSHQ==", + "version": "1.4.68", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", + "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==", "dev": true }, "elliptic": { @@ -14859,9 +15023,9 @@ "dev": true }, "enhanced-resolve": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", - "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.0.tgz", + "integrity": "sha512-weDYmzbBygL7HzGGS26M3hGQx68vehdEg6VUmqSOaFzXExFqlnKuSvsEJCVGQHScS8CQMbrAqftT+AzzHNt/YA==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -14949,34 +15113,37 @@ "dev": true }, "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "eslint": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", - "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, "requires": { "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.1", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.0.1", "doctrine": "^3.0.0", "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", "eslint-scope": "^5.1.1", "eslint-utils": "^2.1.0", "eslint-visitor-keys": "^2.0.0", "espree": "^7.3.1", "esquery": "^1.4.0", "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.0.0", + "glob-parent": "^5.1.2", "globals": "^13.6.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", @@ -14985,7 +15152,7 @@ "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", - "lodash": "^4.17.21", + "lodash.merge": "^4.6.2", "minimatch": "^3.0.4", "natural-compare": "^1.4.0", "optionator": "^0.9.1", @@ -14994,7 +15161,7 @@ "semver": "^7.2.1", "strip-ansi": "^6.0.0", "strip-json-comments": "^3.1.0", - "table": "^6.0.4", + "table": "^6.0.9", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, @@ -15067,40 +15234,54 @@ } }, "eslint-plugin-vue": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.9.0.tgz", - "integrity": "sha512-2Q0qQp5+5h+pZvJKCbG1/jCRUYrdgAz5BYKGyTlp2NU8mx09u3Hp7PsH6d5qef6ojuPoCXMnrbbDxeoplihrSw==", + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz", + "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==", "dev": true, "requires": { "eslint-utils": "^2.1.0", "natural-compare": "^1.4.0", - "semver": "^7.3.2", - "vue-eslint-parser": "^7.6.0" + "semver": "^6.3.0", + "vue-eslint-parser": "^7.10.0" }, "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", "dev": true, "requires": { - "yallist": "^4.0.0" + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "vue-eslint-parser": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", + "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "debug": "^4.1.1", + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^6.3.0" } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true } } }, @@ -15172,9 +15353,9 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -15189,9 +15370,9 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -15364,18 +15545,18 @@ } }, "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", "dev": true, "requires": { - "type": "^2.0.0" + "type": "^2.5.0" }, "dependencies": { "type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", + "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==", "dev": true } } @@ -15418,9 +15599,9 @@ "dev": true }, "fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { "reusify": "^1.0.4" @@ -15435,15 +15616,6 @@ "websocket-driver": ">=0.5.1" } }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -15461,6 +15633,30 @@ "requires": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, "file-type": { @@ -15542,15 +15738,15 @@ } }, "flatted": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", - "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, "follow-redirects": { - "version": "1.14.7", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", - "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", "dev": true }, "forwarded": { @@ -15560,9 +15756,9 @@ "dev": true }, "fraction.js": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz", - "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.3.tgz", + "integrity": "sha512-pUHWWt6vHzZZiQJcM6S/0PXfS+g6FM4BF5rj9wZyreivhQPdsh5PpE25VtSNxq80wHS5RfY51Ii+8Z0Zl/pmzg==", "dev": true }, "fresh": { @@ -15627,14 +15823,30 @@ } }, "geojson-rbush": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.1.2.tgz", - "integrity": "sha512-grkfdg3HIeTjwTfiJe5FT8+fGU3fABCc+vRJDBwdQz9kkLF0Sbif2gs2JUzjewwgmnvLGy9fInySDeADoNuk7w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.2.0.tgz", + "integrity": "sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w==", "requires": { "@turf/bbox": "*", "@turf/helpers": "6.x", "@turf/meta": "6.x", - "rbush": "^2.0.0" + "@types/geojson": "7946.0.8", + "rbush": "^3.0.1" + }, + "dependencies": { + "quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "rbush": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + "requires": { + "quickselect": "^2.0.0" + } + } } }, "get-caller-file": { @@ -15689,9 +15901,9 @@ "dev": true }, "globals": { - "version": "13.8.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", - "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "version": "13.12.1", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", + "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -15714,9 +15926,9 @@ }, "dependencies": { "ignore": { - "version": "5.1.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "dev": true } } @@ -15758,6 +15970,14 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, "hash-base": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", @@ -15849,6 +16069,30 @@ "htmlparser2": "^4.1.0", "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, "html-minifier-terser": { @@ -15867,9 +16111,9 @@ }, "dependencies": { "clean-css": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", - "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", "dev": true, "requires": { "source-map": "~0.6.0" @@ -15886,25 +16130,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } } } }, @@ -15957,9 +16182,9 @@ } }, "http-proxy-middleware": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.2.tgz", - "integrity": "sha512-XtmDN5w+vdFTBZaYhdJAbMqn0DP/EhkUaAeo963mojwpKMMbw6nivtFKw07D7DDOH745L5k0VL0P8KRYNEVF/g==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz", + "integrity": "sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA==", "dev": true, "requires": { "@types/http-proxy": "^1.17.8", @@ -16030,30 +16255,14 @@ "dev": true, "requires": { "loader-utils": "^1.1.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } } }, + "immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", + "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", + "dev": true + }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -16121,11 +16330,12 @@ "dev": true }, "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "requires": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, "is-arrayish": { @@ -16159,9 +16369,12 @@ } }, "is-date-object": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", - "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-docker": { "version": "2.2.1", @@ -16182,9 +16395,9 @@ "dev": true }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -16224,12 +16437,12 @@ } }, "is-regex": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", - "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "requires": { "call-bind": "^1.0.2", - "has-symbols": "^1.0.2" + "has-tostringtag": "^1.0.0" } }, "is-stream": { @@ -16266,9 +16479,9 @@ "dev": true }, "jest-worker": { - "version": "27.4.6", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.6.tgz", - "integrity": "sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "requires": { "@types/node": "*", @@ -16436,6 +16649,35 @@ "optional": true, "peer": true }, + "css-loader": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", + "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.15", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^3.0.0", + "semver": "^7.3.5" + } + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -16445,6 +16687,17 @@ "yallist": "^4.0.0" } }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -16524,14 +16777,25 @@ "dev": true }, "loader-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", - "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "dev": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "json5": "^1.0.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } } }, "locate-path": { @@ -16549,12 +16813,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", - "dev": true - }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", @@ -16567,6 +16825,12 @@ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -16744,18 +17008,18 @@ "dev": true }, "mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true }, "mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "requires": { - "mime-db": "1.50.0" + "mime-db": "1.51.0" } }, "mimic-fn": { @@ -16773,6 +17037,30 @@ "loader-utils": "^2.0.0", "schema-utils": "^3.0.0", "webpack-sources": "^1.1.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, "minimalistic-assert": { @@ -16788,9 +17076,9 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -16846,9 +17134,9 @@ "dev": true }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true }, "neo-async": { @@ -16972,9 +17260,9 @@ } }, "node-releases": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", + "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", "dev": true }, "normalize-path": { @@ -17303,15 +17591,15 @@ } }, "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, "picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pixelworks": { @@ -17366,38 +17654,30 @@ } }, "postcss": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", - "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", - "dev": true, - "requires": { - "nanoid": "^3.1.30", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.1" - }, - "dependencies": { - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - } + "version": "8.4.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", + "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", + "dev": true, + "requires": { + "nanoid": "^3.2.0", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" } }, "postcss-calc": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.2.tgz", - "integrity": "sha512-B5R0UeB4zLJvxNt1FVCaDZULdzsKLPc6FhjFJ+xwFiq7VG4i9cuaJLxVjNtExNK8ocm3n2o4unXXLiVX1SCqxA==", + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", "dev": true, "requires": { - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" } }, "postcss-colormin": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.4.tgz", - "integrity": "sha512-rYlC5015aNqVQt/B6Cy156g7sH5tRUJGmT9xeagYthtKehetbKx7jHxhyLpulP4bs4vbp8u/B2rac0J7S7qPQg==", + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.5.tgz", + "integrity": "sha512-+X30aDaGYq81mFqwyPpnYInsZQnNpdxMX0ajlY7AExCexEFkPVV+KrO7kXwayqEWL2xwEbNQ4nUO0ZsRWGnevg==", "dev": true, "requires": { "browserslist": "^4.16.6", @@ -17407,39 +17687,39 @@ } }, "postcss-convert-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.3.tgz", - "integrity": "sha512-fVkjHm2T0PSMqXUCIhHNWVGjhB9mHEWX2GboVs7j3iCgr6FpIl9c/IdXy0PHWZSQ9LFTRgmj98amxJE6KOnlsA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.4.tgz", + "integrity": "sha512-bugzSAyjIexdObovsPZu/sBCTHccImJxLyFgeV0MmNBm/Lw5h5XnjfML6gzEmJ3A6nyfCW7hb1JXzcsA4Zfbdw==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-discard-comments": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.2.tgz", - "integrity": "sha512-6VQ3pYTsJHEsN2Bic88Aa7J/Brn4Bv8j/rqaFQZkH+pcVkKYwxCIvoMQkykEW7fBjmofdTnQgcivt5CCBJhtrg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.3.tgz", + "integrity": "sha512-6W5BemziRoqIdAKT+1QjM4bNcJAQ7z7zk073730NHg4cUXh3/rQHHj7pmYxUB9aGhuRhBiUf0pXvIHkRwhQP0Q==", "dev": true, "requires": {} }, "postcss-discard-duplicates": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz", - "integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.3.tgz", + "integrity": "sha512-vPtm1Mf+kp7iAENTG7jI1MN1lk+fBqL5y+qxyi4v3H+lzsXEdfS3dwUZD45KVhgzDEgduur8ycB4hMegyMTeRw==", "dev": true, "requires": {} }, "postcss-discard-empty": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.2.tgz", - "integrity": "sha512-SxBsbTjlsKUvZLL+dMrdWauuNZU8TBq5IOL/DHa6jBUSXFEwmDqeXRfTIK/FQpPTa8MJMxEHjSV3UbiuyLARPQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.3.tgz", + "integrity": "sha512-xGJugpaXKakwKI7sSdZjUuN4V3zSzb2Y0LOlmTajFbNinEjTfVs9PFW2lmKBaC/E64WwYppfqLD03P8l9BuueA==", "dev": true, "requires": {} }, "postcss-discard-overridden": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.3.tgz", - "integrity": "sha512-yRTXknIZA4k8Yo4FiF1xbsLj/VBxfXEWxJNIrtIy6HC9KQ4xJxcPtoaaskh6QptCGrrcGnhKsTsENTRPZOBu4g==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.4.tgz", + "integrity": "sha512-3j9QH0Qh1KkdxwiZOW82cId7zdwXVQv/gRXYDnwx5pBtR1sTkU4cXRK9lp5dSdiM0r0OICO/L8J6sV1/7m0kHg==", "dev": true, "requires": {} }, @@ -17491,62 +17771,62 @@ } }, "postcss-merge-longhand": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.5.tgz", - "integrity": "sha512-R2BCPJJ/U2oh1uTWEYn9CcJ7MMcQ1iIbj9wfr2s/zHu5om5MP/ewKdaunpfJqR1WYzqCsgnXuRoVXPAzxdqy8g==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.6.tgz", + "integrity": "sha512-rkmoPwQO6ymJSmWsX6l2hHeEBQa7C4kJb9jyi5fZB1sE8nSCv7sqchoYPixRwX/yvLoZP2y6FA5kcjiByeJqDg==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.0.2" + "stylehacks": "^5.0.3" } }, "postcss-merge-rules": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.5.tgz", - "integrity": "sha512-3Oa26/Pb9VOFVksJjFG45SNoe4nhGvJ2Uc6TlRimqF8uhfOCEhVCaJ3rvEat5UFOn2UZqTY5Da8dFgCh3Iq0Ug==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.6.tgz", + "integrity": "sha512-nzJWJ9yXWp8AOEpn/HFAW72WKVGD2bsLiAmgw4hDchSij27bt6TF+sIK0cJUBAYT3SGcjtGGsOR89bwkkMuMgQ==", "dev": true, "requires": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-selector-parser": "^6.0.5" } }, "postcss-minify-font-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.3.tgz", - "integrity": "sha512-bC45rVzEwsLhv/cL1eCjoo2OOjbSk9I7HKFBYnBvtyuIZlf7uMipMATXtA0Fc3jwPo3wuPIW1jRJWKzflMh1sA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.4.tgz", + "integrity": "sha512-RN6q3tyuEesvyCYYFCRGJ41J1XFvgV+dvYGHr0CeHv8F00yILlN8Slf4t8XW4IghlfZYCeyRrANO6HpJ948ieA==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-minify-gradients": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.5.tgz", - "integrity": "sha512-/YjvXs8PepsoiZAIpjstOO4IHKwFAqYNqbA1yVdqklM84tbUUneh6omJxGlRlF3mi6K5Pa067Mg6IwqEnYC8Zg==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.6.tgz", + "integrity": "sha512-E/dT6oVxB9nLGUTiY/rG5dX9taugv9cbLNTFad3dKxOO+BQg25Q/xo2z2ddG+ZB1CbkZYaVwx5blY8VC7R/43A==", "dev": true, "requires": { "colord": "^2.9.1", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-value-parser": "^4.2.0" } }, "postcss-minify-params": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.4.tgz", - "integrity": "sha512-Z0vjod9lRZEmEPfEmA2sCfjbfEEFKefMD3RDIQSUfXK4LpCyWkX1CniUgyNvnjJFLDPSxtgKzozhHhPHKoeGkg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.5.tgz", + "integrity": "sha512-YBNuq3Rz5LfLFNHb9wrvm6t859b8qIqfXsWeK7wROm3jSKNpO1Y5e8cOyBv6Acji15TgSrAwb3JkVNCqNyLvBg==", "dev": true, "requires": { "browserslist": "^4.16.6", - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-value-parser": "^4.2.0" } }, "postcss-minify-selectors": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.2.tgz", - "integrity": "sha512-gpn1nJDMCf3g32y/7kl+jsdamhiYT+/zmEt57RoT9GmzlixBNRPohI7k8UIHelLABhdLf3MSZhtM33xuH5eQOQ==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.3.tgz", + "integrity": "sha512-9RJfTiQEKA/kZhMaEXND893nBqmYQ8qYa/G+uPdVnXF6D/FzpfI6kwBtWEcHx5FqDbA79O9n6fQJfrIj6M8jvQ==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.5" @@ -17589,61 +17869,61 @@ } }, "postcss-normalize-charset": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.2.tgz", - "integrity": "sha512-fEMhYXzO8My+gC009qDc/3bgnFP8Fv1Ic8uw4ec4YTlhIOw63tGPk1YFd7fk9bZUf1DAbkhiL/QPWs9JLqdF2g==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.3.tgz", + "integrity": "sha512-iKEplDBco9EfH7sx4ut7R2r/dwTnUqyfACf62Unc9UiyFuI7uUqZZtY+u+qp7g8Qszl/U28HIfcsI3pEABWFfA==", "dev": true, "requires": {} }, "postcss-normalize-display-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", - "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.3.tgz", + "integrity": "sha512-FIV5FY/qs4Ja32jiDb5mVj5iWBlS3N8tFcw2yg98+8MkRgyhtnBgSC0lxU+16AMHbjX5fbSJgw5AXLMolonuRQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-positions": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.3.tgz", - "integrity": "sha512-U+rmhjrNBvIGYqr/1tD4wXPFFMKUbXsYXvlUCzLi0tOCUS6LoeEAnmVXXJY/MEB/1CKZZwBSs2tmzGawcygVBA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.4.tgz", + "integrity": "sha512-qynirjBX0Lc73ROomZE3lzzmXXTu48/QiEzKgMeqh28+MfuHLsuqC9po4kj84igZqqFGovz8F8hf44hA3dPYmQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-repeat-style": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.3.tgz", - "integrity": "sha512-uk1+xYx0AMbA3nLSNhbDrqbf/rx+Iuq5tVad2VNyaxxJzx79oGieJ6D9F6AfOL2GtiIbP7vTYlpYHtG+ERFXTg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.4.tgz", + "integrity": "sha512-Innt+wctD7YpfeDR7r5Ik6krdyppyAg2HBRpX88fo5AYzC1Ut/l3xaxACG0KsbX49cO2n5EB13clPwuYVt8cMA==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-string": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.3.tgz", - "integrity": "sha512-Mf2V4JbIDboNGQhW6xW0YREDiYXoX3WrD3EjKkjvnpAJ6W4qqjLnK/c9aioyVFaWWHVdP5zVRw/9DI5S3oLDFw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.4.tgz", + "integrity": "sha512-Dfk42l0+A1CDnVpgE606ENvdmksttLynEqTQf5FL3XGQOyqxjbo25+pglCUvziicTxjtI2NLUR6KkxyUWEVubQ==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-timing-functions": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", - "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.3.tgz", + "integrity": "sha512-QRfjvFh11moN4PYnJ7hia4uJXeFotyK3t2jjg8lM9mswleGsNw2Lm3I5wO+l4k1FzK96EFwEVn8X8Ojrp2gP4g==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-normalize-unicode": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.3.tgz", - "integrity": "sha512-uNC7BmS/7h6to2UWa4RFH8sOTzu2O9dVWPE/F9Vm9GdhONiD/c1kNaCLbmsFHlKWcEx7alNUChQ+jH/QAlqsQw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.4.tgz", + "integrity": "sha512-W79Regn+a+eXTzB+oV/8XJ33s3pDyFTND2yDuUCo0Xa3QSy1HtNIfRVPXNubHxjhlqmMFADr3FSCHT84ITW3ig==", "dev": true, "requires": { "browserslist": "^4.16.6", @@ -17651,9 +17931,9 @@ } }, "postcss-normalize-url": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", - "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.5.tgz", + "integrity": "sha512-Ws3tX+PcekYlXh+ycAt0wyzqGthkvVtZ9SZLutMVvHARxcpu4o7vvXcNoiNKyjKuWecnjS6HDI3fjBuDr5MQxQ==", "dev": true, "requires": { "normalize-url": "^6.0.1", @@ -17661,28 +17941,28 @@ } }, "postcss-normalize-whitespace": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.3.tgz", - "integrity": "sha512-333JWRnX655fSoUbufJ10HJop3c8mrpKkCCUnEmgz/Cb/QEtW+/TMZwDAUt4lnwqP6tCCk0x0b58jqvDgiQm/A==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.4.tgz", + "integrity": "sha512-wsnuHolYZjMwWZJoTC9jeI2AcjA67v4UuidDrPN9RnX8KIZfE+r2Nd6XZRwHVwUiHmRvKQtxiqo64K+h8/imaw==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-ordered-values": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.4.tgz", - "integrity": "sha512-taKtGDZtyYUMVYkg+MuJeBUiTF6cGHZmo/qcW7ibvW79UlyKuSHbo6dpCIiqI+j9oJsXWzP+ovIxoyLDOeQFdw==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.5.tgz", + "integrity": "sha512-mfY7lXpq+8bDEHfP+muqibDPhZ5eP9zgBEF9XRvoQgXcQe2Db3G1wcvjbnfjXG6wYsl+0UIjikqq4ym1V2jGMQ==", "dev": true, "requires": { - "cssnano-utils": "^3.0.1", + "cssnano-utils": "^3.0.2", "postcss-value-parser": "^4.2.0" } }, "postcss-reduce-initial": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", - "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.3.tgz", + "integrity": "sha512-c88TkSnQ/Dnwgb4OZbKPOBbCaauwEjbECP5uAuFPOzQ+XdjNjRH7SG0dteXrpp1LlIFEKK76iUGgmw2V0xeieA==", "dev": true, "requires": { "browserslist": "^4.16.6", @@ -17690,18 +17970,18 @@ } }, "postcss-reduce-transforms": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.3.tgz", - "integrity": "sha512-yDnTUab5i7auHiNwdcL1f+pBnqQFf+7eC4cbC7D8Lc1FkvNZhtpkdad+9U4wDdFb84haupMf0rA/Zc5LcTe/3A==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.4.tgz", + "integrity": "sha512-VIJB9SFSaL8B/B7AXb7KHL6/GNNbbCHslgdzS9UDfBZYIA2nx8NLY7iD/BXFSO/1sRUILzBTfHCoW5inP37C5g==", "dev": true, "requires": { "postcss-value-parser": "^4.2.0" } }, "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", + "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -17709,19 +17989,19 @@ } }, "postcss-svgo": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", - "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.4.tgz", + "integrity": "sha512-yDKHvULbnZtIrRqhZoA+rxreWpee28JSRH/gy9727u0UCgtpv1M/9WEWY3xySlFa0zQJcqf6oCBJPR5NwkmYpg==", "dev": true, "requires": { - "postcss-value-parser": "^4.1.0", + "postcss-value-parser": "^4.2.0", "svgo": "^2.7.0" } }, "postcss-unique-selectors": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.3.tgz", - "integrity": "sha512-V5tX2hadSSn+miVCluuK1IDGy+7jAXSOfRZ2DQ+s/4uQZb/orDYBjH0CHgFrXsRw78p4QTuEFA9kI6C956UnHQ==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.4.tgz", + "integrity": "sha512-5ampwoSDJCxDPoANBIlMgoBcYUHnhaiuLYJR5pj1DLnYQvMRVyFuTA5C3Bvt+aHtiqWpJkD/lXT50Vo1D0ZsAQ==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.5" @@ -17740,9 +18020,9 @@ "dev": true }, "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", + "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", "dev": true, "optional": true }, @@ -17771,9 +18051,9 @@ "dev": true }, "protocol-buffers-schema": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.5.1.tgz", - "integrity": "sha512-YVCvdhxWNDP8/nJDyXLuM+UFsuPk4+1PB7WGPVDzm3HTHbzFLxQYeW2iZpS4mmnXrQJGBzt230t/BbEb7PrQaw==" + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" }, "proxy-addr": { "version": "2.0.7", @@ -17960,9 +18240,9 @@ "dev": true }, "regenerate-unicode-properties": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz", - "integrity": "sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", "dev": true, "requires": { "regenerate": "^1.4.2" @@ -17990,44 +18270,44 @@ "dev": true }, "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", + "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, "regexpp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", - "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "regexpu-core": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.8.0.tgz", - "integrity": "sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", "dev": true, "requires": { "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^9.0.0", - "regjsgen": "^0.5.2", - "regjsparser": "^0.7.0", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.0.0" } }, "regjsgen": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", - "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", "dev": true }, "regjsparser": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.7.0.tgz", - "integrity": "sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -18146,12 +18426,6 @@ "color-convert": "^1.9.0" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -18189,12 +18463,27 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", "dev": true }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -18331,12 +18620,14 @@ "dev": true }, "sass": { - "version": "1.32.13", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.13.tgz", - "integrity": "sha512-dEgI9nShraqP7cXQH+lEXVf73WOPCse0QlFzSD8k+1TcOxCMwVXfQlr0jtoluZysQOyJGnfr21dLvYKDJq8HkA==", + "version": "1.49.7", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.7.tgz", + "integrity": "sha512-13dml55EMIR2rS4d/RDHHP0sXMY3+30e1TKsyXaSz3iLWVoDWEoboY8WzJd5JMnxrRHffKO3wq2mpJ0jxRJiEQ==", "dev": true, "requires": { - "chokidar": ">=3.0.0 <4.0.0" + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" } }, "sass-loader": { @@ -18352,37 +18643,6 @@ "semver": "^6.3.0" }, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -18392,13 +18652,13 @@ } }, "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dev": true, "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", "ajv-keywords": "^3.5.2" } }, @@ -18599,9 +18859,9 @@ "dev": true }, "signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, "slash": { @@ -18751,13 +19011,10 @@ "dev": true }, "std-env": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.3.0.tgz", - "integrity": "sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==", - "dev": true, - "requires": { - "ci-info": "^3.0.0" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.0.1.tgz", + "integrity": "sha512-mC1Ps9l77/97qeOZc+HrOL7TIaOboHqMZ24dGVQrlxFcpPpfCHpH+qfUT7Dz+6mlG8+JPA1KfBQo19iC/+Ngcw==", + "dev": true }, "stream-browserify": { "version": "2.0.2", @@ -18839,12 +19096,36 @@ "requires": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } } }, "stylehacks": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.2.tgz", - "integrity": "sha512-114zeJdOpTrbQYRD4OU5UWJ99LKUaqCPJTU1HQ/n3q3BwmllFN8kHENaLnOeqVq6AhXrWfxHNZTl33iJ4oy3cQ==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.3.tgz", + "integrity": "sha512-ENcUdpf4yO0E1rubu8rkxI+JGQk4CgjchynZ4bDBJDfqdy+uhTRSWb8/F3Jtu+Bw5MW45Po3/aQGeIyyxgQtxg==", "dev": true, "requires": { "browserslist": "^4.16.6", @@ -18879,34 +19160,25 @@ "csso": "^4.2.0", "picocolors": "^1.0.0", "stable": "^0.1.8" - }, - "dependencies": { - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - } } }, "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", + "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", "dev": true, "requires": { "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" }, "dependencies": { "ajv": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.4.0.tgz", - "integrity": "sha512-7QD2l6+KBSLwf+7MuYocbWvRPdOu63/trReTLu2KFwkgctnub1auoF+Y1WYcm09CTM7quuscrzqmASaLHC/K4Q==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -18929,13 +19201,38 @@ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "terser-webpack-plugin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", - "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", + "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", "dev": true, "requires": { - "jest-worker": "^27.4.1", + "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", @@ -18956,6 +19253,17 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -19043,9 +19351,9 @@ "dev": true }, "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", "dev": true }, "tty-browserify": { @@ -19219,39 +19527,6 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true }, - "vue-eslint-parser": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.6.0.tgz", - "integrity": "sha512-QXxqH8ZevBrtiZMZK0LpwaMfevQi9UL7lY6Kcp+ogWHC88AuwUPwwCIzkOUc1LR4XsYAt/F9yHXAB/QoD17QXA==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "eslint-scope": "^5.0.0", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.2.1", - "esquery": "^1.4.0", - "lodash": "^4.17.15" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - }, - "espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - } - } - } - }, "vue-hot-reload-api": { "version": "2.3.4", "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", @@ -19269,28 +19544,6 @@ "loader-utils": "^1.1.0", "vue-hot-reload-api": "^2.3.0", "vue-style-loader": "^4.1.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } } }, "vue-style-loader": { @@ -19301,34 +19554,12 @@ "requires": { "hash-sum": "^1.0.2", "loader-utils": "^1.0.2" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - } } }, "vue-template-compiler": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz", - "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==", + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz", + "integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==", "dev": true, "requires": { "de-indent": "^1.0.2", @@ -19361,9 +19592,9 @@ } }, "webpack": { - "version": "5.67.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.67.0.tgz", - "integrity": "sha512-LjFbfMh89xBDpUMgA1W9Ur6Rn/gnr2Cq1jjHFPo4v6a79/ypznSYbAyPgGhwsxBtMIaEmDD1oJoA7BEYw/Fbrw==", + "version": "5.68.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.68.0.tgz", + "integrity": "sha512-zUcqaUO0772UuuW2bzaES2Zjlm/y3kRBQDVFVCge+s2Y8mwuUTdperGaAv65/NtRL/1zanpSJOq/MD8u61vo6g==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", @@ -19405,6 +19636,17 @@ "dev": true, "requires": {} }, + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, "webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", @@ -19414,15 +19656,15 @@ } }, "webpack-cli": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", - "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", + "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.0", - "@webpack-cli/info": "^1.4.0", - "@webpack-cli/serve": "^1.6.0", + "@webpack-cli/configtest": "^1.1.1", + "@webpack-cli/info": "^1.4.1", + "@webpack-cli/serve": "^1.6.1", "colorette": "^2.0.14", "commander": "^7.0.0", "execa": "^5.0.0", @@ -19434,22 +19676,22 @@ } }, "webpack-dev-middleware": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", - "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", + "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", "dev": true, "requires": { "colorette": "^2.0.10", - "memfs": "^3.2.2", + "memfs": "^3.4.1", "mime-types": "^2.1.31", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, "dependencies": { "ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -19488,19 +19730,20 @@ } }, "webpack-dev-server": { - "version": "4.7.3", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz", - "integrity": "sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.4.tgz", + "integrity": "sha512-nfdsb02Zi2qzkNmgtZjkrMOcXnYZ6FLKcQwpxT7MvmHKc+oTtDsBju8j+NMyAygZ9GW1jMEUpy3itHtqgEhe1A==", "dev": true, "requires": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", "@types/serve-index": "^1.9.1", "@types/sockjs": "^0.3.33", "@types/ws": "^8.2.2", "ansi-html-community": "^0.0.8", "bonjour": "^3.5.0", - "chokidar": "^3.5.2", + "chokidar": "^3.5.3", "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^1.6.0", @@ -19520,14 +19763,14 @@ "sockjs": "^0.3.21", "spdy": "^4.0.2", "strip-ansi": "^7.0.0", - "webpack-dev-middleware": "^5.3.0", - "ws": "^8.1.0" + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" }, "dependencies": { "ajv": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", - "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", + "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -19619,19 +19862,15 @@ } }, "webpackbar": { - "version": "5.0.0-3", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.0-3.tgz", - "integrity": "sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", + "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", "dev": true, "requires": { - "ansi-escapes": "^4.3.1", "chalk": "^4.1.0", - "consola": "^2.15.0", - "figures": "^3.2.0", + "consola": "^2.15.3", "pretty-time": "^1.1.0", - "std-env": "^2.2.1", - "text-table": "^0.2.0", - "wrap-ansi": "^7.0.0" + "std-env": "^3.0.1" } }, "websocket-driver": { @@ -19690,9 +19929,9 @@ "dev": true }, "ws": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", - "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", + "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", "dev": true, "requires": {} }, From 3d23f2504f65d84701ad55f9f51130f6226c2825 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 10 Feb 2022 14:39:07 +0100 Subject: [PATCH 298/407] Implement UI for image iFDO report --- .../Volumes/ImageIfdoReportGenerator.php | 10 +- src/public/assets/scripts/annotations.js | 2 +- src/public/assets/scripts/main.js | 2 +- src/public/mix-manifest.json | 4 +- .../assets/js/reports/mixins/reportForm.vue | 15 ++- .../assets/js/reports/volumeForm.vue | 5 + .../views/partials/reportTypeInfo.blade.php | 3 + src/resources/views/volumeReports.blade.php | 91 ++++++++++--------- .../Volumes/ImageIfdoReportGeneratorTest.php | 26 ++++-- 9 files changed, 99 insertions(+), 59 deletions(-) diff --git a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php index 33506aff6..a02890730 100644 --- a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php @@ -17,14 +17,14 @@ class ImageIfdoReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'iFDO report'; + protected $name = 'image iFDO report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'ifdo_report'; + protected $filename = 'image_ifdo_report'; /** * File extension of the report file. @@ -261,6 +261,12 @@ public function processImage(Image $image) ]; }); + // Remove annotations that should not be included because of an "onlyLabels" + // filter. + $annotations = $annotations->filter(function ($annotation) { + return !empty($annotation['labels']); + }); + $labels = $image->labels->map(function ($iLabel) { $user = $this->users->get($iLabel->user_id); if (!in_array($user, $this->imageAnnotationCreators)) { diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index 81ad3d332..ca8c8df7e 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1 @@ -(()=>{var t={166:function(t){t.exports=function(){"use strict";function t(t,i,r,o,s){e(t,i,r||0,o||t.length-1,s||n)}function e(t,n,r,o,s){for(;o>r;){if(o-r>600){var a=o-r+1,h=n-r+1,u=Math.log(a),l=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*l*(a-l)/a)*(h-a/2<0?-1:1);e(t,n,Math.max(r,Math.floor(n-h*l/a+c)),Math.min(o,Math.floor(n+(a-h)*l/a+c)),s)}var p=t[n],f=r,d=o;for(i(t,r,n),s(t[o],p)>0&&i(t,r,o);f0;)d--}0===s(t[r],p)?i(t,r,d):i(t,++d,o),d<=n&&(r=d+1),n<=d&&(o=d-1)}}function i(t,e,i){var n=t[e];t[e]=t[i],t[i]=n}function n(t,e){return te?1:0}return t}()},510:(t,e,i)=>{"use strict";t.exports=r,t.exports.default=r;var n=i(166);function r(t,e){if(!(this instanceof r))return new r(t,e);this._maxEntries=Math.max(4,t||9),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),e&&this._initFormat(e),this.clear()}function o(t,e,i){if(!i)return e.indexOf(t);for(var n=0;n=t.minX&&e.maxY>=t.minY}function _(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function g(t,e,i,r,o){for(var s,a=[e,i];a.length;)(i=a.pop())-(e=a.pop())<=r||(s=e+Math.ceil((i-e)/r/2)*r,n(t,s,e,i,o),a.push(e,s,s,i))}r.prototype={all:function(){return this._all(this.data,[])},search:function(t){var e=this.data,i=[],n=this.toBBox;if(!d(t,e))return i;for(var r,o,s,a,h=[];e;){for(r=0,o=e.children.length;r=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(r,o,e)},_split:function(t,e){var i=t[e],n=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,n);var o=this._chooseSplitIndex(i,r,n),a=_(i.children.splice(o,i.children.length-o));a.height=i.height,a.leaf=i.leaf,s(i,this.toBBox),s(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(i,a)},_splitRoot:function(t,e){this.data=_([t,e]),this.data.height=t.height+1,this.data.leaf=!1,s(this.data,this.toBBox)},_chooseSplitIndex:function(t,e,i){var n,r,o,s,h,u,l,p,f,d,_,g,y,v;for(u=l=1/0,n=e;n<=i-e;n++)r=a(t,0,n,this.toBBox),o=a(t,n,i,this.toBBox),f=r,d=o,_=void 0,g=void 0,y=void 0,v=void 0,_=Math.max(f.minX,d.minX),g=Math.max(f.minY,d.minY),y=Math.min(f.maxX,d.maxX),v=Math.min(f.maxY,d.maxY),s=Math.max(0,y-_)*Math.max(0,v-g),h=c(r)+c(o),s=e;r--)o=t.children[r],h(l,t.leaf?s(o):o),c+=p(l);return c},_adjustParentBBoxes:function(t,e,i){for(var n=i;n>=0;n--)h(e[n],t)},_condense:function(t){for(var e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children).splice(e.indexOf(t[i]),1):this.clear():s(t[i],this.toBBox)},_initFormat:function(t){var e=["return a"," - b",";"];this.compareMinX=new Function("a","b",e.join(t[0])),this.compareMinY=new Function("a","b",e.join(t[1])),this.toBBox=new Function("a","return {minX: a"+t[0]+", minY: a"+t[1]+", maxX: a"+t[2]+", maxY: a"+t[3]+"};")}}}},e={};function i(n){var r=e[n];if(void 0!==r)return r.exports;var o=e[n]={exports:{}};return t[n].call(o.exports,o,o.exports,i),o.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";function t(){return function(){throw new Error("Unimplemented abstract method.")}()}var e=0;function n(t){return t.ol_uid||(t.ol_uid=String(++e))}var r="5.3.0";const o=function(t){function e(e){var i="Assertion failed. See https://openlayers.org/en/"+("v"+r.split("-")[0])+"/doc/errors/#"+e+" for details.";t.call(this,i),this.code=e,this.name="AssertionError",this.message=i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error);function s(t,e){if(!t)throw new o(e)}function a(t,e,i){return Math.min(Math.max(t,e),i)}var h="cosh"in Math?Math.cosh:function(t){var e=Math.exp(t);return(e+1/e)/2};function u(t,e,i,n,r,o){var s=r-i,a=o-n;if(0!==s||0!==a){var h=((t-i)*s+(e-n)*a)/(s*s+a*a);h>1?(i=r,n=o):h>0&&(i+=s*h,n+=a*h)}return l(t,e,i,n)}function l(t,e,i,n){var r=i-t,o=n-e;return r*r+o*o}function c(t,e,i){return t+i*(e-t)}var p=/^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i,f=/^([a-z]*)$/i;function d(t){return"string"==typeof t?t:g(t)}!function(){var t={},e=0}();function _(t){return t[0]=a(t[0]+.5|0,0,255),t[1]=a(t[1]+.5|0,0,255),t[2]=a(t[2]+.5|0,0,255),t[3]=a(t[3],0,1),t}function g(t){var e=t[0];e!=(0|e)&&(e=e+.5|0);var i=t[1];i!=(0|i)&&(i=i+.5|0);var n=t[2];return n!=(0|n)&&(n=n+.5|0),"rgba("+e+","+i+","+n+","+(void 0===t[3]?1:t[3])+")"}function y(t){return Array.isArray(t)?g(t):t}function v(t,e){var i=document.createElement("canvas");return t&&(i.width=t),e&&(i.height=e),i.getContext("2d")}var m="undefined"!=typeof navigator?navigator.userAgent.toLowerCase():"",C=(m.indexOf("firefox"),-1!==m.indexOf("safari")&&m.indexOf("chrom"),-1!==m.indexOf("webkit")&&m.indexOf("edge"),m.indexOf("macintosh"),window.devicePixelRatio,function(){var t=!1;try{t=!!document.createElement("canvas").getContext("2d").setLineDash}catch(t){}return t}());navigator,window,window,navigator.msPointerEnabled;const x=2;var w=function(){var t,e={};return function(i){if(t||(t=document.createElement("div").style),!(i in e)){t.font=i;var n=t.fontFamily;if(t.font="",!n)return null;e[i]=n.split(/,\s?/)}return e[i]}}(),E="function"==typeof Object.assign?Object.assign:function(t,e){var i=arguments;if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(t),r=1,o=arguments.length;r0},e.prototype.removeEventListener=function(t,e){var i=this.listeners_[t];if(i){var n=i.indexOf(e);t in this.pendingRemovals_?(i[n]=Y,++this.pendingRemovals_[t]):(i.splice(n,1),0===i.length&&delete this.listeners_[t])}},e}(I),B="change",W="clear",V="contextmenu",z="dblclick";const K=function(t){function e(e){t.call(this),this.highWaterMark=void 0!==e?e:2048,this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.canExpireCache=function(){return this.getCount()>this.highWaterMark},e.prototype.clear=function(){this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null,this.dispatchEvent(W)},e.prototype.containsKey=function(t){return this.entries_.hasOwnProperty(t)},e.prototype.forEach=function(t,e){for(var i=this.oldest_;i;)t.call(e,i.value_,i.key_,this),i=i.newer},e.prototype.get=function(t){var e=this.entries_[t];return s(void 0!==e,15),e===this.newest_||(e===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(e.newer.older=e.older,e.older.newer=e.newer),e.newer=null,e.older=this.newest_,this.newest_.newer=e,this.newest_=e),e.value_},e.prototype.remove=function(t){var e=this.entries_[t];return s(void 0!==e,15),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_},e.prototype.getCount=function(){return this.count_},e.prototype.getKeys=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.key_;return e},e.prototype.getValues=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.value_;return e},e.prototype.peekLast=function(){return this.oldest_.value_},e.prototype.peekLastKey=function(){return this.oldest_.key_},e.prototype.peekFirstKey=function(){return this.newest_.key_},e.prototype.pop=function(){var t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_},e.prototype.replace=function(t,e){this.get(t),this.entries_[t].value_=e},e.prototype.set=function(t,e){s(!(t in this.entries_),16);var i={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=i:this.oldest_=i,this.newest_=i,this.entries_[t]=i,++this.count_},e.prototype.setSize=function(t){this.highWaterMark=t},e.prototype.prune=function(){for(;this.canExpireCache();)this.pop()},e}(q);new Array(6);var U=[0,0,0,1],H=[0,0,0,1],J=new K,$={},Z=null,Q={};!function(){var t,e,i=$,n="32px ",r=["monospace","serif"],o=r.length,s="wmytzilWMYTZIL@#/&?$%10";function a(t){for(var i=tt(),a=100;a<=700;a+=300){for(var h=a+" ",u=!0,l=0;l0;)this.pop()},e.prototype.extend=function(t){for(var e=0,i=t.length;e=1?(i=l,n=c):(i=h+d*p,n=u+d*f),[i,n]}function St(t,e){for(var i=!0,n=t.length-1;n>=0;--n)if(t[n]!=e[n]){i=!1;break}return i}function kt(t,e){var i=t[0]-e[0],n=t[1]-e[1];return i*i+n*n}function Mt(t,e){return Math.sqrt(kt(t,e))}var It=L,Pt=X,Rt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey},Dt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&e.shiftKey},bt=function(t){var e=t.pointerEvent;return s(void 0!==e,56),e.isPrimary&&0===e.button};const At=0,Gt=1,Ot=2,Tt=4,Lt=8,Xt=16;function Yt(t){for(var e=Wt(),i=0,n=t.length;ir&&(h|=Tt),ao&&(h|=Ot),h===At&&(h=Gt),h}function Wt(){return[1/0,1/0,-1/0,-1/0]}function Vt(t,e,i,n,r){return r?(r[0]=t,r[1]=e,r[2]=i,r[3]=n,r):[t,e,i,n]}function zt(t){return Vt(1/0,1/0,-1/0,-1/0,t)}function Kt(t,e){var i=t[0],n=t[1];return Vt(i,n,i,n,e)}function Ut(t,e,i,n,r){return $t(zt(r),t,e,i,n)}function Ht(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function Jt(t,e){e[0]t[2]&&(t[2]=e[0]),e[1]t[3]&&(t[3]=e[1])}function $t(t,e,i,n,r){for(;i=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}const ae="Point",he="LineString",ue="LinearRing",le="Polygon",ce="MultiPoint",pe="MultiLineString",fe="MultiPolygon",de="GeometryCollection",_e="Circle",ge="Rectangle",ye="Ellipse";var ve={DEGREES:"degrees",FEET:"ft",METERS:"m",PIXELS:"pixels",TILE_PIXELS:"tile-pixels",USFEET:"us-ft"},me={};me[ve.DEGREES]=2*Math.PI*6370997/360,me[ve.FEET]=.3048,me[ve.METERS]=1,me[ve.USFEET]=1200/3937;const Ce=ve;var xe=function(t){this.code_=t.code,this.units_=t.units,this.extent_=void 0!==t.extent?t.extent:null,this.worldExtent_=void 0!==t.worldExtent?t.worldExtent:null,this.axisOrientation_=void 0!==t.axisOrientation?t.axisOrientation:"enu",this.global_=void 0!==t.global&&t.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=t.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=t.metersPerUnit};xe.prototype.canWrapX=function(){return this.canWrapX_},xe.prototype.getCode=function(){return this.code_},xe.prototype.getExtent=function(){return this.extent_},xe.prototype.getUnits=function(){return this.units_},xe.prototype.getMetersPerUnit=function(){return this.metersPerUnit_||me[this.units_]},xe.prototype.getWorldExtent=function(){return this.worldExtent_},xe.prototype.getAxisOrientation=function(){return this.axisOrientation_},xe.prototype.isGlobal=function(){return this.global_},xe.prototype.setGlobal=function(t){this.global_=t,this.canWrapX_=!(!t||!this.extent_)},xe.prototype.getDefaultTileGrid=function(){return this.defaultTileGrid_},xe.prototype.setDefaultTileGrid=function(t){this.defaultTileGrid_=t},xe.prototype.setExtent=function(t){this.extent_=t,this.canWrapX_=!(!this.global_||!t)},xe.prototype.setWorldExtent=function(t){this.worldExtent_=t},xe.prototype.setGetPointResolution=function(t){this.getPointResolutionFunc_=t},xe.prototype.getPointResolutionFunc=function(){return this.getPointResolutionFunc_};const we=xe;var Ee=6378137,Fe=Math.PI*Ee,Se=[-Fe,-Fe,Fe,Fe],ke=[-180,-85,180,85],Me=function(t){function e(e){t.call(this,{code:e,units:Ce.METERS,extent:Se,global:!0,worldExtent:ke,getPointResolution:function(t,e){return t/h(e[1]/Ee)}})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(we),Ie=[new Me("EPSG:3857"),new Me("EPSG:102100"),new Me("EPSG:102113"),new Me("EPSG:900913"),new Me("urn:ogc:def:crs:EPSG:6.18:3:3857"),new Me("urn:ogc:def:crs:EPSG::3857"),new Me("http://www.opengis.net/gml/srs/epsg.xml#3857")];function Pe(t,e,i){var n=t.length,r=i>1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=Fe,a=0;as?h=s:h<-s&&(h=-s),o[a+1]=h}return o}function Re(t,e,i){var n=t.length,r=i>1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=0;s=e[0]||(t[1]<=e[1]&&t[3]>=e[1]||Qt(t,this.intersectsCoordinate,this))}return!1},e.prototype.setCenter=function(t){var e=this.stride,i=this.flatCoordinates[e]-this.flatCoordinates[0],n=t.slice();n[e]=n[0]+i;for(var r=1;re?1:t1)a=i;else{if(f>0){for(var d=0;dr&&(r=u),o=a,s=h}return r}function li(t,e,i,n,r){for(var o=0,s=i.length;o>1)],e))<0?s=n+1:(a=n,h=!r);return h?s:~s}(f,y);if(v<0){var m=(y-f[-v-2])/(f[-v-1]-f[-v-2]),C=e+(-v-2)*n;s=c(t[C],t[C+n],m),a=c(t[C+1],t[C+n+1],m)}else s=t[e+v*n],a=t[e+v*n+1]}return o?(o[0]=s,o[1]=a,o):[s,a]}function gi(t,e,i,n,r,o){if(i==e)return null;var s;if(r>1;ro&&(u-a)*(o-h)-(r-a)*(l-h)>0&&s++:l<=o&&(u-a)*(o-h)-(r-a)*(l-h)<0&&s--,a=u,h=l}return 0!==s}function mi(t,e,i,n,r,o){if(0===i.length)return!1;if(!vi(t,e,i[0],n,r,o))return!1;for(var s=1,a=i.length;s=r[0]&&o[2]<=r[2]||(o[1]>=r[1]&&o[3]<=r[3]||Ci(t,e,i,n,(function(t,e){return function(t,e,i){var n=!1,r=Bt(t,e),o=Bt(t,i);if(r===Gt||o===Gt)n=!0;else{var s,a,h=t[0],u=t[1],l=t[2],c=t[3],p=e[0],f=e[1],d=i[0],_=i[1],g=(_-f)/(d-p);o&Ot&&!(r&Ot)&&(n=(s=d-(_-c)/g)>=h&&s<=l),n||!(o&Tt)||r&Tt||(n=(a=_-(d-l)*g)>=u&&a<=c),n||!(o&Lt)||r&Lt||(n=(s=d-(_-u)/g)>=h&&s<=l),n||!(o&Xt)||r&Xt||(n=(a=_-(d-h)*g)>=u&&a<=c)}return n}(r,t,e)})))))}function wi(t,e,i,n,r){if(!function(t,e,i,n,r){return!!(xi(t,e,i,n,r)||vi(t,e,i,n,r[0],r[1])||vi(t,e,i,n,r[0],r[3])||vi(t,e,i,n,r[2],r[1])||vi(t,e,i,n,r[2],r[3]))}(t,e,i[0],n,r))return!1;if(1===i.length)return!0;for(var o=1,s=i.length;o0;){for(var p=l.pop(),f=l.pop(),d=0,_=t[f],g=t[f+1],y=t[p],v=t[p+1],m=f+n;md&&(c=m,d=C)}d>r&&(h[(c-e)/n]=1,f+n0&&_>f)&&(d<0&&g0&&g>d)?(a=c,h=p):(o[s++]=a,o[s++]=h,u=a,l=h,a=c,h=p)}}return o[s++]=a,o[s++]=h,s}function Ii(t,e,i,n,r,o,s,a){for(var h=0,u=i.length;hC&&mi(t,e,i,n,u=(l+c)/2,d)&&(m=u,C=x),l=c}return isNaN(m)&&(m=r[o]),s?(s.push(m,d,C),s):[m,d,C]}function Li(t,e,i,n){for(;e0}function Yi(t,e,i,n,r){for(var o=void 0!==r&&r,s=0,a=i.length;s0}}else if(t.type==xt){var n=this.handleDownEvent(t);n&&t.preventDefault(),this.handlingDownUpSequence=n,e=this.stopDown(n)}else t.type==Ct&&this.handleMoveEvent(t);return!e},e.prototype.handleMoveEvent=function(t){},e.prototype.handleUpEvent=function(t){return!1},e.prototype.stopDown=function(t){return t},e.prototype.updateTrackedPointers_=function(t){if(function(t){var e=t.type;return e===xt||e===mt||e===wt}(t)){var e=t.pointerEvent,i=e.pointerId.toString();t.type==wt?delete this.trackedPointers_[i]:(t.type==xt||i in this.trackedPointers_)&&(this.trackedPointers_[i]=e),this.targetPointers=S(this.trackedPointers_)}},e}(function(t){function e(e){t.call(this),e.handleEvent&&(this.handleEvent=e.handleEvent),this.map_=null,this.setActive(!0)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getActive=function(){return this.get(Ki)},e.prototype.getMap=function(){return this.map_},e.prototype.handleEvent=function(t){return!0},e.prototype.setActive=function(t){this.set(Ki,t)},e.prototype.setMap=function(t){this.map_=t},e}(pt)),Hi="VECTOR",Ji="opacity",$i="visible",Zi="extent",Qi="zIndex",tn="maxResolution",en="minResolution",nn="source";const rn="precompose",on="undefined",sn="ready";const an=function(t){function e(e){var i=E({},e);delete i.source,t.call(this,i),this.mapPrecomposeKey_=null,this.mapRenderKey_=null,this.sourceChangeKey_=null,e.map&&this.setMap(e.map),A(this,ct(nn),this.handleSourcePropertyChange_,this);var n=e.source?e.source:null;this.setSource(n)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getLayersArray=function(t){var e=t||[];return e.push(this),e},e.prototype.getLayerStatesArray=function(t){var e=t||[];return e.push(this.getLayerState()),e},e.prototype.getSource=function(){return this.get(nn)||null},e.prototype.getSourceState=function(){var t=this.getSource();return t?t.getState():on},e.prototype.handleSourceChange_=function(){this.changed()},e.prototype.handleSourcePropertyChange_=function(){this.sourceChangeKey_&&(T(this.sourceChangeKey_),this.sourceChangeKey_=null);var t=this.getSource();t&&(this.sourceChangeKey_=A(t,B,this.handleSourceChange_,this)),this.changed()},e.prototype.setMap=function(t){this.mapPrecomposeKey_&&(T(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(T(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=A(t,rn,(function(t){var e=t,i=this.getLayerState();i.managed=!1,void 0===this.getZIndex()&&(i.zIndex=1/0),e.frameState.layerStatesArray.push(i),e.frameState.layerStates[n(this)]=i}),this),this.mapRenderKey_=A(this,B,t.render,t),this.changed())},e.prototype.setSource=function(t){this.set(nn,t)},e}(function(e){function i(t){e.call(this);var i=E({},t);i[Ji]=void 0!==t.opacity?t.opacity:1,i[$i]=void 0===t.visible||t.visible,i[Qi]=t.zIndex,i[tn]=void 0!==t.maxResolution?t.maxResolution:1/0,i[en]=void 0!==t.minResolution?t.minResolution:0,this.setProperties(i),this.state_=null,this.type}return e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i,i.prototype.getType=function(){return this.type},i.prototype.getLayerState=function(){var t=this.state_||{layer:this,managed:!0};return t.opacity=a(this.getOpacity(),0,1),t.sourceState=this.getSourceState(),t.visible=this.getVisible(),t.extent=this.getExtent(),t.zIndex=this.getZIndex()||0,t.maxResolution=this.getMaxResolution(),t.minResolution=Math.max(this.getMinResolution(),0),this.state_=t,t},i.prototype.getLayersArray=function(e){return t()},i.prototype.getLayerStatesArray=function(e){return t()},i.prototype.getExtent=function(){return this.get(Zi)},i.prototype.getMaxResolution=function(){return this.get(tn)},i.prototype.getMinResolution=function(){return this.get(en)},i.prototype.getOpacity=function(){return this.get(Ji)},i.prototype.getSourceState=function(){return t()},i.prototype.getVisible=function(){return this.get($i)},i.prototype.getZIndex=function(){return this.get(Qi)},i.prototype.setExtent=function(t){this.set(Zi,t)},i.prototype.setMaxResolution=function(t){this.set(tn,t)},i.prototype.setMinResolution=function(t){this.set(en,t)},i.prototype.setOpacity=function(t){this.set(Ji,t)},i.prototype.setVisible=function(t){this.set($i,t)},i.prototype.setZIndex=function(t){this.set(Qi,t)},i}(pt)),hn="vector";var un=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.checksum_=void 0};un.prototype.clone=function(){var t=this.getColor();return new un({color:Array.isArray(t)?t.slice():t||void 0})},un.prototype.getColor=function(){return this.color_},un.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},un.prototype.getChecksum=function(){if(void 0===this.checksum_){var t=this.color_;t?Array.isArray(t)||"string"==typeof t?this.checksum_="f"+d(t):this.checksum_=n(this.color_):this.checksum_="f-"}return this.checksum_};const ln=un;var cn=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.lineCap_=e.lineCap,this.lineDash_=void 0!==e.lineDash?e.lineDash:null,this.lineDashOffset_=e.lineDashOffset,this.lineJoin_=e.lineJoin,this.miterLimit_=e.miterLimit,this.width_=e.width,this.checksum_=void 0};cn.prototype.clone=function(){var t=this.getColor();return new cn({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})},cn.prototype.getColor=function(){return this.color_},cn.prototype.getLineCap=function(){return this.lineCap_},cn.prototype.getLineDash=function(){return this.lineDash_},cn.prototype.getLineDashOffset=function(){return this.lineDashOffset_},cn.prototype.getLineJoin=function(){return this.lineJoin_},cn.prototype.getMiterLimit=function(){return this.miterLimit_},cn.prototype.getWidth=function(){return this.width_},cn.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},cn.prototype.setLineCap=function(t){this.lineCap_=t,this.checksum_=void 0},cn.prototype.setLineDash=function(t){this.lineDash_=t,this.checksum_=void 0},cn.prototype.setLineDashOffset=function(t){this.lineDashOffset_=t,this.checksum_=void 0},cn.prototype.setLineJoin=function(t){this.lineJoin_=t,this.checksum_=void 0},cn.prototype.setMiterLimit=function(t){this.miterLimit_=t,this.checksum_=void 0},cn.prototype.setWidth=function(t){this.width_=t,this.checksum_=void 0},cn.prototype.getChecksum=function(){return void 0===this.checksum_&&(this.checksum_="s",this.color_?"string"==typeof this.color_?this.checksum_+=this.color_:this.checksum_+=n(this.color_):this.checksum_+="-",this.checksum_+=","+(void 0!==this.lineCap_?this.lineCap_.toString():"-")+","+(this.lineDash_?this.lineDash_.toString():"-")+","+(void 0!==this.lineDashOffset_?this.lineDashOffset_:"-")+","+(void 0!==this.lineJoin_?this.lineJoin_:"-")+","+(void 0!==this.miterLimit_?this.miterLimit_.toString():"-")+","+(void 0!==this.width_?this.width_.toString():"-")),this.checksum_};const pn=cn;var fn=function(t){var e=t||{};this.geometry_=null,this.geometryFunction_=yn,void 0!==e.geometry&&this.setGeometry(e.geometry),this.fill_=void 0!==e.fill?e.fill:null,this.image_=void 0!==e.image?e.image:null,this.renderer_=void 0!==e.renderer?e.renderer:null,this.stroke_=void 0!==e.stroke?e.stroke:null,this.text_=void 0!==e.text?e.text:null,this.zIndex_=e.zIndex};fn.prototype.clone=function(){var t=this.getGeometry();return t&&"object"==typeof t&&(t=t.clone()),new fn({geometry:t,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})},fn.prototype.getRenderer=function(){return this.renderer_},fn.prototype.setRenderer=function(t){this.renderer_=t},fn.prototype.getGeometry=function(){return this.geometry_},fn.prototype.getGeometryFunction=function(){return this.geometryFunction_},fn.prototype.getFill=function(){return this.fill_},fn.prototype.setFill=function(t){this.fill_=t},fn.prototype.getImage=function(){return this.image_},fn.prototype.setImage=function(t){this.image_=t},fn.prototype.getStroke=function(){return this.stroke_},fn.prototype.setStroke=function(t){this.stroke_=t},fn.prototype.getText=function(){return this.text_},fn.prototype.setText=function(t){this.text_=t},fn.prototype.getZIndex=function(){return this.zIndex_},fn.prototype.setGeometry=function(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=yn,this.geometry_=t},fn.prototype.setZIndex=function(t){this.zIndex_=t};var dn=null;function _n(t,e){if(!dn){var i=new ln({color:"rgba(255,255,255,0.4)"}),n=new pn({color:"#3399CC",width:1.25});dn=[new fn({image:new rt({fill:i,stroke:n,radius:5}),fill:i,stroke:n})]}return dn}function gn(){var t={},e=[255,255,255,1],i=[0,153,255,1];return t[le]=[new fn({fill:new ln({color:[255,255,255,.5]})})],t[fe]=t[le],t[he]=[new fn({stroke:new pn({color:e,width:5})}),new fn({stroke:new pn({color:i,width:3})})],t[pe]=t[he],t[_e]=t[le].concat(t[he]),t[ae]=[new fn({image:new rt({radius:6,fill:new ln({color:i}),stroke:new pn({color:e,width:1.5})}),zIndex:1/0})],t[ce]=t[ae],t[de]=t[le].concat(t[he],t[ae]),t}function yn(t){return t.getGeometry()}const vn=fn;var mn="renderOrder",Cn=function(t){function e(e){var i=e||{},n=E({},i);delete n.style,delete n.renderBuffer,delete n.updateWhileAnimating,delete n.updateWhileInteracting,t.call(this,n),this.declutter_=void 0!==i.declutter&&i.declutter,this.renderBuffer_=void 0!==i.renderBuffer?i.renderBuffer:100,this.style_=null,this.styleFunction_=void 0,this.setStyle(i.style),this.updateWhileAnimating_=void 0!==i.updateWhileAnimating&&i.updateWhileAnimating,this.updateWhileInteracting_=void 0!==i.updateWhileInteracting&&i.updateWhileInteracting,this.renderMode_=i.renderMode||hn,this.type=Hi}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDeclutter=function(){return this.declutter_},e.prototype.setDeclutter=function(t){this.declutter_=t},e.prototype.getRenderBuffer=function(){return this.renderBuffer_},e.prototype.getRenderOrder=function(){return this.get(mn)},e.prototype.getStyle=function(){return this.style_},e.prototype.getStyleFunction=function(){return this.styleFunction_},e.prototype.getUpdateWhileAnimating=function(){return this.updateWhileAnimating_},e.prototype.getUpdateWhileInteracting=function(){return this.updateWhileInteracting_},e.prototype.setRenderOrder=function(t){this.set(mn,t)},e.prototype.setStyle=function(t){this.style_=void 0!==t?t:_n,this.styleFunction_=null===t?void 0:function(t){var e;if("function"==typeof t)e=t;else{var i;Array.isArray(t)?i=t:(s("function"==typeof t.getZIndex,41),i=[t]),e=function(){return i}}return e}(this.style_),this.changed()},e.prototype.getRenderMode=function(){return this.renderMode_},e}(an);Cn.prototype.getSource;const xn=Cn,wn="arraybuffer",En="json",Fn="text",Sn="xml";function kn(t,e){return function(t,e,i,n){return function(r,o,s){var a=new XMLHttpRequest;a.open("GET","function"==typeof t?t(r,o,s):t,!0),e.getType()==wn&&(a.responseType="arraybuffer"),a.onload=function(t){if(!a.status||a.status>=200&&a.status<300){var r,o=e.getType();o==En||o==Fn?r=a.responseText:o==Sn?(r=a.responseXML)||(r=(new DOMParser).parseFromString(a.responseText,"application/xml")):o==wn&&(r=a.response),r?i.call(this,e.readFeatures(r,{featureProjection:s}),e.readProjection(r),e.getLastExtent()):n.call(this)}else n.call(this)}.bind(this),a.onerror=function(){n.call(this)}.bind(this),a.send()}}(t,e,(function(t,e){"function"==typeof this.addFeatures&&this.addFeatures(t)}),Y)}function Mn(t,e){return[[-1/0,-1/0,1/0,1/0]]}function In(t){return t?Array.isArray(t)?function(e){return t}:"function"==typeof t?t:function(e){return[t]}:null}const Pn=function(e){function i(t){e.call(this),this.projection_=We(t.projection),this.attributions_=In(t.attributions),this.attributionsCollapsible_=void 0===t.attributionsCollapsible||t.attributionsCollapsible,this.loading=!1,this.state_=void 0!==t.state?t.state:sn,this.wrapX_=void 0!==t.wrapX&&t.wrapX}return e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i,i.prototype.getAttributions=function(){return this.attributions_},i.prototype.getAttributionsCollapsible=function(){return this.attributionsCollapsible_},i.prototype.getProjection=function(){return this.projection_},i.prototype.getResolutions=function(){return t()},i.prototype.getState=function(){return this.state_},i.prototype.getWrapX=function(){return this.wrapX_},i.prototype.refresh=function(){this.changed()},i.prototype.setAttributions=function(t){this.attributions_=In(t),this.changed()},i.prototype.setState=function(t){this.state_=t,this.changed()},i}(pt),Rn="addfeature",Dn="changefeature",bn="clear",An="removefeature";var Gn=i(510),On=i.n(Gn),Tn=function(t){this.rbush_=On()(t,void 0),this.items_={}};Tn.prototype.insert=function(t,e){var i={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3],value:e};this.rbush_.insert(i),this.items_[n(e)]=i},Tn.prototype.load=function(t,e){for(var i=new Array(e.length),r=0,o=e.length;r2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]];if(0===o[1])t=[[i,i,i,i]];else{var s=[-1*o[1],o[0]],a=o[0]/o[1],h=(r[0]+a*(n[1]-r[1])-n[0])/(s[0]-s[1]*a),u=[h*s[0],h*s[1]];t=[[[i[0]-u[0],i[1]-u[1]],[n[0]-u[0],n[1]-u[1]],[n[0]+u[0],n[1]+u[1]],[i[0]+u[0],i[1]+u[1]]]]}}else t=[t];var l=e;return l?l.setCoordinates(t):l=new jn(t),l};else if(this.type_===ye)this.minPoints_=3,this.maxPoints_=3,r=function(t,e){if(t.length>2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]],s=[i[0]+.5*o[0],i[1]+.5*o[1]];if(0===o[1])t=[[i,i,i,i]];else{var a=[-1*o[1],o[0]],h=o[0]/o[1],u=(r[0]+h*(n[1]-r[1])-n[0])/(a[0]-a[1]*h),l=[u*a[0],u*a[1]];t=[[[i[0],i[1]],[s[0]-l[0],s[1]-l[1]],[n[0],n[1]],[s[0]+l[0],s[1]+l[1]]]]}}else t=[t];var c=e;return c?c.setCoordinates(t):c=new Nn(t),c};else{var o,s=this.mode_;s===qn?o=Di:s===Bn?o=Pi:s===Wn&&(o=Bi),r=function(t,e){var i=e;return i?s===Wn?t[0].length?i.setCoordinates([t[0].concat([t[0][0]])]):i.setCoordinates([]):i.setCoordinates(t):i=new o(t),i}}this.geometryFunction_=r,this.dragVertexDelay_=void 0!==e.dragVertexDelay?e.dragVertexDelay:500,this.finishCoordinate_=null,this.sketchFeature_=null,this.sketchPoint_=null,this.sketchCoords_=null,this.sketchLine_=null,this.sketchLineCoords_=null,this.squaredClickTolerance_=e.clickTolerance?e.clickTolerance*e.clickTolerance:36,this.overlay_=new xn({source:new Yn({useSpatialIndex:!1,wrapX:!!e.wrapX&&e.wrapX}),style:e.style?e.style:(n=gn(),function(t,e){return n[t.getGeometry().getType()]}),updateWhileInteracting:!0}),this.geometryName_=e.geometryName,this.condition_=e.condition?e.condition:Rt,this.freehandCondition_,e.freehand?this.freehandCondition_=It:this.freehandCondition_=e.freehandCondition?e.freehandCondition:Dt,A(this,ct(Ki),this.updateState_,this)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setMap=function(e){t.prototype.setMap.call(this,e),this.updateState_()},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleEvent=function(e){e.originalEvent.type===V&&e.preventDefault(),this.freehand_=this.mode_!==qn&&this.freehandCondition_(e);var i=e.type===Ct,n=!0;!this.freehand_&&this.lastDragTime_&&e.type===mt&&(Date.now()-this.lastDragTime_>=this.dragVertexDelay_?(this.downPx_=e.pixel,this.shouldHandle_=!this.freehand_,i=!0):this.lastDragTime_=void 0,this.shouldHandle_&&void 0!==this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0));return this.freehand_&&e.type===mt&&null!==this.sketchFeature_?(this.addToDrawing_(e),n=!1):this.freehand_&&e.type===xt?n=!1:i?(n=e.type===Ct)&&this.freehand_?n=this.handlePointerMove_(e):(e.pointerEvent.pointerType==zi||e.type===mt&&void 0===this.downTimeout_)&&this.handlePointerMove_(e):e.type===vt&&(n=!1),t.prototype.handleEvent.call(this,e)&&n},e.prototype.handleDownEvent=function(t){return this.shouldHandle_=!this.freehand_,this.freehand_?(this.downPx_=t.pixel,this.finishCoordinate_||this.startDrawing_(t),!0):!!this.condition_(t)&&(this.lastDragTime_=Date.now(),this.downTimeout_=setTimeout(function(){this.handlePointerMove_(new Et(Ct,t.map,t.pointerEvent,!1,t.frameState))}.bind(this),this.dragVertexDelay_),this.downPx_=t.pixel,!0)},e.prototype.handleUpEvent=function(t){var e=!0;this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0),this.handlePointerMove_(t);var i=this.mode_===Vn;return this.shouldHandle_?(this.finishCoordinate_?this.freehand_||i?this.finishDrawing():this.atFinish_(t)?this.finishCondition_(t)&&this.finishDrawing():this.addToDrawing_(t):(this.startDrawing_(t),this.mode_===qn&&this.finishDrawing()),e=!1):this.freehand_&&(this.finishCoordinate_=null,this.abortDrawing_()),!e&&this.stopClick_&&t.stopPropagation(),e},e.prototype.handlePointerMove_=function(t){if(this.downPx_&&(!this.freehand_&&this.shouldHandle_||this.freehand_&&!this.shouldHandle_)){var e=this.downPx_,i=t.pixel,n=e[0]-i[0],r=e[1]-i[1],o=n*n+r*r;if(this.shouldHandle_=this.freehand_?o>this.squaredClickTolerance_:o<=this.squaredClickTolerance_,!this.shouldHandle_)return!0}return this.finishCoordinate_?this.modifyDrawing_(t):this.createOrUpdateSketchPoint_(t),!0},e.prototype.atFinish_=function(t){var e=!1;if(this.sketchFeature_){var i=!1,n=[this.finishCoordinate_];if(this.mode_===Bn)i=this.sketchCoords_.length>this.minPoints_;else if(this.mode_===Wn){var r=this.sketchCoords_;i=r[0].length>this.minPoints_,n=[r[0][0],r[0][r[0].length-2]]}if(i)for(var o=t.map,s=0,a=n.length;s=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),this.geometryFunction_(i,r)):this.mode_===Wn&&((i=this.sketchCoords_[0]).length>=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),e&&(this.finishCoordinate_=i[0]),this.geometryFunction_(this.sketchCoords_,r)),this.updateSketchFeatures_(),e&&this.finishDrawing()},e.prototype.removeLastPoint=function(){if(this.sketchFeature_){var t,e=this.sketchFeature_.getGeometry();this.mode_===Bn?((t=this.sketchCoords_).splice(-2,1),this.geometryFunction_(t,e),t.length>=2&&(this.finishCoordinate_=t[t.length-2].slice())):this.mode_===Wn&&((t=this.sketchCoords_[0]).splice(-2,1),this.sketchLine_.getGeometry().setCoordinates(t),this.geometryFunction_(this.sketchCoords_,e)),0===t.length&&(this.finishCoordinate_=null),this.updateSketchFeatures_()}},e.prototype.finishDrawing=function(){var t=this.abortDrawing_();if(t){var e=this.sketchCoords_,i=t.getGeometry();this.mode_===Bn?(e.pop(),this.geometryFunction_(e,i)):this.mode_===Wn&&(e[0].pop(),this.geometryFunction_(e,i),e=i.getCoordinates()),this.type_===ce?t.setGeometry(new bi([e])):this.type_===pe?t.setGeometry(new Ri([e])):this.type_===fe&&t.setGeometry(new Wi([e])),this.dispatchEvent(new Hn(Un,t)),this.features_&&this.features_.push(t),this.source_&&this.source_.addFeature(t)}},e.prototype.abortDrawing_=function(){this.finishCoordinate_=null;var t=this.sketchFeature_;return t&&(this.sketchFeature_=null,this.sketchPoint_=null,this.sketchLine_=null,this.overlay_.getSource().clear(!0)),t},e.prototype.extend=function(t){var e=t.getGeometry();this.sketchFeature_=t,this.sketchCoords_=e.getCoordinates();var i=this.sketchCoords_[this.sketchCoords_.length-1];this.finishCoordinate_=i.slice(),this.sketchCoords_.push(i.slice()),this.updateSketchFeatures_(),this.dispatchEvent(new Hn(Kn,this.sketchFeature_))},e.prototype.updateSketchFeatures_=function(){var t=[];this.sketchFeature_&&t.push(this.sketchFeature_),this.sketchLine_&&t.push(this.sketchLine_),this.sketchPoint_&&t.push(this.sketchPoint_);var e=this.overlay_.getSource();e.clear(!0),e.addFeatures(t)},e.prototype.updateState_=function(){var t=this.getMap(),e=this.getActive();t&&e||this.abortDrawing_(),this.overlay_.setMap(e?t:null)},e}(Ui),$n=Vue.resource("/api/v1/volumes{/id}/export-area");var Zn="modifystart",Qn="modifyend",tr=function(t){function e(e,i,n){t.call(this,e),this.features=i,this.mapBrowserEvent=n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(N);function er(t,e){return t.index-e.index}function ir(t,e){var i,n,r=e.geometry;if(r.getType()===_e){var o=r;if(1===e.index){var s=kt(o.getCenter(),t),a=Math.sqrt(s)-o.getRadius();return a*a}}return i=t,n=e.segment,kt(i,Ft(i,n))}function nr(t,e){var i=e.geometry;return i.getType()===_e&&1===e.index||i.getType()===ye||i.getType()===ge?i.getClosestPoint(t):Ft(t,e.segment)}const rr=function(t){function e(e){var i,n;if(t.call(this,e),this.condition_=e.condition?e.condition:bt,this.defaultDeleteCondition_=function(t){return function(t){var e=t.originalEvent;return e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey}(t)&&function(t){return t.type==yt}(t)},this.deleteCondition_=e.deleteCondition?e.deleteCondition:this.defaultDeleteCondition_,this.insertVertexCondition_=e.insertVertexCondition?e.insertVertexCondition:It,this.vertexFeature_=null,this.vertexSegments_=null,this.lastPixel_=[0,0],this.ignoreNextSingleClick_=!1,this.modified_=!1,this.rBush_=new Ln,this.pixelTolerance_=void 0!==e.pixelTolerance?e.pixelTolerance:10,this.snappedToVertex_=!1,this.changingFeature_=!1,this.dragSegments_=[],this.overlay_=new xn({source:new Yn({useSpatialIndex:!1,wrapX:!!e.wrapX}),style:e.style?e.style:(i=gn(),function(t,e){return i[ae]}),updateWhileAnimating:!0,updateWhileInteracting:!0}),this.SEGMENT_WRITERS_={Point:this.writePointGeometry_,LineString:this.writeLineStringGeometry_,LinearRing:this.writeLineStringGeometry_,Polygon:this.writePolygonGeometry_,MultiPoint:this.writeMultiPointGeometry_,MultiLineString:this.writeMultiLineStringGeometry_,MultiPolygon:this.writeMultiPolygonGeometry_,Rectangle:this.writePolygonGeometry_,Ellipse:this.writePolygonGeometry_,Circle:this.writeCircleGeometry_,GeometryCollection:this.writeGeometryCollectionGeometry_},this.source_=null,e.source?(this.source_=e.source,n=new _t(this.source_.getFeatures()),A(this.source_,Rn,this.handleSourceAdd_,this),A(this.source_,An,this.handleSourceRemove_,this)):n=e.features,!n)throw new Error("The modify interaction requires features or a source");this.features_=n,this.features_.forEach(this.addFeature_.bind(this)),A(this.features_,ot,this.handleFeatureAdd_,this),A(this.features_,st,this.handleFeatureRemove_,this),this.lastPointerEvent_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.addFeature_=function(t){var e=t.getGeometry();e&&e.getType()in this.SEGMENT_WRITERS_&&this.SEGMENT_WRITERS_[e.getType()].call(this,t,e);var i=this.getMap();i&&i.isRendered()&&this.getActive()&&this.handlePointerAtPixel_(this.lastPixel_,i),A(t,B,this.handleFeatureChange_,this)},e.prototype.willModifyFeatures_=function(t){this.modified_||(this.modified_=!0,this.dispatchEvent(new tr(Zn,this.features_,t)))},e.prototype.removeFeature_=function(t){this.removeFeatureSegmentData_(t),this.vertexFeature_&&0===this.features_.getLength()&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),O(t,B,this.handleFeatureChange_,this)},e.prototype.removeFeatureSegmentData_=function(t){var e=this.rBush_,i=[];e.forEach((function(e){t===e.feature&&i.push(e)}));for(var n=i.length-1;n>=0;--n)e.remove(i[n])},e.prototype.setActive=function(e){this.vertexFeature_&&!e&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),t.prototype.setActive.call(this,e)},e.prototype.setMap=function(e){this.overlay_.setMap(e),t.prototype.setMap.call(this,e)},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleSourceAdd_=function(t){t.feature&&this.features_.push(t.feature)},e.prototype.handleSourceRemove_=function(t){t.feature&&this.features_.remove(t.feature)},e.prototype.handleFeatureAdd_=function(t){this.addFeature_(t.element)},e.prototype.handleFeatureChange_=function(t){if(!this.changingFeature_){var e=t.target;this.removeFeature_(e),this.addFeature_(e)}},e.prototype.handleFeatureRemove_=function(t){var e=t.element;this.removeFeature_(e)},e.prototype.writePointGeometry_=function(t,e){var i=e.getCoordinates(),n={feature:t,geometry:e,segment:[i,i]};this.rBush_.insert(e.getExtent(),n)},e.prototype.writeMultiPointGeometry_=function(t,e){for(var i=e.getCoordinates(),n=0,r=i.length;n=0;--_)this.insertVertex_.apply(this,r[_])}return!!this.vertexFeature_},e.prototype.handleUpEvent=function(t){for(var e=this.dragSegments_.length-1;e>=0;--e){var i=this.dragSegments_[e][0],n=i.geometry;if(n.getType()===ge||n.getType()===ye)this.features_.remove(i.feature),this.features_.push(i.feature);else if(n.getType()===_e){var r=n.getCenter(),o=i.featureSegments[0],s=i.featureSegments[1];o.segment[0]=o.segment[1]=r,s.segment[0]=s.segment[1]=r,this.rBush_.update(Kt(r),o),this.rBush_.update(n.getExtent(),s)}else this.rBush_.update(Yt(i.segment),i)}return this.modified_&&(this.dispatchEvent(new tr(Qn,this.features_,t)),this.modified_=!1),!1},e.prototype.handlePointerMove_=function(t){this.lastPixel_=t.pixel,this.handlePointerAtPixel_(t.pixel,t.map)},e.prototype.handlePointerAtPixel_=function(t,e){var i,r,o,s=e.getCoordinateFromPixel(t),a=(i=Kt(s),r=e.getView().getResolution()*this.pixelTolerance_,o?(o[0]=i[0]-r,o[1]=i[1]-r,o[2]=i[2]+r,o[3]=i[3]+r,o):[i[0]-r,i[1]-r,i[2]+r,i[3]+r]),h=this.rBush_.getInExtent(a);if(h.length>0){h.sort((function(t,e){return ir(s,t)-ir(s,e)}));var u=h[0],l=u.segment,c=nr(s,u),p=e.getPixelFromCoordinate(c),f=Mt(t,p);if(f<=this.pixelTolerance_){var d={};if(u.geometry.getType()===_e&&1===u.index)this.snappedToVertex_=!0,this.createOrUpdateVertexFeature_(c);else{var _=e.getPixelFromCoordinate(l[0]),g=e.getPixelFromCoordinate(l[1]),y=kt(p,_),v=kt(p,g);f=Math.sqrt(Math.min(y,v)),this.snappedToVertex_=f<=this.pixelTolerance_,this.snappedToVertex_&&(c=y>v?l[1]:l[0]),this.createOrUpdateVertexFeature_(c);for(var m=1,C=h.length;m=0;--o)c=n((l=(i=p[o])[0]).feature),l.depth&&(c+="-"+l.depth.join("-")),c in f||(f[c]={}),0===i[1]?(f[c].right=l,f[c].index=l.index):1==i[1]&&(f[c].left=l,f[c].index=l.index+1);for(c in f){switch(u=f[c].right,a=f[c].left,(h=(s=f[c].index)-1)<0&&(h=0),t=e=(r=(l=void 0!==a?a:u).geometry).getCoordinates(),d=!1,r.getType()){case pe:e[l.depth[0]].length>2&&(e[l.depth[0]].splice(s,1),d=!0);break;case he:e.length>2&&(e.splice(s,1),d=!0);break;case fe:t=t[l.depth[1]];case le:(t=t[l.depth[0]]).length>4&&(s==t.length-1&&(s=0),t.splice(s,1),d=!0,0===s&&(t.pop(),t.push(t[0]),h=t.length-1))}if(d){this.setGeometryCoordinates_(r,e);var _=[];if(void 0!==a&&(this.rBush_.remove(a),_.push(a.segment[0])),void 0!==u&&(this.rBush_.remove(u),_.push(u.segment[1])),void 0!==a&&void 0!==u){var g={depth:l.depth,feature:l.feature,geometry:l.geometry,index:h,segment:_};this.rBush_.insert(Yt(g.segment),g)}this.updateSegmentIndices_(r,s,l.depth,-1),this.vertexFeature_&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),p.length=0}}return d},e.prototype.setGeometryCoordinates_=function(t,e){this.changingFeature_=!0,t.setCoordinates(e),this.changingFeature_=!1},e.prototype.updateSegmentIndices_=function(t,e,i,n){this.rBush_.forEachInExtent(t.getExtent(),(function(r){r.geometry===t&&(void 0===i||void 0===r.depth||function(t,e){var i=t.length;if(i!==e.length)return!1;for(var n=0;ne&&(r.index+=n)}))},e}(Ui);var or=biigle.$require("events"),sr=biigle.$require("messages").handleErrorResponse,ar=biigle.$require("annotations.components.settingsTabPlugins");const hr=function(t,e,i,n,r,o,s,a){var h,u="function"==typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=i,u._compiled=!0),n&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),s?(h=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),r&&r.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(s)},u._ssrRegister=h):r&&(h=a?function(){r.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:r),h)if(u.functional){u._injectStyles=h;var l=u.render;u.render=function(t,e){return h.call(e),l(t,e)}}else{var c=u.beforeCreate;u.beforeCreate=c?[].concat(c,h):[h]}return{exports:t,options:u}}({props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null,volumeId:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},layer:function(){return new xn({source:new Yn({features:new _t}),style:[new vn({stroke:new pn({color:"white",width:4}),image:new rt({radius:6,fill:new ln({color:"#666666"}),stroke:new pn({color:"white",width:2,lineDash:[2]})})}),new vn({stroke:new pn({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new Jn({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(t,e){t.length>1&&(t=[t[0],[t[0][0],t[1][1]],t[1],[t[1][0],t[0][1]]]);var i=e;return i?i.setCoordinates([t]):i=new jn([t]),i}})},modifyInteraction:function(){return new rr({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:Pt})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){var t=this;if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),$n.delete({id:this.volumeId}).then((function(){return t.exportArea=null})).catch((function(t){e.addFeature(i),sr(t)}))}},updateCurrentImage:function(t,e){this.currentImage=e},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var t=this.currentImage.tiled?0:this.height,e=new jn([[[this.exportArea[0],t-this.exportArea[1]],[this.exportArea[0],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[1]]]]);this.layer.getSource().addFeature(new gt({geometry:e}))}},handleModifyend:function(t){this.updateExportArea(t.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(t){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),this.updateExportArea(t.feature).catch((function(){e.clear(),i&&e.addFeature(i)}))},updateExportArea:function(t){var e=this,i=t.getGeometry().getCoordinates()[0],n=this.currentImage.tiled?0:this.height;i=[i[0][0],n-i[0][1],i[2][0],n-i[2][1]].map(Math.round);var r=$n.save({id:this.volumeId},{coordinates:i}).then((function(){return e.exportArea=i}));return r.catch(sr),r},extendMap:function(t){t.addLayer(this.layer),t.addInteraction(this.drawInteraction),t.addInteraction(this.modifyInteraction)}},watch:{opacity:function(t){t<1?this.settings.set("exportAreaOpacity",t):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(t)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.volumeId=biigle.$require("annotations.volumeId"),this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend),or.$on("images.change",this.updateCurrentImage),or.$on("annotations.map.init",this.extendMap)}},undefined,undefined,!1,null,null,null).exports;ar&&(ar.exportArea=hr)})()})(); \ No newline at end of file +(()=>{var t={166:function(t){t.exports=function(){"use strict";function t(t,i,r,o,s){e(t,i,r||0,o||t.length-1,s||n)}function e(t,n,r,o,s){for(;o>r;){if(o-r>600){var a=o-r+1,h=n-r+1,u=Math.log(a),l=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*l*(a-l)/a)*(h-a/2<0?-1:1);e(t,n,Math.max(r,Math.floor(n-h*l/a+c)),Math.min(o,Math.floor(n+(a-h)*l/a+c)),s)}var p=t[n],f=r,d=o;for(i(t,r,n),s(t[o],p)>0&&i(t,r,o);f0;)d--}0===s(t[r],p)?i(t,r,d):i(t,++d,o),d<=n&&(r=d+1),n<=d&&(o=d-1)}}function i(t,e,i){var n=t[e];t[e]=t[i],t[i]=n}function n(t,e){return te?1:0}return t}()},510:(t,e,i)=>{"use strict";t.exports=r,t.exports.default=r;var n=i(166);function r(t,e){if(!(this instanceof r))return new r(t,e);this._maxEntries=Math.max(4,t||9),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),e&&this._initFormat(e),this.clear()}function o(t,e,i){if(!i)return e.indexOf(t);for(var n=0;n=t.minX&&e.maxY>=t.minY}function _(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function g(t,e,i,r,o){for(var s,a=[e,i];a.length;)(i=a.pop())-(e=a.pop())<=r||(s=e+Math.ceil((i-e)/r/2)*r,n(t,s,e,i,o),a.push(e,s,s,i))}r.prototype={all:function(){return this._all(this.data,[])},search:function(t){var e=this.data,i=[],n=this.toBBox;if(!d(t,e))return i;for(var r,o,s,a,h=[];e;){for(r=0,o=e.children.length;r=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(r,o,e)},_split:function(t,e){var i=t[e],n=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,n);var o=this._chooseSplitIndex(i,r,n),a=_(i.children.splice(o,i.children.length-o));a.height=i.height,a.leaf=i.leaf,s(i,this.toBBox),s(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(i,a)},_splitRoot:function(t,e){this.data=_([t,e]),this.data.height=t.height+1,this.data.leaf=!1,s(this.data,this.toBBox)},_chooseSplitIndex:function(t,e,i){var n,r,o,s,h,u,l,p,f,d,_,g,y,v;for(u=l=1/0,n=e;n<=i-e;n++)r=a(t,0,n,this.toBBox),o=a(t,n,i,this.toBBox),f=r,d=o,_=void 0,g=void 0,y=void 0,v=void 0,_=Math.max(f.minX,d.minX),g=Math.max(f.minY,d.minY),y=Math.min(f.maxX,d.maxX),v=Math.min(f.maxY,d.maxY),s=Math.max(0,y-_)*Math.max(0,v-g),h=c(r)+c(o),s=e;r--)o=t.children[r],h(l,t.leaf?s(o):o),c+=p(l);return c},_adjustParentBBoxes:function(t,e,i){for(var n=i;n>=0;n--)h(e[n],t)},_condense:function(t){for(var e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children).splice(e.indexOf(t[i]),1):this.clear():s(t[i],this.toBBox)},_initFormat:function(t){var e=["return a"," - b",";"];this.compareMinX=new Function("a","b",e.join(t[0])),this.compareMinY=new Function("a","b",e.join(t[1])),this.toBBox=new Function("a","return {minX: a"+t[0]+", minY: a"+t[1]+", maxX: a"+t[2]+", maxY: a"+t[3]+"};")}}}},e={};function i(n){var r=e[n];if(void 0!==r)return r.exports;var o=e[n]={exports:{}};return t[n].call(o.exports,o,o.exports,i),o.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";function t(){return function(){throw new Error("Unimplemented abstract method.")}()}var e=0;function n(t){return t.ol_uid||(t.ol_uid=String(++e))}var r="5.3.1";const o=function(t){function e(e){var i="Assertion failed. See https://openlayers.org/en/"+("v"+r.split("-")[0])+"/doc/errors/#"+e+" for details.";t.call(this,i),this.code=e,this.name="AssertionError",this.message=i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error);function s(t,e){if(!t)throw new o(e)}function a(t,e,i){return Math.min(Math.max(t,e),i)}var h="cosh"in Math?Math.cosh:function(t){var e=Math.exp(t);return(e+1/e)/2};function u(t,e,i,n,r,o){var s=r-i,a=o-n;if(0!==s||0!==a){var h=((t-i)*s+(e-n)*a)/(s*s+a*a);h>1?(i=r,n=o):h>0&&(i+=s*h,n+=a*h)}return l(t,e,i,n)}function l(t,e,i,n){var r=i-t,o=n-e;return r*r+o*o}function c(t,e,i){return t+i*(e-t)}var p=/^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i,f=/^([a-z]*)$/i;function d(t){return"string"==typeof t?t:g(t)}!function(){var t={},e=0}();function _(t){return t[0]=a(t[0]+.5|0,0,255),t[1]=a(t[1]+.5|0,0,255),t[2]=a(t[2]+.5|0,0,255),t[3]=a(t[3],0,1),t}function g(t){var e=t[0];e!=(0|e)&&(e=e+.5|0);var i=t[1];i!=(0|i)&&(i=i+.5|0);var n=t[2];return n!=(0|n)&&(n=n+.5|0),"rgba("+e+","+i+","+n+","+(void 0===t[3]?1:t[3])+")"}function y(t){return Array.isArray(t)?g(t):t}function v(t,e){var i=document.createElement("canvas");return t&&(i.width=t),e&&(i.height=e),i.getContext("2d")}var m="undefined"!=typeof navigator?navigator.userAgent.toLowerCase():"",C=(m.indexOf("firefox"),-1!==m.indexOf("safari")&&m.indexOf("chrom"),-1!==m.indexOf("webkit")&&m.indexOf("edge"),m.indexOf("macintosh"),window.devicePixelRatio,function(){var t=!1;try{t=!!document.createElement("canvas").getContext("2d").setLineDash}catch(t){}return t}());navigator,window,window,navigator.msPointerEnabled;const x=2;var w=function(){var t,e={};return function(i){if(t||(t=document.createElement("div").style),!(i in e)){t.font=i;var n=t.fontFamily;if(t.font="",!n)return null;e[i]=n.split(/,\s?/)}return e[i]}}(),E="function"==typeof Object.assign?Object.assign:function(t,e){var i=arguments;if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(t),r=1,o=arguments.length;r0},e.prototype.removeEventListener=function(t,e){var i=this.listeners_[t];if(i){var n=i.indexOf(e);t in this.pendingRemovals_?(i[n]=Y,++this.pendingRemovals_[t]):(i.splice(n,1),0===i.length&&delete this.listeners_[t])}},e}(I);const B=q,W="change",V="clear",z="contextmenu",K="dblclick";const U=function(t){function e(e){t.call(this),this.highWaterMark=void 0!==e?e:2048,this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.canExpireCache=function(){return this.getCount()>this.highWaterMark},e.prototype.clear=function(){this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null,this.dispatchEvent(V)},e.prototype.containsKey=function(t){return this.entries_.hasOwnProperty(t)},e.prototype.forEach=function(t,e){for(var i=this.oldest_;i;)t.call(e,i.value_,i.key_,this),i=i.newer},e.prototype.get=function(t){var e=this.entries_[t];return s(void 0!==e,15),e===this.newest_||(e===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(e.newer.older=e.older,e.older.newer=e.newer),e.newer=null,e.older=this.newest_,this.newest_.newer=e,this.newest_=e),e.value_},e.prototype.remove=function(t){var e=this.entries_[t];return s(void 0!==e,15),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_},e.prototype.getCount=function(){return this.count_},e.prototype.getKeys=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.key_;return e},e.prototype.getValues=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.value_;return e},e.prototype.peekLast=function(){return this.oldest_.value_},e.prototype.peekLastKey=function(){return this.oldest_.key_},e.prototype.peekFirstKey=function(){return this.newest_.key_},e.prototype.pop=function(){var t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_},e.prototype.replace=function(t,e){this.get(t),this.entries_[t].value_=e},e.prototype.set=function(t,e){s(!(t in this.entries_),16);var i={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=i:this.oldest_=i,this.newest_=i,this.entries_[t]=i,++this.count_},e.prototype.setSize=function(t){this.highWaterMark=t},e.prototype.prune=function(){for(;this.canExpireCache();)this.pop()},e}(B);new Array(6);var H=[0,0,0,1],J=[0,0,0,1],$=new U,Z={},Q=null,tt={};!function(){var t,e,i=Z,n="32px ",r=["monospace","serif"],o=r.length,s="wmytzilWMYTZIL@#/&?$%10";function a(t){for(var i=et(),a=100;a<=700;a+=300){for(var h=a+" ",u=!0,l=0;l0;)this.pop()},e.prototype.extend=function(t){for(var e=0,i=t.length;e=1?(i=l,n=c):(i=h+d*p,n=u+d*f),[i,n]}function Gt(t,e){for(var i=!0,n=t.length-1;n>=0;--n)if(t[n]!=e[n]){i=!1;break}return i}function Ot(t,e){var i=t[0]-e[0],n=t[1]-e[1];return i*i+n*n}function Tt(t,e){return Math.sqrt(Ot(t,e))}var Lt=L,Xt=X,Yt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey},jt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&e.shiftKey},Nt=function(t){var e=t.pointerEvent;return s(void 0!==e,56),e.isPrimary&&0===e.button};const qt=0,Bt=1,Wt=2,Vt=4,zt=8,Kt=16;function Ut(t){for(var e=Qt(),i=0,n=t.length;ir&&(h|=Vt),ao&&(h|=Wt),h===qt&&(h=Bt),h}function Qt(){return[1/0,1/0,-1/0,-1/0]}function te(t,e,i,n,r){return r?(r[0]=t,r[1]=e,r[2]=i,r[3]=n,r):[t,e,i,n]}function ee(t){return te(1/0,1/0,-1/0,-1/0,t)}function ie(t,e){var i=t[0],n=t[1];return te(i,n,i,n,e)}function ne(t,e,i,n,r){return se(ee(r),t,e,i,n)}function re(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function oe(t,e){e[0]t[2]&&(t[2]=e[0]),e[1]t[3]&&(t[3]=e[1])}function se(t,e,i,n,r){for(;i=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}const ge="Point",ye="LineString",ve="LinearRing",me="Polygon",Ce="MultiPoint",xe="MultiLineString",we="MultiPolygon",Ee="GeometryCollection",Fe="Circle",Se="Rectangle",ke="Ellipse";var Me={DEGREES:"degrees",FEET:"ft",METERS:"m",PIXELS:"pixels",TILE_PIXELS:"tile-pixels",USFEET:"us-ft"},Ie={};Ie[Me.DEGREES]=2*Math.PI*6370997/360,Ie[Me.FEET]=.3048,Ie[Me.METERS]=1,Ie[Me.USFEET]=1200/3937;const Pe=Me;var Re=function(t){this.code_=t.code,this.units_=t.units,this.extent_=void 0!==t.extent?t.extent:null,this.worldExtent_=void 0!==t.worldExtent?t.worldExtent:null,this.axisOrientation_=void 0!==t.axisOrientation?t.axisOrientation:"enu",this.global_=void 0!==t.global&&t.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=t.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=t.metersPerUnit};Re.prototype.canWrapX=function(){return this.canWrapX_},Re.prototype.getCode=function(){return this.code_},Re.prototype.getExtent=function(){return this.extent_},Re.prototype.getUnits=function(){return this.units_},Re.prototype.getMetersPerUnit=function(){return this.metersPerUnit_||Ie[this.units_]},Re.prototype.getWorldExtent=function(){return this.worldExtent_},Re.prototype.getAxisOrientation=function(){return this.axisOrientation_},Re.prototype.isGlobal=function(){return this.global_},Re.prototype.setGlobal=function(t){this.global_=t,this.canWrapX_=!(!t||!this.extent_)},Re.prototype.getDefaultTileGrid=function(){return this.defaultTileGrid_},Re.prototype.setDefaultTileGrid=function(t){this.defaultTileGrid_=t},Re.prototype.setExtent=function(t){this.extent_=t,this.canWrapX_=!(!this.global_||!t)},Re.prototype.setWorldExtent=function(t){this.worldExtent_=t},Re.prototype.setGetPointResolution=function(t){this.getPointResolutionFunc_=t},Re.prototype.getPointResolutionFunc=function(){return this.getPointResolutionFunc_};const De=Re;var be=6378137,Ae=Math.PI*be,Ge=[-Ae,-Ae,Ae,Ae],Oe=[-180,-85,180,85],Te=function(t){function e(e){t.call(this,{code:e,units:Pe.METERS,extent:Ge,global:!0,worldExtent:Oe,getPointResolution:function(t,e){return t/h(e[1]/be)}})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(De),Le=[new Te("EPSG:3857"),new Te("EPSG:102100"),new Te("EPSG:102113"),new Te("EPSG:900913"),new Te("urn:ogc:def:crs:EPSG:6.18:3:3857"),new Te("urn:ogc:def:crs:EPSG::3857"),new Te("http://www.opengis.net/gml/srs/epsg.xml#3857")];function Xe(t,e,i){var n=t.length,r=i>1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=Ae,a=0;as?h=s:h<-s&&(h=-s),o[a+1]=h}return o}function Ye(t,e,i){var n=t.length,r=i>1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=0;s=e[0]||(t[1]<=e[1]&&t[3]>=e[1]||he(t,this.intersectsCoordinate,this))}return!1},e.prototype.setCenter=function(t){var e=this.stride,i=this.flatCoordinates[e]-this.flatCoordinates[0],n=t.slice();n[e]=n[0]+i;for(var r=1;re?1:t1)a=i;else{if(f>0){for(var d=0;dr&&(r=u),o=a,s=h}return r}function xi(t,e,i,n,r){for(var o=0,s=i.length;o>1)],e))<0?s=n+1:(a=n,h=!r);return h?s:~s}(f,y);if(v<0){var m=(y-f[-v-2])/(f[-v-1]-f[-v-2]),C=e+(-v-2)*n;s=c(t[C],t[C+n],m),a=c(t[C+1],t[C+n+1],m)}else s=t[e+v*n],a=t[e+v*n+1]}return o?(o[0]=s,o[1]=a,o):[s,a]}function Mi(t,e,i,n,r,o){if(i==e)return null;var s;if(r>1;ro&&(u-a)*(o-h)-(r-a)*(l-h)>0&&s++:l<=o&&(u-a)*(o-h)-(r-a)*(l-h)<0&&s--,a=u,h=l}return 0!==s}function Ri(t,e,i,n,r,o){if(0===i.length)return!1;if(!Pi(t,e,i[0],n,r,o))return!1;for(var s=1,a=i.length;s=r[0]&&o[2]<=r[2]||(o[1]>=r[1]&&o[3]<=r[3]||Di(t,e,i,n,(function(t,e){return function(t,e,i){var n=!1,r=Zt(t,e),o=Zt(t,i);if(r===Bt||o===Bt)n=!0;else{var s,a,h=t[0],u=t[1],l=t[2],c=t[3],p=e[0],f=e[1],d=i[0],_=i[1],g=(_-f)/(d-p);o&Wt&&!(r&Wt)&&(n=(s=d-(_-c)/g)>=h&&s<=l),n||!(o&Vt)||r&Vt||(n=(a=_-(d-l)*g)>=u&&a<=c),n||!(o&zt)||r&zt||(n=(s=d-(_-u)/g)>=h&&s<=l),n||!(o&Kt)||r&Kt||(n=(a=_-(d-h)*g)>=u&&a<=c)}return n}(r,t,e)})))))}function Ai(t,e,i,n,r){if(!function(t,e,i,n,r){return!!(bi(t,e,i,n,r)||Pi(t,e,i,n,r[0],r[1])||Pi(t,e,i,n,r[0],r[3])||Pi(t,e,i,n,r[2],r[1])||Pi(t,e,i,n,r[2],r[3]))}(t,e,i[0],n,r))return!1;if(1===i.length)return!0;for(var o=1,s=i.length;o0;){for(var p=l.pop(),f=l.pop(),d=0,_=t[f],g=t[f+1],y=t[p],v=t[p+1],m=f+n;md&&(c=m,d=C)}d>r&&(h[(c-e)/n]=1,f+n0&&_>f)&&(d<0&&g0&&g>d)?(a=c,h=p):(o[s++]=a,o[s++]=h,u=a,l=h,a=c,h=p)}}return o[s++]=a,o[s++]=h,s}function Yi(t,e,i,n,r,o,s,a){for(var h=0,u=i.length;hC&&Ri(t,e,i,n,u=(l+c)/2,d)&&(m=u,C=x),l=c}return isNaN(m)&&(m=r[o]),s?(s.push(m,d,C),s):[m,d,C]}function Qi(t,e,i,n){for(;e0}function en(t,e,i,n,r){for(var o=void 0!==r&&r,s=0,a=i.length;s0}}else if(t.type==Mt){var n=this.handleDownEvent(t);n&&t.preventDefault(),this.handlingDownUpSequence=n,e=this.stopDown(n)}else t.type==kt&&this.handleMoveEvent(t);return!e},e.prototype.handleMoveEvent=function(t){},e.prototype.handleUpEvent=function(t){return!1},e.prototype.stopDown=function(t){return t},e.prototype.updateTrackedPointers_=function(t){if(function(t){var e=t.type;return e===Mt||e===St||e===It}(t)){var e=t.pointerEvent,i=e.pointerId.toString();t.type==It?delete this.trackedPointers_[i]:(t.type==Mt||i in this.trackedPointers_)&&(this.trackedPointers_[i]=e),this.targetPointers=S(this.trackedPointers_)}},e}(pn);const dn=fn,_n="VECTOR",gn="opacity",yn="visible",vn="extent",mn="zIndex",Cn="maxResolution",xn="minResolution",wn="source";var En=function(e){function i(t){e.call(this);var i=E({},t);i[gn]=void 0!==t.opacity?t.opacity:1,i[yn]=void 0===t.visible||t.visible,i[mn]=t.zIndex,i[Cn]=void 0!==t.maxResolution?t.maxResolution:1/0,i[xn]=void 0!==t.minResolution?t.minResolution:0,this.setProperties(i),this.state_=null,this.type}return e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i,i.prototype.getType=function(){return this.type},i.prototype.getLayerState=function(){var t=this.state_||{layer:this,managed:!0};return t.opacity=a(this.getOpacity(),0,1),t.sourceState=this.getSourceState(),t.visible=this.getVisible(),t.extent=this.getExtent(),t.zIndex=this.getZIndex()||0,t.maxResolution=this.getMaxResolution(),t.minResolution=Math.max(this.getMinResolution(),0),this.state_=t,t},i.prototype.getLayersArray=function(e){return t()},i.prototype.getLayerStatesArray=function(e){return t()},i.prototype.getExtent=function(){return this.get(vn)},i.prototype.getMaxResolution=function(){return this.get(Cn)},i.prototype.getMinResolution=function(){return this.get(xn)},i.prototype.getOpacity=function(){return this.get(gn)},i.prototype.getSourceState=function(){return t()},i.prototype.getVisible=function(){return this.get(yn)},i.prototype.getZIndex=function(){return this.get(mn)},i.prototype.setExtent=function(t){this.set(vn,t)},i.prototype.setMaxResolution=function(t){this.set(Cn,t)},i.prototype.setMinResolution=function(t){this.set(xn,t)},i.prototype.setOpacity=function(t){this.set(gn,t)},i.prototype.setVisible=function(t){this.set(yn,t)},i.prototype.setZIndex=function(t){this.set(mn,t)},i}(gt);const Fn="precompose",Sn="undefined",kn="ready";var Mn=function(t){function e(e){var i=E({},e);delete i.source,t.call(this,i),this.mapPrecomposeKey_=null,this.mapRenderKey_=null,this.sourceChangeKey_=null,e.map&&this.setMap(e.map),A(this,_t(wn),this.handleSourcePropertyChange_,this);var n=e.source?e.source:null;this.setSource(n)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getLayersArray=function(t){var e=t||[];return e.push(this),e},e.prototype.getLayerStatesArray=function(t){var e=t||[];return e.push(this.getLayerState()),e},e.prototype.getSource=function(){return this.get(wn)||null},e.prototype.getSourceState=function(){var t=this.getSource();return t?t.getState():Sn},e.prototype.handleSourceChange_=function(){this.changed()},e.prototype.handleSourcePropertyChange_=function(){this.sourceChangeKey_&&(T(this.sourceChangeKey_),this.sourceChangeKey_=null);var t=this.getSource();t&&(this.sourceChangeKey_=A(t,W,this.handleSourceChange_,this)),this.changed()},e.prototype.setMap=function(t){this.mapPrecomposeKey_&&(T(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(T(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=A(t,Fn,(function(t){var e=t,i=this.getLayerState();i.managed=!1,void 0===this.getZIndex()&&(i.zIndex=1/0),e.frameState.layerStatesArray.push(i),e.frameState.layerStates[n(this)]=i}),this),this.mapRenderKey_=A(this,W,t.render,t),this.changed())},e.prototype.setSource=function(t){this.set(wn,t)},e}(En);const In=Mn,Pn="vector";var Rn=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.checksum_=void 0};Rn.prototype.clone=function(){var t=this.getColor();return new Rn({color:Array.isArray(t)?t.slice():t||void 0})},Rn.prototype.getColor=function(){return this.color_},Rn.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},Rn.prototype.getChecksum=function(){if(void 0===this.checksum_){var t=this.color_;t?Array.isArray(t)||"string"==typeof t?this.checksum_="f"+d(t):this.checksum_=n(this.color_):this.checksum_="f-"}return this.checksum_};const Dn=Rn;var bn=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.lineCap_=e.lineCap,this.lineDash_=void 0!==e.lineDash?e.lineDash:null,this.lineDashOffset_=e.lineDashOffset,this.lineJoin_=e.lineJoin,this.miterLimit_=e.miterLimit,this.width_=e.width,this.checksum_=void 0};bn.prototype.clone=function(){var t=this.getColor();return new bn({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})},bn.prototype.getColor=function(){return this.color_},bn.prototype.getLineCap=function(){return this.lineCap_},bn.prototype.getLineDash=function(){return this.lineDash_},bn.prototype.getLineDashOffset=function(){return this.lineDashOffset_},bn.prototype.getLineJoin=function(){return this.lineJoin_},bn.prototype.getMiterLimit=function(){return this.miterLimit_},bn.prototype.getWidth=function(){return this.width_},bn.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},bn.prototype.setLineCap=function(t){this.lineCap_=t,this.checksum_=void 0},bn.prototype.setLineDash=function(t){this.lineDash_=t,this.checksum_=void 0},bn.prototype.setLineDashOffset=function(t){this.lineDashOffset_=t,this.checksum_=void 0},bn.prototype.setLineJoin=function(t){this.lineJoin_=t,this.checksum_=void 0},bn.prototype.setMiterLimit=function(t){this.miterLimit_=t,this.checksum_=void 0},bn.prototype.setWidth=function(t){this.width_=t,this.checksum_=void 0},bn.prototype.getChecksum=function(){return void 0===this.checksum_&&(this.checksum_="s",this.color_?"string"==typeof this.color_?this.checksum_+=this.color_:this.checksum_+=n(this.color_):this.checksum_+="-",this.checksum_+=","+(void 0!==this.lineCap_?this.lineCap_.toString():"-")+","+(this.lineDash_?this.lineDash_.toString():"-")+","+(void 0!==this.lineDashOffset_?this.lineDashOffset_:"-")+","+(void 0!==this.lineJoin_?this.lineJoin_:"-")+","+(void 0!==this.miterLimit_?this.miterLimit_.toString():"-")+","+(void 0!==this.width_?this.width_.toString():"-")),this.checksum_};const An=bn;var Gn=function(t){var e=t||{};this.geometry_=null,this.geometryFunction_=Xn,void 0!==e.geometry&&this.setGeometry(e.geometry),this.fill_=void 0!==e.fill?e.fill:null,this.image_=void 0!==e.image?e.image:null,this.renderer_=void 0!==e.renderer?e.renderer:null,this.stroke_=void 0!==e.stroke?e.stroke:null,this.text_=void 0!==e.text?e.text:null,this.zIndex_=e.zIndex};Gn.prototype.clone=function(){var t=this.getGeometry();return t&&"object"==typeof t&&(t=t.clone()),new Gn({geometry:t,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})},Gn.prototype.getRenderer=function(){return this.renderer_},Gn.prototype.setRenderer=function(t){this.renderer_=t},Gn.prototype.getGeometry=function(){return this.geometry_},Gn.prototype.getGeometryFunction=function(){return this.geometryFunction_},Gn.prototype.getFill=function(){return this.fill_},Gn.prototype.setFill=function(t){this.fill_=t},Gn.prototype.getImage=function(){return this.image_},Gn.prototype.setImage=function(t){this.image_=t},Gn.prototype.getStroke=function(){return this.stroke_},Gn.prototype.setStroke=function(t){this.stroke_=t},Gn.prototype.getText=function(){return this.text_},Gn.prototype.setText=function(t){this.text_=t},Gn.prototype.getZIndex=function(){return this.zIndex_},Gn.prototype.setGeometry=function(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=Xn,this.geometry_=t},Gn.prototype.setZIndex=function(t){this.zIndex_=t};var On=null;function Tn(t,e){if(!On){var i=new Dn({color:"rgba(255,255,255,0.4)"}),n=new An({color:"#3399CC",width:1.25});On=[new Gn({image:new at({fill:i,stroke:n,radius:5}),fill:i,stroke:n})]}return On}function Ln(){var t={},e=[255,255,255,1],i=[0,153,255,1];return t[me]=[new Gn({fill:new Dn({color:[255,255,255,.5]})})],t[we]=t[me],t[ye]=[new Gn({stroke:new An({color:e,width:5})}),new Gn({stroke:new An({color:i,width:3})})],t[xe]=t[ye],t[Fe]=t[me].concat(t[ye]),t[ge]=[new Gn({image:new at({radius:6,fill:new Dn({color:i}),stroke:new An({color:e,width:1.5})}),zIndex:1/0})],t[Ce]=t[ge],t[Ee]=t[me].concat(t[ye],t[ge]),t}function Xn(t){return t.getGeometry()}const Yn=Gn;var jn="renderOrder",Nn=function(t){function e(e){var i=e||{},n=E({},i);delete n.style,delete n.renderBuffer,delete n.updateWhileAnimating,delete n.updateWhileInteracting,t.call(this,n),this.declutter_=void 0!==i.declutter&&i.declutter,this.renderBuffer_=void 0!==i.renderBuffer?i.renderBuffer:100,this.style_=null,this.styleFunction_=void 0,this.setStyle(i.style),this.updateWhileAnimating_=void 0!==i.updateWhileAnimating&&i.updateWhileAnimating,this.updateWhileInteracting_=void 0!==i.updateWhileInteracting&&i.updateWhileInteracting,this.renderMode_=i.renderMode||Pn,this.type=_n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDeclutter=function(){return this.declutter_},e.prototype.setDeclutter=function(t){this.declutter_=t},e.prototype.getRenderBuffer=function(){return this.renderBuffer_},e.prototype.getRenderOrder=function(){return this.get(jn)},e.prototype.getStyle=function(){return this.style_},e.prototype.getStyleFunction=function(){return this.styleFunction_},e.prototype.getUpdateWhileAnimating=function(){return this.updateWhileAnimating_},e.prototype.getUpdateWhileInteracting=function(){return this.updateWhileInteracting_},e.prototype.setRenderOrder=function(t){this.set(jn,t)},e.prototype.setStyle=function(t){this.style_=void 0!==t?t:Tn,this.styleFunction_=null===t?void 0:function(t){var e;if("function"==typeof t)e=t;else{var i;Array.isArray(t)?i=t:(s("function"==typeof t.getZIndex,41),i=[t]),e=function(){return i}}return e}(this.style_),this.changed()},e.prototype.getRenderMode=function(){return this.renderMode_},e}(In);Nn.prototype.getSource;const qn=Nn,Bn="arraybuffer",Wn="json",Vn="text",zn="xml";function Kn(t,e){return function(t,e,i,n){return function(r,o,s){var a=new XMLHttpRequest;a.open("GET","function"==typeof t?t(r,o,s):t,!0),e.getType()==Bn&&(a.responseType="arraybuffer"),a.onload=function(t){if(!a.status||a.status>=200&&a.status<300){var r,o=e.getType();o==Wn||o==Vn?r=a.responseText:o==zn?(r=a.responseXML)||(r=(new DOMParser).parseFromString(a.responseText,"application/xml")):o==Bn&&(r=a.response),r?i.call(this,e.readFeatures(r,{featureProjection:s}),e.readProjection(r),e.getLastExtent()):n.call(this)}else n.call(this)}.bind(this),a.onerror=function(){n.call(this)}.bind(this),a.send()}}(t,e,(function(t,e){"function"==typeof this.addFeatures&&this.addFeatures(t)}),Y)}function Un(t,e){return[[-1/0,-1/0,1/0,1/0]]}var Hn=function(e){function i(t){e.call(this),this.projection_=Qe(t.projection),this.attributions_=Jn(t.attributions),this.attributionsCollapsible_=void 0===t.attributionsCollapsible||t.attributionsCollapsible,this.loading=!1,this.state_=void 0!==t.state?t.state:kn,this.wrapX_=void 0!==t.wrapX&&t.wrapX}return e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i,i.prototype.getAttributions=function(){return this.attributions_},i.prototype.getAttributionsCollapsible=function(){return this.attributionsCollapsible_},i.prototype.getProjection=function(){return this.projection_},i.prototype.getResolutions=function(){return t()},i.prototype.getState=function(){return this.state_},i.prototype.getWrapX=function(){return this.wrapX_},i.prototype.refresh=function(){this.changed()},i.prototype.setAttributions=function(t){this.attributions_=Jn(t),this.changed()},i.prototype.setState=function(t){this.state_=t,this.changed()},i}(gt);function Jn(t){return t?Array.isArray(t)?function(e){return t}:"function"==typeof t?t:function(e){return[t]}:null}const $n=Hn,Zn="addfeature",Qn="changefeature",tr="clear",er="removefeature";var ir=i(510),nr=i.n(ir),rr=function(t){this.rbush_=nr()(t,void 0),this.items_={}};rr.prototype.insert=function(t,e){var i={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3],value:e};this.rbush_.insert(i),this.items_[n(e)]=i},rr.prototype.load=function(t,e){for(var i=new Array(e.length),r=0,o=e.length;r2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]];if(0===o[1])t=[[i,i,i,i]];else{var s=[-1*o[1],o[0]],a=o[0]/o[1],h=(r[0]+a*(n[1]-r[1])-n[0])/(s[0]-s[1]*a),u=[h*s[0],h*s[1]];t=[[[i[0]-u[0],i[1]-u[1]],[n[0]-u[0],n[1]-u[1]],[n[0]+u[0],n[1]+u[1]],[i[0]+u[0],i[1]+u[1]]]]}}else t=[t];var l=e;return l?l.setCoordinates(t):l=new lr(t),l};else if(this.type_===ke)this.minPoints_=3,this.maxPoints_=3,r=function(t,e){if(t.length>2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]],s=[i[0]+.5*o[0],i[1]+.5*o[1]];if(0===o[1])t=[[i,i,i,i]];else{var a=[-1*o[1],o[0]],h=o[0]/o[1],u=(r[0]+h*(n[1]-r[1])-n[0])/(a[0]-a[1]*h),l=[u*a[0],u*a[1]];t=[[[i[0],i[1]],[s[0]-l[0],s[1]-l[1]],[n[0],n[1]],[s[0]+l[0],s[1]+l[1]]]]}}else t=[t];var c=e;return c?c.setCoordinates(t):c=new pr(t),c};else{var o,s=this.mode_;s===fr?o=Vi:s===dr?o=Ni:s===_r&&(o=sn),r=function(t,e){var i=e;return i?s===_r?t[0].length?i.setCoordinates([t[0].concat([t[0][0]])]):i.setCoordinates([]):i.setCoordinates(t):i=new o(t),i}}this.geometryFunction_=r,this.dragVertexDelay_=void 0!==e.dragVertexDelay?e.dragVertexDelay:500,this.finishCoordinate_=null,this.sketchFeature_=null,this.sketchPoint_=null,this.sketchCoords_=null,this.sketchLine_=null,this.sketchLineCoords_=null,this.squaredClickTolerance_=e.clickTolerance?e.clickTolerance*e.clickTolerance:36,this.overlay_=new qn({source:new hr({useSpatialIndex:!1,wrapX:!!e.wrapX&&e.wrapX}),style:e.style?e.style:(n=Ln(),function(t,e){return n[t.getGeometry().getType()]}),updateWhileInteracting:!0}),this.geometryName_=e.geometryName,this.condition_=e.condition?e.condition:Yt,this.freehandCondition_,e.freehand?this.freehandCondition_=Lt:this.freehandCondition_=e.freehandCondition?e.freehandCondition:jt,A(this,_t(cn),this.updateState_,this)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setMap=function(e){t.prototype.setMap.call(this,e),this.updateState_()},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleEvent=function(e){e.originalEvent.type===z&&e.preventDefault(),this.freehand_=this.mode_!==fr&&this.freehandCondition_(e);var i=e.type===kt,n=!0;!this.freehand_&&this.lastDragTime_&&e.type===St&&(Date.now()-this.lastDragTime_>=this.dragVertexDelay_?(this.downPx_=e.pixel,this.shouldHandle_=!this.freehand_,i=!0):this.lastDragTime_=void 0,this.shouldHandle_&&void 0!==this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0));return this.freehand_&&e.type===St&&null!==this.sketchFeature_?(this.addToDrawing_(e),n=!1):this.freehand_&&e.type===Mt?n=!1:i?(n=e.type===kt)&&this.freehand_?n=this.handlePointerMove_(e):(e.pointerEvent.pointerType==ln||e.type===St&&void 0===this.downTimeout_)&&this.handlePointerMove_(e):e.type===Ft&&(n=!1),t.prototype.handleEvent.call(this,e)&&n},e.prototype.handleDownEvent=function(t){return this.shouldHandle_=!this.freehand_,this.freehand_?(this.downPx_=t.pixel,this.finishCoordinate_||this.startDrawing_(t),!0):!!this.condition_(t)&&(this.lastDragTime_=Date.now(),this.downTimeout_=setTimeout(function(){this.handlePointerMove_(new bt(kt,t.map,t.pointerEvent,!1,t.frameState))}.bind(this),this.dragVertexDelay_),this.downPx_=t.pixel,!0)},e.prototype.handleUpEvent=function(t){var e=!0;this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0),this.handlePointerMove_(t);var i=this.mode_===gr;return this.shouldHandle_?(this.finishCoordinate_?this.freehand_||i?this.finishDrawing():this.atFinish_(t)?this.finishCondition_(t)&&this.finishDrawing():this.addToDrawing_(t):(this.startDrawing_(t),this.mode_===fr&&this.finishDrawing()),e=!1):this.freehand_&&(this.finishCoordinate_=null,this.abortDrawing_()),!e&&this.stopClick_&&t.stopPropagation(),e},e.prototype.handlePointerMove_=function(t){if(this.downPx_&&(!this.freehand_&&this.shouldHandle_||this.freehand_&&!this.shouldHandle_)){var e=this.downPx_,i=t.pixel,n=e[0]-i[0],r=e[1]-i[1],o=n*n+r*r;if(this.shouldHandle_=this.freehand_?o>this.squaredClickTolerance_:o<=this.squaredClickTolerance_,!this.shouldHandle_)return!0}return this.finishCoordinate_?this.modifyDrawing_(t):this.createOrUpdateSketchPoint_(t),!0},e.prototype.atFinish_=function(t){var e=!1;if(this.sketchFeature_){var i=!1,n=[this.finishCoordinate_];if(this.mode_===dr)i=this.sketchCoords_.length>this.minPoints_;else if(this.mode_===_r){var r=this.sketchCoords_;i=r[0].length>this.minPoints_,n=[r[0][0],r[0][r[0].length-2]]}if(i)for(var o=t.map,s=0,a=n.length;s=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),this.geometryFunction_(i,r)):this.mode_===_r&&((i=this.sketchCoords_[0]).length>=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),e&&(this.finishCoordinate_=i[0]),this.geometryFunction_(this.sketchCoords_,r)),this.updateSketchFeatures_(),e&&this.finishDrawing()},e.prototype.removeLastPoint=function(){if(this.sketchFeature_){var t,e=this.sketchFeature_.getGeometry();this.mode_===dr?((t=this.sketchCoords_).splice(-2,1),this.geometryFunction_(t,e),t.length>=2&&(this.finishCoordinate_=t[t.length-2].slice())):this.mode_===_r&&((t=this.sketchCoords_[0]).splice(-2,1),this.sketchLine_.getGeometry().setCoordinates(t),this.geometryFunction_(this.sketchCoords_,e)),0===t.length&&(this.finishCoordinate_=null),this.updateSketchFeatures_()}},e.prototype.finishDrawing=function(){var t=this.abortDrawing_();if(t){var e=this.sketchCoords_,i=t.getGeometry();this.mode_===dr?(e.pop(),this.geometryFunction_(e,i)):this.mode_===_r&&(e[0].pop(),this.geometryFunction_(e,i),e=i.getCoordinates()),this.type_===Ce?t.setGeometry(new Ki([e])):this.type_===xe?t.setGeometry(new Bi([e])):this.type_===we&&t.setGeometry(new hn([e])),this.dispatchEvent(new Cr(mr,t)),this.features_&&this.features_.push(t),this.source_&&this.source_.addFeature(t)}},e.prototype.abortDrawing_=function(){this.finishCoordinate_=null;var t=this.sketchFeature_;return t&&(this.sketchFeature_=null,this.sketchPoint_=null,this.sketchLine_=null,this.overlay_.getSource().clear(!0)),t},e.prototype.extend=function(t){var e=t.getGeometry();this.sketchFeature_=t,this.sketchCoords_=e.getCoordinates();var i=this.sketchCoords_[this.sketchCoords_.length-1];this.finishCoordinate_=i.slice(),this.sketchCoords_.push(i.slice()),this.updateSketchFeatures_(),this.dispatchEvent(new Cr(vr,this.sketchFeature_))},e.prototype.updateSketchFeatures_=function(){var t=[];this.sketchFeature_&&t.push(this.sketchFeature_),this.sketchLine_&&t.push(this.sketchLine_),this.sketchPoint_&&t.push(this.sketchPoint_);var e=this.overlay_.getSource();e.clear(!0),e.addFeatures(t)},e.prototype.updateState_=function(){var t=this.getMap(),e=this.getActive();t&&e||this.abortDrawing_(),this.overlay_.setMap(e?t:null)},e}(dn);const wr=xr,Er=Vue.resource("/api/v1/volumes{/id}/export-area");var Fr="modifystart",Sr="modifyend",kr=function(t){function e(e,i,n){t.call(this,e),this.features=i,this.mapBrowserEvent=n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(N),Mr=function(t){function e(e){var i,n;if(t.call(this,e),this.condition_=e.condition?e.condition:Nt,this.defaultDeleteCondition_=function(t){return function(t){var e=t.originalEvent;return e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey}(t)&&function(t){return t.type==Et}(t)},this.deleteCondition_=e.deleteCondition?e.deleteCondition:this.defaultDeleteCondition_,this.insertVertexCondition_=e.insertVertexCondition?e.insertVertexCondition:Lt,this.vertexFeature_=null,this.vertexSegments_=null,this.lastPixel_=[0,0],this.ignoreNextSingleClick_=!1,this.modified_=!1,this.rBush_=new or,this.pixelTolerance_=void 0!==e.pixelTolerance?e.pixelTolerance:10,this.snappedToVertex_=!1,this.changingFeature_=!1,this.dragSegments_=[],this.overlay_=new qn({source:new hr({useSpatialIndex:!1,wrapX:!!e.wrapX}),style:e.style?e.style:(i=Ln(),function(t,e){return i[ge]}),updateWhileAnimating:!0,updateWhileInteracting:!0}),this.SEGMENT_WRITERS_={Point:this.writePointGeometry_,LineString:this.writeLineStringGeometry_,LinearRing:this.writeLineStringGeometry_,Polygon:this.writePolygonGeometry_,MultiPoint:this.writeMultiPointGeometry_,MultiLineString:this.writeMultiLineStringGeometry_,MultiPolygon:this.writeMultiPolygonGeometry_,Rectangle:this.writePolygonGeometry_,Ellipse:this.writePolygonGeometry_,Circle:this.writeCircleGeometry_,GeometryCollection:this.writeGeometryCollectionGeometry_},this.source_=null,e.source?(this.source_=e.source,n=new Ct(this.source_.getFeatures()),A(this.source_,Zn,this.handleSourceAdd_,this),A(this.source_,er,this.handleSourceRemove_,this)):n=e.features,!n)throw new Error("The modify interaction requires features or a source");this.features_=n,this.features_.forEach(this.addFeature_.bind(this)),A(this.features_,ht,this.handleFeatureAdd_,this),A(this.features_,ut,this.handleFeatureRemove_,this),this.lastPointerEvent_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.addFeature_=function(t){var e=t.getGeometry();e&&e.getType()in this.SEGMENT_WRITERS_&&this.SEGMENT_WRITERS_[e.getType()].call(this,t,e);var i=this.getMap();i&&i.isRendered()&&this.getActive()&&this.handlePointerAtPixel_(this.lastPixel_,i),A(t,W,this.handleFeatureChange_,this)},e.prototype.willModifyFeatures_=function(t){this.modified_||(this.modified_=!0,this.dispatchEvent(new kr(Fr,this.features_,t)))},e.prototype.removeFeature_=function(t){this.removeFeatureSegmentData_(t),this.vertexFeature_&&0===this.features_.getLength()&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),O(t,W,this.handleFeatureChange_,this)},e.prototype.removeFeatureSegmentData_=function(t){var e=this.rBush_,i=[];e.forEach((function(e){t===e.feature&&i.push(e)}));for(var n=i.length-1;n>=0;--n)e.remove(i[n])},e.prototype.setActive=function(e){this.vertexFeature_&&!e&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),t.prototype.setActive.call(this,e)},e.prototype.setMap=function(e){this.overlay_.setMap(e),t.prototype.setMap.call(this,e)},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleSourceAdd_=function(t){t.feature&&this.features_.push(t.feature)},e.prototype.handleSourceRemove_=function(t){t.feature&&this.features_.remove(t.feature)},e.prototype.handleFeatureAdd_=function(t){this.addFeature_(t.element)},e.prototype.handleFeatureChange_=function(t){if(!this.changingFeature_){var e=t.target;this.removeFeature_(e),this.addFeature_(e)}},e.prototype.handleFeatureRemove_=function(t){var e=t.element;this.removeFeature_(e)},e.prototype.writePointGeometry_=function(t,e){var i=e.getCoordinates(),n={feature:t,geometry:e,segment:[i,i]};this.rBush_.insert(e.getExtent(),n)},e.prototype.writeMultiPointGeometry_=function(t,e){for(var i=e.getCoordinates(),n=0,r=i.length;n=0;--_)this.insertVertex_.apply(this,r[_])}return!!this.vertexFeature_},e.prototype.handleUpEvent=function(t){for(var e=this.dragSegments_.length-1;e>=0;--e){var i=this.dragSegments_[e][0],n=i.geometry;if(n.getType()===Se||n.getType()===ke)this.features_.remove(i.feature),this.features_.push(i.feature);else if(n.getType()===Fe){var r=n.getCenter(),o=i.featureSegments[0],s=i.featureSegments[1];o.segment[0]=o.segment[1]=r,s.segment[0]=s.segment[1]=r,this.rBush_.update(ie(r),o),this.rBush_.update(n.getExtent(),s)}else this.rBush_.update(Ut(i.segment),i)}return this.modified_&&(this.dispatchEvent(new kr(Sr,this.features_,t)),this.modified_=!1),!1},e.prototype.handlePointerMove_=function(t){this.lastPixel_=t.pixel,this.handlePointerAtPixel_(t.pixel,t.map)},e.prototype.handlePointerAtPixel_=function(t,e){var i,r,o,s=e.getCoordinateFromPixel(t),a=(i=ie(s),r=e.getView().getResolution()*this.pixelTolerance_,o?(o[0]=i[0]-r,o[1]=i[1]-r,o[2]=i[2]+r,o[3]=i[3]+r,o):[i[0]-r,i[1]-r,i[2]+r,i[3]+r]),h=this.rBush_.getInExtent(a);if(h.length>0){h.sort((function(t,e){return Pr(s,t)-Pr(s,e)}));var u=h[0],l=u.segment,c=Rr(s,u),p=e.getPixelFromCoordinate(c),f=Tt(t,p);if(f<=this.pixelTolerance_){var d={};if(u.geometry.getType()===Fe&&1===u.index)this.snappedToVertex_=!0,this.createOrUpdateVertexFeature_(c);else{var _=e.getPixelFromCoordinate(l[0]),g=e.getPixelFromCoordinate(l[1]),y=Ot(p,_),v=Ot(p,g);f=Math.sqrt(Math.min(y,v)),this.snappedToVertex_=f<=this.pixelTolerance_,this.snappedToVertex_&&(c=y>v?l[1]:l[0]),this.createOrUpdateVertexFeature_(c);for(var m=1,C=h.length;m=0;--o)c=n((l=(i=p[o])[0]).feature),l.depth&&(c+="-"+l.depth.join("-")),c in f||(f[c]={}),0===i[1]?(f[c].right=l,f[c].index=l.index):1==i[1]&&(f[c].left=l,f[c].index=l.index+1);for(c in f){switch(u=f[c].right,a=f[c].left,(h=(s=f[c].index)-1)<0&&(h=0),t=e=(r=(l=void 0!==a?a:u).geometry).getCoordinates(),d=!1,r.getType()){case xe:e[l.depth[0]].length>2&&(e[l.depth[0]].splice(s,1),d=!0);break;case ye:e.length>2&&(e.splice(s,1),d=!0);break;case we:t=t[l.depth[1]];case me:(t=t[l.depth[0]]).length>4&&(s==t.length-1&&(s=0),t.splice(s,1),d=!0,0===s&&(t.pop(),t.push(t[0]),h=t.length-1))}if(d){this.setGeometryCoordinates_(r,e);var _=[];if(void 0!==a&&(this.rBush_.remove(a),_.push(a.segment[0])),void 0!==u&&(this.rBush_.remove(u),_.push(u.segment[1])),void 0!==a&&void 0!==u){var g={depth:l.depth,feature:l.feature,geometry:l.geometry,index:h,segment:_};this.rBush_.insert(Ut(g.segment),g)}this.updateSegmentIndices_(r,s,l.depth,-1),this.vertexFeature_&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),p.length=0}}return d},e.prototype.setGeometryCoordinates_=function(t,e){this.changingFeature_=!0,t.setCoordinates(e),this.changingFeature_=!1},e.prototype.updateSegmentIndices_=function(t,e,i,n){this.rBush_.forEachInExtent(t.getExtent(),(function(r){r.geometry===t&&(void 0===i||void 0===r.depth||function(t,e){var i=t.length;if(i!==e.length)return!1;for(var n=0;ne&&(r.index+=n)}))},e}(dn);function Ir(t,e){return t.index-e.index}function Pr(t,e){var i,n,r=e.geometry;if(r.getType()===Fe){var o=r;if(1===e.index){var s=Ot(o.getCenter(),t),a=Math.sqrt(s)-o.getRadius();return a*a}}return i=t,n=e.segment,Ot(i,At(i,n))}function Rr(t,e){var i=e.geometry;return i.getType()===Fe&&1===e.index||i.getType()===ke||i.getType()===Se?i.getClosestPoint(t):At(t,e.segment)}const Dr=Mr;var br=biigle.$require("events"),Ar=biigle.$require("messages").handleErrorResponse,Gr=biigle.$require("annotations.components.settingsTabPlugins");const Or={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null,volumeId:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},layer:function(){return new qn({source:new hr({features:new Ct}),style:[new Yn({stroke:new An({color:"white",width:4}),image:new at({radius:6,fill:new Dn({color:"#666666"}),stroke:new An({color:"white",width:2,lineDash:[2]})})}),new Yn({stroke:new An({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new wr({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(t,e){t.length>1&&(t=[t[0],[t[0][0],t[1][1]],t[1],[t[1][0],t[0][1]]]);var i=e;return i?i.setCoordinates([t]):i=new lr([t]),i}})},modifyInteraction:function(){return new Dr({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:Xt})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){var t=this;if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),Er.delete({id:this.volumeId}).then((function(){return t.exportArea=null})).catch((function(t){e.addFeature(i),Ar(t)}))}},updateCurrentImage:function(t,e){this.currentImage=e},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var t=this.currentImage.tiled?0:this.height,e=new lr([[[this.exportArea[0],t-this.exportArea[1]],[this.exportArea[0],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[1]]]]);this.layer.getSource().addFeature(new wt({geometry:e}))}},handleModifyend:function(t){this.updateExportArea(t.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(t){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),this.updateExportArea(t.feature).catch((function(){e.clear(),i&&e.addFeature(i)}))},updateExportArea:function(t){var e=this,i=t.getGeometry().getCoordinates()[0],n=this.currentImage.tiled?0:this.height;i=[i[0][0],n-i[0][1],i[2][0],n-i[2][1]].map(Math.round);var r=Er.save({id:this.volumeId},{coordinates:i}).then((function(){return e.exportArea=i}));return r.catch(Ar),r},extendMap:function(t){t.addLayer(this.layer),t.addInteraction(this.drawInteraction),t.addInteraction(this.modifyInteraction)}},watch:{opacity:function(t){t<1?this.settings.set("exportAreaOpacity",t):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(t)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.volumeId=biigle.$require("annotations.volumeId"),this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend),br.$on("images.change",this.updateCurrentImage),br.$on("annotations.map.init",this.extendMap)}};var Tr=function(t,e,i,n,r,o,s,a){var h,u="function"==typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=i,u._compiled=!0),n&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),s?(h=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),r&&r.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(s)},u._ssrRegister=h):r&&(h=a?function(){r.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:r),h)if(u.functional){u._injectStyles=h;var l=u.render;u.render=function(t,e){return h.call(e),l(t,e)}}else{var c=u.beforeCreate;u.beforeCreate=c?[].concat(c,h):[h]}return{exports:t,options:u}}(Or,undefined,undefined,!1,null,null,null);const Lr=Tr.exports;Gr&&(Gr.exportArea=Lr)})()})(); \ No newline at end of file diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index 52c857fae..a72cf4cda 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -(()=>{"use strict";var e,t={977:()=>{var e=biigle.$require("messages").handleErrorResponse,t=biigle.$require("labelTrees.components.labelTrees");function s(e,t,s,r,n,a,i,o){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=s,u._compiled=!0),r&&(u.functional=!0),a&&(u._scopeId="data-v-"+a),i?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),n&&n.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(i)},u._ssrRegister=l):n&&(l=o?function(){n.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:n),l)if(u.functional){u._injectStyles=l;var p=u.render;u.render=function(e,t){return l.call(t),p(e,t)}}else{var c=u.beforeCreate;u.beforeCreate=c?[].concat(c,l):[l]}return{exports:e,options:u}}const r=s({mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:t},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,separate_users:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var s=t.name.split("\\");e.hasOwnProperty(s[0])||(e[s[0]]=[]),e[s[0]].push(s[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(s){t[s]=e.options[s]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(t){422===t.status?t.data.hasOwnProperty("errors")?this.errors=t.data.errors:this.errors=t.data:e(t)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0])},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))},"options.separate_label_trees":function(e){e&&(this.options.separate_users=!1)},"options.separate_users":function(e){e&&(this.options.separate_label_trees=!1)}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0];var e=biigle.$require("reports.labelTrees");e.forEach((function(e){e.labels.forEach((function(e){e.selected=!1}))})),this.labelTrees=e}},undefined,undefined,!1,null,null,null).exports,n=Vue.resource("/api/v1/projects{/id}/reports");const a=s({mixins:[r],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,n)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},undefined,undefined,!1,null,null,null).exports,i=Vue.resource("/api/v1/volumes{/id}/reports");const o=s({mixins:[r],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,i)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},undefined,undefined,!1,null,null,null).exports;biigle.$mount("project-report-form",a),biigle.$mount("volume-report-form",o)},608:()=>{}},s={};function r(e){var n=s[e];if(void 0!==n)return n.exports;var a=s[e]={exports:{}};return t[e](a,a.exports,r),a.exports}r.m=t,e=[],r.O=(t,s,n,a)=>{if(!s){var i=1/0;for(u=0;u=a)&&Object.keys(r.O).every((e=>r.O[e](s[l])))?s.splice(l--,1):(o=!1,a0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[s,n,a]},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={355:0,392:0};r.O.j=t=>0===e[t];var t=(t,s)=>{var n,a,[i,o,l]=s,u=0;for(n in o)r.o(o,n)&&(r.m[n]=o[n]);if(l)var p=l(r);for(t&&t(s);ur(977)));var n=r.O(void 0,[392],(()=>r(608)));n=r.O(n)})(); \ No newline at end of file +(()=>{"use strict";var e,t={650:()=>{var e=biigle.$require("messages").handleErrorResponse,t=biigle.$require("labelTrees.components.labelTrees");function s(e,t,s,r,n,a,i,o){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=s,u._compiled=!0),r&&(u.functional=!0),a&&(u._scopeId="data-v-"+a),i?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),n&&n.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(i)},u._ssrRegister=l):n&&(l=o?function(){n.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:n),l)if(u.functional){u._injectStyles=l;var p=u.render;u.render=function(e,t){return l.call(t),p(e,t)}}else{var c=u.beforeCreate;u.beforeCreate=c?[].concat(c,l):[l]}return{exports:e,options:u}}const r=s({mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:t},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,separate_users:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var s=t.name.split("\\");e.hasOwnProperty(s[0])||(e[s[0]]=[]),s[1]&&e[s[0]].push(s[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.selectedVariant?this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]:this.availableReportTypes[this.selectedType]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(s){t[s]=e.options[s]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(t){422===t.status?t.data.hasOwnProperty("errors")?this.errors=t.data.errors:this.errors=t.data:e(t)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0]||"")},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasOption:function(e){return this.allowedOptions[this.selectedType].includes(e)},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))},"options.separate_label_trees":function(e){e&&(this.options.separate_users=!1)},"options.separate_users":function(e){e&&(this.options.separate_label_trees=!1)}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0];var e=biigle.$require("reports.labelTrees");e.forEach((function(e){e.labels.forEach((function(e){e.selected=!1}))})),this.labelTrees=e}},undefined,undefined,!1,null,null,null).exports,n=Vue.resource("/api/v1/projects{/id}/reports");const a=s({mixins:[r],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,n)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},undefined,undefined,!1,null,null,null).exports,i=Vue.resource("/api/v1/volumes{/id}/reports");const o=s({mixins:[r],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"],ImageIfdo:["export_area","newest_label","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,i)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},undefined,undefined,!1,null,null,null).exports;biigle.$mount("project-report-form",a),biigle.$mount("volume-report-form",o)},401:()=>{}},s={};function r(e){var n=s[e];if(void 0!==n)return n.exports;var a=s[e]={exports:{}};return t[e](a,a.exports,r),a.exports}r.m=t,e=[],r.O=(t,s,n,a)=>{if(!s){var i=1/0;for(p=0;p=a)&&Object.keys(r.O).every((e=>r.O[e](s[l])))?s.splice(l--,1):(o=!1,a0&&e[p-1][2]>a;p--)e[p]=e[p-1];e[p]=[s,n,a]},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={355:0,392:0};r.O.j=t=>0===e[t];var t=(t,s)=>{var n,a,[i,o,l]=s,u=0;if(i.some((t=>0!==e[t]))){for(n in o)r.o(o,n)&&(r.m[n]=o[n]);if(l)var p=l(r)}for(t&&t(s);ur(650)));var n=r.O(void 0,[392],(()=>r(401)));n=r.O(n)})(); \ No newline at end of file diff --git a/src/public/mix-manifest.json b/src/public/mix-manifest.json index 16d4623af..6924e2ee9 100644 --- a/src/public/mix-manifest.json +++ b/src/public/mix-manifest.json @@ -1,5 +1,5 @@ { - "/assets/scripts/main.js": "/assets/scripts/main.js?id=0fe00724891a09ff26eb", - "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=700f3dd4e7b6a390cec3", + "/assets/scripts/main.js": "/assets/scripts/main.js?id=199bc74b4c00b1bb8175", + "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=c650e7d96529d0585aff", "/assets/styles/main.css": "/assets/styles/main.css?id=08891fcd37d185b1157e" } diff --git a/src/resources/assets/js/reports/mixins/reportForm.vue b/src/resources/assets/js/reports/mixins/reportForm.vue index 51f13e9ed..d372f448a 100644 --- a/src/resources/assets/js/reports/mixins/reportForm.vue +++ b/src/resources/assets/js/reports/mixins/reportForm.vue @@ -55,7 +55,9 @@ export default { if (!variants.hasOwnProperty(fragments[0])) { variants[fragments[0]] = []; } - variants[fragments[0]].push(fragments[1]); + if (fragments[1]) { + variants[fragments[0]].push(fragments[1]); + } }); return variants; @@ -69,7 +71,11 @@ export default { return types; }, selectedReportTypeId() { - return this.availableReportTypes[this.selectedType + '\\' + this.selectedVariant]; + if (this.selectedVariant) { + return this.availableReportTypes[this.selectedType + '\\' + this.selectedVariant]; + } + + return this.availableReportTypes[this.selectedType]; }, availableVariants() { return this.variants[this.selectedType]; @@ -115,7 +121,7 @@ export default { selectType(type) { this.selectedType = type; if (this.availableVariants.indexOf(this.selectedVariant) === -1) { - this.selectedVariant = this.availableVariants[0]; + this.selectedVariant = this.availableVariants[0] || ''; } }, wantsType(type) { @@ -128,6 +134,9 @@ export default { return this.selectedVariant === variant; }, + hasOption(key) { + return this.allowedOptions[this.selectedType].includes(key); + }, hasError(key) { return this.errors.hasOwnProperty(key); }, diff --git a/src/resources/assets/js/reports/volumeForm.vue b/src/resources/assets/js/reports/volumeForm.vue index 78d1d1bde..76b2b3fe5 100644 --- a/src/resources/assets/js/reports/volumeForm.vue +++ b/src/resources/assets/js/reports/volumeForm.vue @@ -38,6 +38,11 @@ export default { 'annotation_session_id', 'only_labels', ], + 'ImageIfdo': [ + 'export_area', + 'newest_label', + 'only_labels', + ], }, options: { annotation_session_id: null, diff --git a/src/resources/views/partials/reportTypeInfo.blade.php b/src/resources/views/partials/reportTypeInfo.blade.php index 8f39a3fb5..f016b3e27 100644 --- a/src/resources/views/partials/reportTypeInfo.blade.php +++ b/src/resources/views/partials/reportTypeInfo.blade.php @@ -37,3 +37,6 @@
    The CSV video label report lists the video labels at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema.
    +
    + The iFDO report returns the iFDO file that was attached to this volume with added information about annotations and image labels. See the iFDO specification for more information. +
    diff --git a/src/resources/views/volumeReports.blade.php b/src/resources/views/volumeReports.blade.php index 205655fa8..76e9e3a4e 100644 --- a/src/resources/views/volumeReports.blade.php +++ b/src/resources/views/volumeReports.blade.php @@ -40,6 +40,11 @@
    + @if ($volume->hasIfdo()) +
    + +
    + @endif @else
    @@ -51,15 +56,17 @@
    - - +
    + + +
    +
    @include('reports::partials.reportTypeInfo') -
    @if ($annotationSessions->count() > 0) -
    +
    Restrict to export area - - @else - - @endif -
    -
    -
    - Annotations that are outside of the export area will be discarded for this report. -
    -
    - @endif -
    + @if ($volume->isImageVolume()) +
    - + @if ($volume->exportArea) + + @else + + @endif
    -
    +
    - Only the newest label of each annotation will be included in the report. + Annotations that are outside of the export area will be discarded for this report.
    -
    -
    - -
    -
    -
    - Aggregate the abundance of child labels to their parent label. -
    + @endif +
    +
    + +
    +
    +
    + Only the newest label of each annotation will be included in the report. +
    +
    +
    +
    + +
    +
    +
    + Aggregate the abundance of child labels to their parent label.
    -
    +
    diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php index 1ce4c409a..c58e4c7b4 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -21,8 +21,8 @@ class ImageIfdoReportGeneratorTest extends TestCase public function testProperties() { $generator = new ImageIfdoReportGenerator; - $this->assertEquals('iFDO report', $generator->getName()); - $this->assertEquals('ifdo_report', $generator->getFilename()); + $this->assertEquals('image iFDO report', $generator->getName()); + $this->assertEquals('image_ifdo_report', $generator->getFilename()); $this->assertStringEndsWith('.yaml', $generator->getFullFilename()); } @@ -537,19 +537,30 @@ public function testGenerateReportRestrictToLabels() $label2 = LabelTest::create(); $user = UserTest::create(); + $image1 = ImageTest::create([ + 'volume_id' => $volume->id, + 'filename' => 'img1.jpg', + ]); + $a1 = ImageAnnotationTest::create(['image_id' => $image1->id]); $al = ImageAnnotationLabelTest::create([ 'label_id' => $label->id, 'user_id' => $user->id, + 'annotation_id' => $a1->id, ]); + $image2 = ImageTest::create([ + 'volume_id' => $volume->id, + 'filename' => 'img2.jpg', + ]); + $a2 = ImageAnnotationTest::create(['image_id' => $image1->id]); $al2 = ImageAnnotationLabelTest::create([ 'label_id' => $label2->id, 'user_id' => $user->id, - 'annotation_id' => $al->annotation_id, + 'annotation_id' => $a2->id, ]); - $al->annotation->image->volume_id = $volume->id; - $al->annotation->image->save(); + $al2->annotation->image->volume_id = $volume->id; + $al2->annotation->image->save(); $generator = new ImageIfdoReportGeneratorStub([ 'onlyLabels' => [$label->id], @@ -577,10 +588,10 @@ public function testGenerateReportRestrictToLabels() ], ], 'image-set-items' => [ - $al->annotation->image->filename => [ + $image1->filename => [ 'image-annotations' => [ [ - 'coordinates' => $al->annotation->points, + 'coordinates' => $a1->points, 'labels' => [ [ 'label' => $al->label_id, @@ -592,6 +603,7 @@ public function testGenerateReportRestrictToLabels() ], ], ], + $image2->filename => [], ], ]; From b04b7ccf8e44df07357b23bf2524eddbad74475e Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 10 Feb 2022 15:29:19 +0100 Subject: [PATCH 299/407] Implement project image iFDO reports --- .../Api/Projects/ProjectReportController.php | 6 +- .../Views/ProjectReportsController.php | 10 +++ src/Http/Requests/StoreProjectReport.php | 19 ++++ src/Http/Requests/StoreVolumeReport.php | 4 + .../Projects/ImageIfdoReportGenerator.php | 49 ++++++++++ src/public/assets/scripts/main.js | 2 +- src/public/mix-manifest.json | 2 +- .../assets/js/reports/mixins/reportForm.vue | 3 + .../assets/js/reports/projectForm.vue | 5 ++ .../views/partials/reportTypeInfo.blade.php | 2 +- src/resources/views/projectReports.blade.php | 89 ++++++++++--------- src/resources/views/volumeReports.blade.php | 18 ++-- .../Projects/ProjectReportControllerTest.php | 25 ++++++ .../Volumes/VolumeReportControllerTest.php | 23 +++++ .../Projects/ImageIfdoReportGeneratorTest.php | 53 +++++++++++ tests/Support/Reports/ReportGeneratorTest.php | 1 - 16 files changed, 255 insertions(+), 56 deletions(-) create mode 100644 src/Support/Reports/Projects/ImageIfdoReportGenerator.php create mode 100644 tests/Support/Reports/Projects/ImageIfdoReportGeneratorTest.php diff --git a/src/Http/Controllers/Api/Projects/ProjectReportController.php b/src/Http/Controllers/Api/Projects/ProjectReportController.php index 7c51626c9..6ee781e48 100644 --- a/src/Http/Controllers/Api/Projects/ProjectReportController.php +++ b/src/Http/Controllers/Api/Projects/ProjectReportController.php @@ -20,10 +20,10 @@ class ProjectReportController extends Controller * * @apiParam (Required arguments) {Number} type_id The report type ID. * - * @apiParam (Optional arguments) {Boolean} export_area If `true`, restrict the report to the export area of the project. Only available for image annotation reports. + * @apiParam (Optional arguments) {Boolean} export_area If `true`, restrict the report to the export area of the project. Only available for image annotation reports and the iFDO report. * @apiParam (Optional arguments) {Boolean} newest_label If `true`, restrict the report to the newest label of each annotation. - * @apiParam (Optional arguments) {Boolean} separate_label_trees If `true`, separate annotations with labels of different label trees to different files or sheets of the spreadsheet. Cannot be used together with `separate_users`. - * @apiParam (Optional arguments) {Boolean} separate_users If `true`, separate annotations with labels of different users to different files or sheets of the spreadsheet. Cannot be used together with `separate_label_trees`. + * @apiParam (Optional arguments) {Boolean} separate_label_trees If `true`, separate annotations with labels of different label trees to different files or sheets of the spreadsheet. Cannot be used together with `separate_users`. Not available for the iFDO report. + * @apiParam (Optional arguments) {Boolean} separate_users If `true`, separate annotations with labels of different users to different files or sheets of the spreadsheet. Cannot be used together with `separate_label_trees`. Not available for the iFDO report. * @apiParam (Optional arguments) {Number[]} only_labels Array of label IDs to restrict the report to. Omit or leave empty to take all labels. * @apiParam (Optional arguments) {Boolean} aggregate_child_labels If `true`, add the abundance of child labels to the abundance of their parent labels and omit the child labels. This is only valid for the abundance report. Labels that are excluded with `only_labels` are not counted. * @apiParam (Optional arguments) {Boolean} disable_notifications If `true`, suppress notification to the user on report completion. diff --git a/src/Http/Controllers/Views/ProjectReportsController.php b/src/Http/Controllers/Views/ProjectReportsController.php index 7f94bc34d..7b05cf02d 100644 --- a/src/Http/Controllers/Views/ProjectReportsController.php +++ b/src/Http/Controllers/Views/ProjectReportsController.php @@ -53,6 +53,15 @@ protected function show(Request $request, $id) $labelTrees = $project->labelTrees()->with('labels', 'version')->get(); + $hasIfdos = false; + + foreach ($project->volumes as $volume) { + if ($volume->hasIfdo()) { + $hasIfdos = true; + break; + } + } + return view('reports::projectReports', [ 'project' => $project, 'isMember' => $isMember, @@ -64,6 +73,7 @@ protected function show(Request $request, $id) 'hasImageVolume' => $hasImageVolume, 'hasVideoVolume' => $hasVideoVolume, 'labelTrees' => $labelTrees, + 'hasIfdos' => $hasIfdos, ]); } } diff --git a/src/Http/Requests/StoreProjectReport.php b/src/Http/Requests/StoreProjectReport.php index aefe87340..3a8fae18c 100644 --- a/src/Http/Requests/StoreProjectReport.php +++ b/src/Http/Requests/StoreProjectReport.php @@ -54,6 +54,7 @@ public function withValidator($validator) $this->validateReportType($validator); $this->validateGeoInfo($validator); $this->validateImageMetadata($validator); + $this->validateIfdos($validator); }); } @@ -147,4 +148,22 @@ protected function validateImageMetadata($validator) } } } + + /** + * Check if some volumes have iFDO files (if an iFDO report is requested). + * + * @param \Illuminate\Validator\Validator $validator + */ + protected function validateIfdos($validator) + { + if ($this->isType(ReportType::imageIfdoId())) { + foreach ($this->project->volumes as $volume) { + if ($volume->hasIfdo()) { + return; + } + } + + $validator->errors()->add('id', 'The project has no volumes with attached iFDO files.'); + } + } } diff --git a/src/Http/Requests/StoreVolumeReport.php b/src/Http/Requests/StoreVolumeReport.php index a6ac61d9f..c69629c55 100644 --- a/src/Http/Requests/StoreVolumeReport.php +++ b/src/Http/Requests/StoreVolumeReport.php @@ -102,6 +102,10 @@ public function withValidator($validator) $validator->errors()->add('id', 'The volume images have no dimension information. Try again later if the images are new and still being processed.'); } } + + if ($this->isType(ReportType::imageIfdoId()) && !$this->volume->hasIfdo()) { + $validator->errors()->add('id', 'The volume has no attached iFDO file.'); + } }); } diff --git a/src/Support/Reports/Projects/ImageIfdoReportGenerator.php b/src/Support/Reports/Projects/ImageIfdoReportGenerator.php new file mode 100644 index 000000000..a6f667ebe --- /dev/null +++ b/src/Support/Reports/Projects/ImageIfdoReportGenerator.php @@ -0,0 +1,49 @@ +filter(function ($volume) { + return $volume->hasIfdo(); + }); + + if ($volumes->isEmpty()) { + throw new Exception('No volume with iFDO found for this project.'); + } + + return $volumes; + } +} diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index a72cf4cda..34b7367b8 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -(()=>{"use strict";var e,t={650:()=>{var e=biigle.$require("messages").handleErrorResponse,t=biigle.$require("labelTrees.components.labelTrees");function s(e,t,s,r,n,a,i,o){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=s,u._compiled=!0),r&&(u.functional=!0),a&&(u._scopeId="data-v-"+a),i?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),n&&n.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(i)},u._ssrRegister=l):n&&(l=o?function(){n.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:n),l)if(u.functional){u._injectStyles=l;var p=u.render;u.render=function(e,t){return l.call(t),p(e,t)}}else{var c=u.beforeCreate;u.beforeCreate=c?[].concat(c,l):[l]}return{exports:e,options:u}}const r=s({mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:t},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,separate_users:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var s=t.name.split("\\");e.hasOwnProperty(s[0])||(e[s[0]]=[]),s[1]&&e[s[0]].push(s[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.selectedVariant?this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]:this.availableReportTypes[this.selectedType]},availableVariants:function(){return this.variants[this.selectedType]},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(s){t[s]=e.options[s]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(t){422===t.status?t.data.hasOwnProperty("errors")?this.errors=t.data.errors:this.errors=t.data:e(t)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0]||"")},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasOption:function(e){return this.allowedOptions[this.selectedType].includes(e)},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))},"options.separate_label_trees":function(e){e&&(this.options.separate_users=!1)},"options.separate_users":function(e){e&&(this.options.separate_label_trees=!1)}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0];var e=biigle.$require("reports.labelTrees");e.forEach((function(e){e.labels.forEach((function(e){e.selected=!1}))})),this.labelTrees=e}},undefined,undefined,!1,null,null,null).exports,n=Vue.resource("/api/v1/projects{/id}/reports");const a=s({mixins:[r],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,n)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},undefined,undefined,!1,null,null,null).exports,i=Vue.resource("/api/v1/volumes{/id}/reports");const o=s({mixins:[r],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"],ImageIfdo:["export_area","newest_label","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,i)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},undefined,undefined,!1,null,null,null).exports;biigle.$mount("project-report-form",a),biigle.$mount("volume-report-form",o)},401:()=>{}},s={};function r(e){var n=s[e];if(void 0!==n)return n.exports;var a=s[e]={exports:{}};return t[e](a,a.exports,r),a.exports}r.m=t,e=[],r.O=(t,s,n,a)=>{if(!s){var i=1/0;for(p=0;p=a)&&Object.keys(r.O).every((e=>r.O[e](s[l])))?s.splice(l--,1):(o=!1,a0&&e[p-1][2]>a;p--)e[p]=e[p-1];e[p]=[s,n,a]},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={355:0,392:0};r.O.j=t=>0===e[t];var t=(t,s)=>{var n,a,[i,o,l]=s,u=0;if(i.some((t=>0!==e[t]))){for(n in o)r.o(o,n)&&(r.m[n]=o[n]);if(l)var p=l(r)}for(t&&t(s);ur(650)));var n=r.O(void 0,[392],(()=>r(401)));n=r.O(n)})(); \ No newline at end of file +(()=>{"use strict";var e,t={650:()=>{var e=biigle.$require("messages").handleErrorResponse,t=biigle.$require("labelTrees.components.labelTrees");function s(e,t,s,r,n,a,i,o){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=s,u._compiled=!0),r&&(u.functional=!0),a&&(u._scopeId="data-v-"+a),i?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),n&&n.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(i)},u._ssrRegister=l):n&&(l=o?function(){n.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:n),l)if(u.functional){u._injectStyles=l;var p=u.render;u.render=function(e,t){return l.call(t),p(e,t)}}else{var c=u.beforeCreate;u.beforeCreate=c?[].concat(c,l):[l]}return{exports:e,options:u}}const r=s({mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:t},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,separate_users:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var s=t.name.split("\\");e.hasOwnProperty(s[0])||(e[s[0]]=[]),s[1]&&e[s[0]].push(s[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.selectedVariant?this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]:this.availableReportTypes[this.selectedType]},availableVariants:function(){return this.variants[this.selectedType]},hasAvailableVariants:function(){return this.availableVariants.length>0},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(s){t[s]=e.options[s]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(t){422===t.status?t.data.hasOwnProperty("errors")?this.errors=t.data.errors:this.errors=t.data:e(t)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0]||"")},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasOption:function(e){return this.allowedOptions[this.selectedType].includes(e)},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))},"options.separate_label_trees":function(e){e&&(this.options.separate_users=!1)},"options.separate_users":function(e){e&&(this.options.separate_label_trees=!1)}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0];var e=biigle.$require("reports.labelTrees");e.forEach((function(e){e.labels.forEach((function(e){e.selected=!1}))})),this.labelTrees=e}},undefined,undefined,!1,null,null,null).exports,n=Vue.resource("/api/v1/projects{/id}/reports");const a=s({mixins:[r],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","only_labels"],ImageIfdo:["export_area","newest_label","only_labels"]}}},methods:{submit:function(){this.request(this.projectId,n)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},undefined,undefined,!1,null,null,null).exports,i=Vue.resource("/api/v1/volumes{/id}/reports");const o=s({mixins:[r],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"],ImageIfdo:["export_area","newest_label","only_labels"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,i)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},undefined,undefined,!1,null,null,null).exports;biigle.$mount("project-report-form",a),biigle.$mount("volume-report-form",o)},401:()=>{}},s={};function r(e){var n=s[e];if(void 0!==n)return n.exports;var a=s[e]={exports:{}};return t[e](a,a.exports,r),a.exports}r.m=t,e=[],r.O=(t,s,n,a)=>{if(!s){var i=1/0;for(p=0;p=a)&&Object.keys(r.O).every((e=>r.O[e](s[l])))?s.splice(l--,1):(o=!1,a0&&e[p-1][2]>a;p--)e[p]=e[p-1];e[p]=[s,n,a]},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={355:0,392:0};r.O.j=t=>0===e[t];var t=(t,s)=>{var n,a,[i,o,l]=s,u=0;if(i.some((t=>0!==e[t]))){for(n in o)r.o(o,n)&&(r.m[n]=o[n]);if(l)var p=l(r)}for(t&&t(s);ur(650)));var n=r.O(void 0,[392],(()=>r(401)));n=r.O(n)})(); \ No newline at end of file diff --git a/src/public/mix-manifest.json b/src/public/mix-manifest.json index 6924e2ee9..cceb4a640 100644 --- a/src/public/mix-manifest.json +++ b/src/public/mix-manifest.json @@ -1,5 +1,5 @@ { - "/assets/scripts/main.js": "/assets/scripts/main.js?id=199bc74b4c00b1bb8175", + "/assets/scripts/main.js": "/assets/scripts/main.js?id=54a892b38c25897914db", "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=c650e7d96529d0585aff", "/assets/styles/main.css": "/assets/styles/main.css?id=08891fcd37d185b1157e" } diff --git a/src/resources/assets/js/reports/mixins/reportForm.vue b/src/resources/assets/js/reports/mixins/reportForm.vue index d372f448a..5eee51fb0 100644 --- a/src/resources/assets/js/reports/mixins/reportForm.vue +++ b/src/resources/assets/js/reports/mixins/reportForm.vue @@ -80,6 +80,9 @@ export default { availableVariants() { return this.variants[this.selectedType]; }, + hasAvailableVariants() { + return this.availableVariants.length > 0; + }, onlyOneAvailableVariant() { return this.availableVariants.length === 1; }, diff --git a/src/resources/assets/js/reports/projectForm.vue b/src/resources/assets/js/reports/projectForm.vue index 9cdbb3172..f6ae311c0 100644 --- a/src/resources/assets/js/reports/projectForm.vue +++ b/src/resources/assets/js/reports/projectForm.vue @@ -36,6 +36,11 @@ export default { 'separate_users', 'only_labels', ], + 'ImageIfdo': [ + 'export_area', + 'newest_label', + 'only_labels', + ], }, }; }, diff --git a/src/resources/views/partials/reportTypeInfo.blade.php b/src/resources/views/partials/reportTypeInfo.blade.php index f016b3e27..0d2b16577 100644 --- a/src/resources/views/partials/reportTypeInfo.blade.php +++ b/src/resources/views/partials/reportTypeInfo.blade.php @@ -38,5 +38,5 @@ The CSV video label report lists the video labels at the highest possible resolution (as CSV files in a ZIP archive). See the manual for the report schema.
    - The iFDO report returns the iFDO file that was attached to this volume with added information about annotations and image labels. See the iFDO specification for more information. + The iFDO report returns the iFDO file that was attached to a volume with added information about annotations and image labels. See the iFDO specification for more information.
    diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index f5780228d..113c24a47 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -33,6 +33,13 @@
    +
    + @if ($hasIfdos) + + @else + + @endif +
    @endif @if ($hasImageVolume && $hasVideoVolume) @@ -51,10 +58,12 @@ @endif
    - - +
    + + +
    @include('reports::partials.reportTypeInfo')
    @@ -66,48 +75,46 @@
    -
    -
    -
    - @if ($hasExportArea) - - @else - - @endif -
    -
    -
    - Annotations that are outside of the export area will be discarded for this report. -
    -
    -
    -
    +
    +
    + @if ($hasExportArea) -
    -
    -
    - Only the newest label of each annotation will be included in the report. -
    -
    -
    -
    -
    -
    -
    - Aggregate the abundance of child labels to their parent label. -
    + @endif +
    +
    +
    + Annotations that are outside of the export area will be discarded for this report. +
    +
    +
    +
    + +
    +
    +
    + Only the newest label of each annotation will be included in the report. +
    +
    +
    +
    + +
    +
    +
    + Aggregate the abundance of child labels to their parent label.
    -
    +
    diff --git a/src/resources/views/volumeReports.blade.php b/src/resources/views/volumeReports.blade.php index 76e9e3a4e..4a0b7ab20 100644 --- a/src/resources/views/volumeReports.blade.php +++ b/src/resources/views/volumeReports.blade.php @@ -40,11 +40,13 @@
    - @if ($volume->hasIfdo()) -
    +
    + @if ($volume->hasIfdo()) -
    - @endif + @else + + @endif +
    @else
    @@ -56,14 +58,14 @@
    -
    +
    - -
    @include('reports::partials.reportTypeInfo') +
    @if ($annotationSessions->count() > 0)
    @@ -109,7 +111,7 @@ Only the newest label of each annotation will be included in the report.
    -
    +
    +
    +
    + +
    +
    +
    + Only include BIIGLE annotations in the iFDO files. +
    +
    @include('reports::partials.restrictLabels')
    diff --git a/src/resources/views/volumeReports.blade.php b/src/resources/views/volumeReports.blade.php index 4a0b7ab20..6406dbd9e 100644 --- a/src/resources/views/volumeReports.blade.php +++ b/src/resources/views/volumeReports.blade.php @@ -145,6 +145,17 @@ Split the report to separate files/sheets for label trees or users.
    +
    +
    + +
    +
    +
    + Only include BIIGLE annotations in the iFDO file. +
    +
    @include('reports::partials.restrictLabels')
    The requested report will be prepared. You will get notified when it is ready. Now you can request a new report or go back to the volume. diff --git a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php index aa849fceb..3af55d83a 100644 --- a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php @@ -117,6 +117,7 @@ public function testStoreNoImageVolumes() ReportType::imageLabelsBasicId(), ReportType::imageLabelsCsvId(), ReportType::imageLabelsImageLocationId(), + ReportType::imageIfdoId(), ]; $this->beGuest(); diff --git a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php index b4102474a..a96cd940f 100644 --- a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php +++ b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php @@ -75,6 +75,7 @@ public function testStoreImageVolumeTypes() // imageAnnotationImageLocation is tested below // imageAnnotationAnnotationLocation is tested below // imageLabelImageLocation is tested below + // imageIfdo is tested below ]; $this->beGuest(); diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php index c58e4c7b4..0bb61316f 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -683,6 +683,103 @@ public function testGenerateReportLabelAphiaIdInfo() $this->assertEquals($expect, $generator->yaml); } + + public function testStripIfdo() + { + $label = LabelTest::create(); + $user = UserTest::create(); + + $al = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + ]); + + $merge = [ + 'image-set-header' => [ + 'image-annotation-creators' => [ + [ + 'id' => '123abc', + 'name' => "Test User", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => 123321, + 'name' => 'Test Label', + ], + ], + ], + 'image-set-items' => [ + $al->annotation->image->filename => [ + 'image-annotations' => [ + [ + 'coordinates' => [10, 20], + 'labels' => [ + [ + 'label' => 123321, + 'annotator' => '123abc', + 'confidence' => 1.0, + 'created-at' => '2022-02-10 09:47:00', + ], + ], + ], + ], + ], + ], + ]; + + [$volume, $ifdo] = $this->setUpIfdo($merge); + + $al->annotation->image->volume_id = $volume->id; + $al->annotation->image->save(); + + $generator = new ImageIfdoReportGeneratorStub([ + 'stripIfdo' => true, + ]); + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $al->label_id, + 'name' => $al->label->name, + ], + ], + ], + 'image-set-items' => [ + $al->annotation->image->filename => [ + 'image-annotations' => [ + [ + 'coordinates' => $al->annotation->points, + 'labels' => [ + [ + 'label' => $al->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al->confidence, + 'created-at' => (string) $al->created_at, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } } class ImageIfdoReportGeneratorStub extends ImageIfdoReportGenerator From 794bfb8bf8835636c5271601825be632e4b0e74a Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 10 Feb 2022 16:33:25 +0100 Subject: [PATCH 301/407] Implement support for image-annotation-geometry-types in iFDOs --- .../Volumes/ImageIfdoReportGenerator.php | 39 ++- .../Volumes/ImageIfdoReportGeneratorTest.php | 266 +++++++++++++++--- 2 files changed, 266 insertions(+), 39 deletions(-) diff --git a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php index 331b5da11..4a2a148f9 100644 --- a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php @@ -6,6 +6,7 @@ use Biigle\Label; use Biigle\LabelSource; use Biigle\Modules\Reports\Support\Reports\Volumes\ImageAnnotations\AnnotationReportGenerator; +use Biigle\Shape; use Biigle\User; use DB; use Exception; @@ -109,6 +110,7 @@ public function generateReport($path) if (array_key_exists('image-set-items', $ifdo)) { foreach ($ifdo['image-set-items'] as &$item) { unset($item['image-annotations']); + unset($item['image-annotation-geometry-types']); } } } @@ -239,7 +241,31 @@ protected function getLabels() */ public function processImage(Image $image) { - $annotations = $image->annotations->map(function ($annotation) { + $geometryTypes = []; + + // Remove annotations that should not be included because of an "onlyLabels" + // filter. + $annotations = $image->annotations->filter(function ($a) { + return $a->labels->isNotEmpty(); + }); + + $geometryTypes = $annotations->map(function ($a) { + if ($a->shape_id === Shape::pointId()) { + return 'single-pixel'; + } elseif ($a->shape_id === Shape::circleId()) { + // Circles don't store the coordinates but could be converted to + // bounding boxes. + return 'bounding-box'; + } else { + // We treat ellipses as rectangles and rectangles as polygons. + // Also, line strings can only be represented as polygons in iFDO. + return 'polygon'; + } + }) + ->unique() + ->toArray(); + + $annotations = $annotations->map(function ($annotation) { $labels = $annotation->labels->map(function ($aLabel) { $user = $this->users->get($aLabel->user_id); if (!in_array($user, $this->imageAnnotationCreators)) { @@ -271,12 +297,6 @@ public function processImage(Image $image) ]; }); - // Remove annotations that should not be included because of an "onlyLabels" - // filter. - $annotations = $annotations->filter(function ($annotation) { - return !empty($annotation['labels']); - }); - $labels = $image->labels->map(function ($iLabel) { $user = $this->users->get($iLabel->user_id); if (!in_array($user, $this->imageAnnotationCreators)) { @@ -306,6 +326,10 @@ public function processImage(Image $image) ]; }); + if ($labels->isNotEmpty()) { + $geometryTypes[] = 'whole-image'; + } + $this->imageSetItems[$image->filename] = []; // Use toBase() because the merge method of Eloquent collections works @@ -314,6 +338,7 @@ public function processImage(Image $image) if (!empty($imageAnnotations)) { $this->imageSetItems[$image->filename]['image-annotations'] = $imageAnnotations; + $this->imageSetItems[$image->filename]['image-annotation-geometry-types'] = $geometryTypes; } } diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php index 0bb61316f..6278ef193 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -3,6 +3,7 @@ namespace Biigle\Tests\Modules\Reports\Support\Reports\Volumes; use Biigle\LabelSource; +use Biigle\Shape; use Biigle\Modules\Reports\Support\Reports\Volumes\ImageIfdoReportGenerator; use Biigle\Modules\Reports\Volume; use Biigle\Tests\ImageAnnotationLabelTest; @@ -51,14 +52,18 @@ public function testGenerateReport() $label = LabelTest::create(); $user = UserTest::create(); + $image = ImageTest::create(['volume_id' => $volume->id]); + $a = ImageAnnotationTest::create([ + 'image_id' => $image->id, + 'points' => [150, 150], + 'shape_id' => Shape::pointId(), + ]); $al = ImageAnnotationLabelTest::create([ 'label_id' => $label->id, 'user_id' => $user->id, + 'annotation_id' => $a->id, ]); - $al->annotation->image->volume_id = $volume->id; - $al->annotation->image->save(); - $generator = new ImageIfdoReportGeneratorStub; $generator->setSource($volume); $generator->generateReport('my/path'); @@ -84,6 +89,7 @@ public function testGenerateReport() ], 'image-set-items' => [ $al->annotation->image->filename => [ + 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ 'coordinates' => $al->annotation->points, @@ -112,20 +118,24 @@ public function testGenerateReportMultiLabel() $label2 = LabelTest::create(); $user = UserTest::create(); + $image = ImageTest::create(['volume_id' => $volume->id]); + $a = ImageAnnotationTest::create([ + 'image_id' => $image->id, + 'points' => [150, 150], + 'shape_id' => Shape::pointId(), + ]); $al = ImageAnnotationLabelTest::create([ 'label_id' => $label->id, 'user_id' => $user->id, + 'annotation_id' => $a->id, ]); $al2 = ImageAnnotationLabelTest::create([ 'label_id' => $label2->id, 'user_id' => $user->id, - 'annotation_id' => $al->annotation_id, + 'annotation_id' => $a->id, ]); - $al->annotation->image->volume_id = $volume->id; - $al->annotation->image->save(); - $generator = new ImageIfdoReportGeneratorStub; $generator->setSource($volume); $generator->generateReport('my/path'); @@ -155,6 +165,7 @@ public function testGenerateReportMultiLabel() ], 'image-set-items' => [ $al->annotation->image->filename => [ + 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ 'coordinates' => $al->annotation->points, @@ -245,6 +256,7 @@ public function testGenerateReportImageLabels() ], 'image-set-items' => [ $il->image->filename => [ + 'image-annotation-geometry-types' => ['whole-image'], 'image-annotations' => [ [ 'coordinates' => [], @@ -269,10 +281,7 @@ public function testGenerateReportMergeImageSetItems() $label = LabelTest::create(); $user = UserTest::create(); - $al = ImageAnnotationLabelTest::create([ - 'label_id' => $label->id, - 'user_id' => $user->id, - ]); + $image = ImageTest::create(); $merge = [ 'image-set-header' => [ @@ -291,11 +300,12 @@ public function testGenerateReportMergeImageSetItems() ], ], 'image-set-items' => [ - $al->annotation->image->filename => [ + $image->filename => [ 'image-area-square-meter' => 5.5, + 'image-annotation-geometry-types' => ['bounding-box'], 'image-annotations' => [ [ - 'coordinates' => [10, 20], + 'coordinates' => [10, 20, 20, 30, 30, 20, 20, 10], 'labels' => [ [ 'label' => 123321, @@ -312,8 +322,19 @@ public function testGenerateReportMergeImageSetItems() [$volume, $ifdo] = $this->setUpIfdo($merge); - $al->annotation->image->volume_id = $volume->id; - $al->annotation->image->save(); + $a = ImageAnnotationTest::create([ + 'image_id' => $image->id, + 'points' => [150, 150], + 'shape_id' => Shape::pointId(), + ]); + $al = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a->id, + ]); + + $image->volume_id = $volume->id; + $image->save(); $generator = new ImageIfdoReportGeneratorStub; $generator->setSource($volume); @@ -350,9 +371,10 @@ public function testGenerateReportMergeImageSetItems() 'image-set-items' => [ $al->annotation->image->filename => [ 'image-area-square-meter' => 5.5, + 'image-annotation-geometry-types' => ['bounding-box', 'single-pixel'], 'image-annotations' => [ [ - 'coordinates' => [10, 20], + 'coordinates' => [10, 20, 20, 30, 30, 20, 20, 10], 'labels' => [ [ 'label' => 123321, @@ -395,6 +417,7 @@ public function testGenerateReportRestrictToExportArea() $image = ImageTest::create(['volume_id' => $volume->id]); $a1 = ImageAnnotationTest::create([ 'image_id' => $image->id, + 'shape_id' => Shape::pointId(), 'points' => [150, 150], ]); $al1 = ImageAnnotationLabelTest::create([ @@ -405,6 +428,7 @@ public function testGenerateReportRestrictToExportArea() $a2 = ImageAnnotationTest::create([ 'image_id' => $image->id, + 'shape_id' => Shape::pointId(), 'points' => [50, 50], ]); $al2 = ImageAnnotationLabelTest::create([ @@ -440,6 +464,7 @@ public function testGenerateReportRestrictToExportArea() ], 'image-set-items' => [ $image->filename => [ + 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ 'coordinates' => $a1->points, @@ -468,20 +493,24 @@ public function testGenerateReportRestrictNewestLabel() $label2 = LabelTest::create(); $user = UserTest::create(); + $image = ImageTest::create(['volume_id' => $volume->id]); + $a = ImageAnnotationTest::create([ + 'image_id' => $image->id, + 'points' => [150, 150], + 'shape_id' => Shape::pointId(), + ]); $al = ImageAnnotationLabelTest::create([ 'label_id' => $label->id, 'user_id' => $user->id, + 'annotation_id' => $a->id, ]); $al2 = ImageAnnotationLabelTest::create([ 'label_id' => $label2->id, 'user_id' => $user->id, - 'annotation_id' => $al->annotation_id, + 'annotation_id' => $a->id, ]); - $al->annotation->image->volume_id = $volume->id; - $al->annotation->image->save(); - $generator = new ImageIfdoReportGeneratorStub([ 'newestLabel' => true, ]); @@ -509,6 +538,7 @@ public function testGenerateReportRestrictNewestLabel() ], 'image-set-items' => [ $al->annotation->image->filename => [ + 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ 'coordinates' => $al->annotation->points, @@ -541,7 +571,10 @@ public function testGenerateReportRestrictToLabels() 'volume_id' => $volume->id, 'filename' => 'img1.jpg', ]); - $a1 = ImageAnnotationTest::create(['image_id' => $image1->id]); + $a1 = ImageAnnotationTest::create([ + 'image_id' => $image1->id, + 'shape_id' => Shape::pointId(), + ]); $al = ImageAnnotationLabelTest::create([ 'label_id' => $label->id, 'user_id' => $user->id, @@ -552,7 +585,10 @@ public function testGenerateReportRestrictToLabels() 'volume_id' => $volume->id, 'filename' => 'img2.jpg', ]); - $a2 = ImageAnnotationTest::create(['image_id' => $image1->id]); + $a2 = ImageAnnotationTest::create([ + 'image_id' => $image1->id, + 'shape_id' => Shape::pointId(), + ]); $al2 = ImageAnnotationLabelTest::create([ 'label_id' => $label2->id, 'user_id' => $user->id, @@ -589,6 +625,7 @@ public function testGenerateReportRestrictToLabels() ], 'image-set-items' => [ $image1->filename => [ + 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ 'coordinates' => $a1->points, @@ -631,14 +668,18 @@ public function testGenerateReportLabelAphiaIdInfo() ]); $user = UserTest::create(); + $image = ImageTest::create(['volume_id' => $volume->id]); + $a = ImageAnnotationTest::create([ + 'image_id' => $image->id, + 'points' => [150, 150], + 'shape_id' => Shape::pointId(), + ]); $al = ImageAnnotationLabelTest::create([ 'label_id' => $label->id, 'user_id' => $user->id, + 'annotation_id' => $a->id, ]); - $al->annotation->image->volume_id = $volume->id; - $al->annotation->image->save(); - $generator = new ImageIfdoReportGeneratorStub; $generator->setSource($volume); $generator->generateReport('my/path'); @@ -664,6 +705,7 @@ public function testGenerateReportLabelAphiaIdInfo() ], 'image-set-items' => [ $al->annotation->image->filename => [ + 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ 'coordinates' => $al->annotation->points, @@ -689,10 +731,7 @@ public function testStripIfdo() $label = LabelTest::create(); $user = UserTest::create(); - $al = ImageAnnotationLabelTest::create([ - 'label_id' => $label->id, - 'user_id' => $user->id, - ]); + $image = ImageTest::create(); $merge = [ 'image-set-header' => [ @@ -711,7 +750,8 @@ public function testStripIfdo() ], ], 'image-set-items' => [ - $al->annotation->image->filename => [ + $image->filename => [ + 'image-annotation-geometry-types' => ['bounding-box'], 'image-annotations' => [ [ 'coordinates' => [10, 20], @@ -731,8 +771,19 @@ public function testStripIfdo() [$volume, $ifdo] = $this->setUpIfdo($merge); - $al->annotation->image->volume_id = $volume->id; - $al->annotation->image->save(); + $a = ImageAnnotationTest::create([ + 'image_id' => $image->id, + 'points' => [150, 150], + 'shape_id' => Shape::pointId(), + ]); + $al = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a->id, + ]); + + $image->volume_id = $volume->id; + $image->save(); $generator = new ImageIfdoReportGeneratorStub([ 'stripIfdo' => true, @@ -761,6 +812,7 @@ public function testStripIfdo() ], 'image-set-items' => [ $al->annotation->image->filename => [ + 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ 'coordinates' => $al->annotation->points, @@ -780,6 +832,156 @@ public function testStripIfdo() $this->assertEquals($expect, $generator->yaml); } + + public function testGeometryTypes() + { + [$volume, $ifdo] = $this->setUpIfdo(); + + $label = LabelTest::create(); + $user = UserTest::create(); + $image = ImageTest::create([ + 'volume_id' => $volume->id, + ]); + + $a1 = ImageAnnotationTest::create([ + 'image_id' => $image->id, + 'shape_id' => Shape::pointId(), + ]); + $al1 = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a1->id, + ]); + + $a2 = ImageAnnotationTest::create([ + 'image_id' => $image->id, + 'shape_id' => Shape::rectangleId(), + ]); + $al2 = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a2->id, + ]); + + $a3 = ImageAnnotationTest::create([ + 'image_id' => $image->id, + 'shape_id' => Shape::circleId(), + ]); + $al3 = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a3->id, + ]); + + $a4 = ImageAnnotationTest::create([ + 'image_id' => $image->id, + 'shape_id' => Shape::ellipseId(), + ]); + $al4 = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a4->id, + ]); + + $a5 = ImageAnnotationTest::create([ + 'image_id' => $image->id, + 'shape_id' => Shape::polygonId(), + ]); + $al5 = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a5->id, + ]); + + $generator = new ImageIfdoReportGeneratorStub; + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $label->id, + 'name' => $label->name, + ], + ], + ], + 'image-set-items' => [ + $image->filename => [ + 'image-annotation-geometry-types' => ['single-pixel', 'polygon', 'bounding-box'], + 'image-annotations' => [ + [ + 'coordinates' => $a1->points, + 'labels' => [ + [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'confidence' => $al1->confidence, + 'created-at' => (string) $al1->created_at, + ], + ], + ], + [ + 'coordinates' => $a2->points, + 'labels' => [ + [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'confidence' => $al2->confidence, + 'created-at' => (string) $al2->created_at, + ], + ], + ], + [ + 'coordinates' => $a3->points, + 'labels' => [ + [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'confidence' => $al3->confidence, + 'created-at' => (string) $al3->created_at, + ], + ], + ], + [ + 'coordinates' => $a4->points, + 'labels' => [ + [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'confidence' => $al4->confidence, + 'created-at' => (string) $al4->created_at, + ], + ], + ], + [ + 'coordinates' => $a5->points, + 'labels' => [ + [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'confidence' => $al5->confidence, + 'created-at' => (string) $al5->created_at, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } } class ImageIfdoReportGeneratorStub extends ImageIfdoReportGenerator From 4367b1c920a7cf0cf30c9a1980ac45cff39f1b68 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 10 Feb 2022 16:39:59 +0100 Subject: [PATCH 302/407] Update the manual article for iFDO reports --- .../views/manual/tutorials/reports-schema.blade.php | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index 0d32442a8..c41ef378b 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -44,6 +44,7 @@ + Image iFDO reports
    @@ -365,5 +366,11 @@
  • Label name
  • Label hierarchy (see the extended annotation report on how to interpret a label hierarchy)
  • + +

    Image iFDO reports

    + +

    + iFDO reports can be requested if an iFDO file has been uploaded for a volume. The iFDO report will be generated as the original file with additional information on the annotations and image labels that were created in BIIGLE. Optionally, annotations and image labels of the original file can be excluded from the report. +

    @endsection From ff2bc06d81ec5dd21b68a1a30a3ef667566d0c36 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 15 Feb 2022 16:41:42 +0100 Subject: [PATCH 303/407] Make model factories compatible with Laravel 8 --- src/Database/Factories/ReportFactory.php | 36 +++++++++++++++++++ src/Database/Factories/ReportTypeFactory.php | 28 +++++++++++++++ src/Report.php | 14 ++++++++ src/ReportType.php | 14 +++++++- src/ReportsServiceProvider.php | 16 --------- src/database/factories/ModelFactory.php | 22 ------------ tests/Support/Reports/ReportGeneratorTest.php | 2 +- 7 files changed, 92 insertions(+), 40 deletions(-) create mode 100644 src/Database/Factories/ReportFactory.php create mode 100644 src/Database/Factories/ReportTypeFactory.php delete mode 100644 src/database/factories/ModelFactory.php diff --git a/src/Database/Factories/ReportFactory.php b/src/Database/Factories/ReportFactory.php new file mode 100644 index 000000000..1ebb4a65e --- /dev/null +++ b/src/Database/Factories/ReportFactory.php @@ -0,0 +1,36 @@ + User::factory(), + 'type_id' => function () { + return ReportType::imageAnnotationsCsvId(); + }, + 'source_id' => Volume::factory(), + 'source_type' => Volume::class, + ]; + } +} diff --git a/src/Database/Factories/ReportTypeFactory.php b/src/Database/Factories/ReportTypeFactory.php new file mode 100644 index 000000000..e4c0fb3bd --- /dev/null +++ b/src/Database/Factories/ReportTypeFactory.php @@ -0,0 +1,28 @@ + $this->faker->username(), + ]; + } +} diff --git a/src/Report.php b/src/Report.php index bff21e3c1..5961596e4 100644 --- a/src/Report.php +++ b/src/Report.php @@ -2,8 +2,10 @@ namespace Biigle\Modules\Reports; +use Biigle\Modules\Reports\Database\Factories\ReportFactory; use Biigle\Modules\Reports\Support\Reports\ReportGenerator; use File; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use ReflectionClass; use SplFileInfo; @@ -11,6 +13,8 @@ class Report extends Model { + use HasFactory; + /** * The report generator for this report. * @@ -163,4 +167,14 @@ public function deleteFile() { Storage::disk(config('reports.storage_disk'))->delete($this->id); } + + /** + * Create a new factory instance for the model. + * + * @return \Illuminate\Database\Eloquent\Factories\Factory + */ + protected static function newFactory() + { + return ReportFactory::new(); + } } diff --git a/src/ReportType.php b/src/ReportType.php index 5e56d80f0..6259de73d 100644 --- a/src/ReportType.php +++ b/src/ReportType.php @@ -2,12 +2,14 @@ namespace Biigle\Modules\Reports; +use Biigle\Modules\Reports\Database\Factories\ReportTypeFactory; use Biigle\Traits\HasConstantInstances; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class ReportType extends Model { - use HasConstantInstances; + use HasConstantInstances, HasFactory; /** * The constant instances of this model. @@ -37,4 +39,14 @@ class ReportType extends Model * @var bool */ public $timestamps = false; + + /** + * Create a new factory instance for the model. + * + * @return \Illuminate\Database\Eloquent\Factories\Factory + */ + protected static function newFactory() + { + return ReportTypeFactory::new(); + } } diff --git a/src/ReportsServiceProvider.php b/src/ReportsServiceProvider.php index 5adb859de..3467ff288 100644 --- a/src/ReportsServiceProvider.php +++ b/src/ReportsServiceProvider.php @@ -5,7 +5,6 @@ use Biigle\Http\Requests\UpdateUserSettings; use Biigle\Modules\Reports\Http\Controllers\Mixins\Views\SearchControllerMixin; use Biigle\Services\Modules; -use Illuminate\Database\Eloquent\Factory as EloquentFactory; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; use Illuminate\Routing\Router; @@ -93,10 +92,6 @@ public function register() $this->commands([ 'command.reports.publish', ]); - - if (config('app.env') === 'testing') { - $this->registerEloquentFactoriesFrom(__DIR__.'/database/factories'); - } } /** @@ -110,15 +105,4 @@ public function provides() 'command.reports.publish', ]; } - - /** - * Register factories. - * - * @param string $path - * @return void - */ - protected function registerEloquentFactoriesFrom($path) - { - $this->app->make(EloquentFactory::class)->load($path); - } } diff --git a/src/database/factories/ModelFactory.php b/src/database/factories/ModelFactory.php deleted file mode 100644 index 9f2fcf5fe..000000000 --- a/src/database/factories/ModelFactory.php +++ /dev/null @@ -1,22 +0,0 @@ -define(Biigle\Modules\Reports\ReportType::class, function ($faker) { - return [ - 'name' => $faker->username(), - ]; -}); - -$factory->define(Biigle\Modules\Reports\Report::class, function ($faker) { - return [ - 'user_id' => function () { - return factory(Biigle\User::class)->create()->id; - }, - 'type_id' => function () { - return Biigle\Modules\Reports\ReportType::imageAnnotationsCsvId(); - }, - 'source_id' => function () { - return factory(Biigle\Volume::class)->create()->id; - }, - 'source_type' => Biigle\Volume::class, - ]; -}); diff --git a/tests/Support/Reports/ReportGeneratorTest.php b/tests/Support/Reports/ReportGeneratorTest.php index 783d274e1..c487ece4f 100644 --- a/tests/Support/Reports/ReportGeneratorTest.php +++ b/tests/Support/Reports/ReportGeneratorTest.php @@ -20,7 +20,7 @@ class ReportGeneratorTest extends TestCase public function testGetNotExists() { $this->expectException(Exception::class); - ReportGenerator::get(Volume::class, factory(ReportType::class)->make()); + ReportGenerator::get(Volume::class, ReportType::factory()->make()); } public function testGet() From bfcf02272f75c02070e4d2af0b726f72249d4b7d Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 16 Feb 2022 16:49:12 +0100 Subject: [PATCH 304/407] Fix compatibility with Flysystem 3 --- src/Http/Controllers/Api/ReportsController.php | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/Http/Controllers/Api/ReportsController.php b/src/Http/Controllers/Api/ReportsController.php index cc60ad059..d00255a6a 100644 --- a/src/Http/Controllers/Api/ReportsController.php +++ b/src/Http/Controllers/Api/ReportsController.php @@ -4,7 +4,7 @@ use Biigle\Http\Controllers\Api\Controller; use Biigle\Modules\Reports\Report; -use League\Flysystem\FileNotFoundException; +use Illuminate\Http\Response; use Storage; class ReportsController extends Controller @@ -34,12 +34,13 @@ public function show($id) $this->authorize('access', $report); $report->touch(); - try { - return Storage::disk(config('reports.storage_disk')) - ->download($report->id, $report->filename); - } catch (FileNotFoundException $e) { - abort(404); + $disk = Storage::disk(config('reports.storage_disk')); + + if (!$disk->exists($report->id)) { + abort(Response::HTTP_NOT_FOUND); } + + return $disk->download($report->id, $report->filename); } /** From c9f597625f15805d6ee8f27fc98dcd57aa1e51c9 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 3 Mar 2022 17:02:37 +0100 Subject: [PATCH 305/407] WIP Start to implement the VideoIfdoReportGenerator --- .../Volumes/VideoIfdoReportGenerator.php | 383 ++++++ .../Volumes/ImageIfdoReportGeneratorTest.php | 92 ++ .../Volumes/VideoIfdoReportGeneratorTest.php | 1055 +++++++++++++++++ 3 files changed, 1530 insertions(+) create mode 100644 src/Support/Reports/Volumes/VideoIfdoReportGenerator.php create mode 100644 tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php diff --git a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php b/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php new file mode 100644 index 000000000..b27a63985 --- /dev/null +++ b/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php @@ -0,0 +1,383 @@ +wormsLabelSource = LabelSource::where('name', 'worms')->first(); + $this->users = $this->getUsers()->keyBy('id'); + $this->labels = $this->getLabels()->keyBy('id'); + + $this->query()->eachById([$this, 'processVideo']); + + $ifdo = $this->source->getIfdo(); + + if (is_null($ifdo)) { + throw new Exception("No iFDO file found for the volume."); + } + + $creators = array_map(function ($user) { + return [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + // TODO maybe leave this out? No way to determine the type here. + 'type' => 'expert', + ]; + }, $this->imageAnnotationCreators); + + if ($this->options->get('stripIfdo', false)) { + unset($ifdo['image-set-header']['image-annotation-creators']); + unset($ifdo['image-set-header']['image-annotation-labels']); + if (array_key_exists('image-set-items', $ifdo)) { + foreach ($ifdo['image-set-items'] as &$item) { + unset($item['image-annotations']); + unset($item['image-annotation-geometry-types']); + } + } + } + + if (!empty($creators)) { + $ifdo['image-set-header']['image-annotation-creators'] = array_merge( + $ifdo['image-set-header']['image-annotation-creators'] ?? [], + $creators + ); + } + + $labels = array_map(function ($label) { + if ($this->shouldConvertWormsId($label)) { + return [ + 'id' => $this->getWormsUrn($label), + 'name' => $label->name, + ]; + } + + return [ + 'id' => $label->id, + 'name' => $label->name, + ]; + }, $this->imageAnnotationLabels); + + if (!empty($labels)) { + $ifdo['image-set-header']['image-annotation-labels'] = array_merge( + $ifdo['image-set-header']['image-annotation-labels'] ?? [], + $labels + ); + } + + if (!empty($this->imageSetItems)) { + $ifdo['image-set-items'] = array_merge_recursive( + $ifdo['image-set-items'] ?? [], + $this->imageSetItems + ); + } + + $this->writeYaml($ifdo, $path); + } + + /** + * Assemble a new DB query for the volume of this report. + * + * @return \Illuminate\Database\Query\Builder + */ + protected function query() + { + $relations = [ + 'annotations' => function ($query) { + return $query; + }, + 'annotations.labels' => function ($query) { + // if ($this->isRestrictedToNewestLabel()) { + // $query = $this->restrictToNewestLabelQuery($query); + // } + + // if ($this->isRestrictedToLabels()) { + // $query = $this->restrictToLabelsQuery($query); + // } + + return $query; + }, + 'labels' => function ($query) { + // if ($this->isRestrictedToLabels()) { + // return $query->whereIn('video_labels.label_id', $this->getOnlyLabels()); + // } + + return $query; + }, + ]; + + return $this->source->videos()->with($relations); + } + + /** + * Get all users who annotated in the volume. + * + * @return Illuminate\Support\Collection + */ + protected function getUsers() + { + return User::whereIn('id', function ($query) { + $query->select('user_id') + ->from('video_annotation_labels') + ->join('video_annotations', 'video_annotations.id', '=', 'video_annotation_labels.annotation_id') + ->join('videos', 'video_annotations.video_id', '=', 'videos.id') + ->where('videos.volume_id', $this->source->id); + }) + ->orWhereIn('id', function ($query) { + $query->select('user_id') + ->from('video_labels') + ->join('videos', 'video_labels.video_id', '=', 'videos.id') + ->where('videos.volume_id', $this->source->id); + }) + ->get(); + } + + /** + * Get all labels that were used in the volume. + * + * @return Illuminate\Support\Collection + */ + protected function getLabels() + { + return Label::whereIn('id', function ($query) { + $query->select('label_id') + ->from('video_annotation_labels') + ->join('video_annotations', 'video_annotations.id', '=', 'video_annotation_labels.annotation_id') + ->join('videos', 'video_annotations.video_id', '=', 'videos.id') + ->where('videos.volume_id', $this->source->id); + }) + ->orWhereIn('id', function ($query) { + $query->select('label_id') + ->from('video_labels') + ->join('videos', 'video_labels.video_id', '=', 'videos.id') + ->where('videos.volume_id', $this->source->id); + }) + ->get(); + } + + /** + * Create the image-set-item entry for a video. + * + * @param Video $video + * + */ + public function processVideo(Video $video) + { + $geometryTypes = []; + + // Remove annotations that should not be included because of an "onlyLabels" + // filter. + $annotations = $video->annotations->filter(function ($a) { + return $a->labels->isNotEmpty(); + }); + + $geometryTypes = $annotations->map(function ($a) { + if ($a->shape_id === Shape::pointId()) { + return 'single-pixel'; + } elseif ($a->shape_id === Shape::circleId()) { + // Circles don't store the coordinates but could be converted to + // bounding boxes. + return 'bounding-box'; + } elseif ($a->shape_id === Shape::wholeFrameId()) { + return 'whole-image'; + } else { + // We treat ellipses as rectangles and rectangles as polygons. + // Also, line strings can only be represented as polygons in iFDO. + return 'polygon'; + } + }) + ->unique() + ->values() + ->toArray(); + + $annotations = $annotations->map(function ($annotation) { + $labels = $annotation->labels->map(function ($aLabel) { + $user = $this->users->get($aLabel->user_id); + if (!in_array($user, $this->imageAnnotationCreators)) { + $this->imageAnnotationCreators[] = $user; + } + + $label = $this->labels->get($aLabel->label_id); + if (!in_array($label, $this->imageAnnotationLabels)) { + $this->imageAnnotationLabels[] = $label; + } + + if ($this->shouldConvertWormsId($label)) { + $labelId = $this->getWormsUrn($label); + } else { + $labelId = $label->id; + } + + return [ + 'label' => $labelId, + 'annotator' => $user->uuid, + 'confidence' => $aLabel->confidence, + 'created-at' => (string) $aLabel->created_at, + ]; + }); + + return [ + 'coordinates' => $annotation->points, + 'frames' => $annotation->frames, + 'labels' => $labels->toArray(), + ]; + }); + + $labels = $video->labels->map(function ($iLabel) { + $user = $this->users->get($iLabel->user_id); + if (!in_array($user, $this->imageAnnotationCreators)) { + $this->imageAnnotationCreators[] = $user; + } + + $label = $this->labels->get($iLabel->label_id); + if (!in_array($label, $this->imageAnnotationLabels)) { + $this->imageAnnotationLabels[] = $label; + } + + if ($this->shouldConvertWormsId($label)) { + $labelId = $this->getWormsUrn($label); + } else { + $labelId = $label->id; + } + + return [ + 'coordinates' => [], + 'labels' => [ + [ + 'label' => $labelId, + 'annotator' => $user->uuid, + 'created-at' => (string) $iLabel->created_at, + ], + ], + ]; + }); + + if ($labels->isNotEmpty() && !in_array('whole-image', $geometryTypes)) { + $geometryTypes[] = 'whole-image'; + } + + $this->imageSetItems[$video->filename] = []; + + // Use toBase() because the merge method of Eloquent collections works + // differently. + $videoAnnotations = $annotations->toBase()->merge($labels)->toArray(); + + if (!empty($videoAnnotations)) { + $this->imageSetItems[$video->filename]['image-annotations'] = $videoAnnotations; + $this->imageSetItems[$video->filename]['image-annotation-geometry-types'] = $geometryTypes; + } + } + + /** + * Write the report YAML file. + * + * @param array $content + * @param string $path + */ + protected function writeYaml(array $content, string $path) + { + yaml_emit_file($path, $content); + } + + /** + * Determine if the label ID should be converted to a WoRMS URN. + * + * @param Label $label + * + * @return bool + */ + protected function shouldConvertWormsId(Label $label) + { + return $this->wormsLabelSource && $label->label_source_id === $this->wormsLabelSource->id; + } + + /** + * Get the WoRMS URN for a label (if it has one). + * + * @param Label $label + * + * @return string + */ + protected function getWormsUrn($label) + { + return "urn:lsid:marinespecies.org:taxname:{$label->source_id}"; + } +} diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php index 6278ef193..155a816a7 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -34,6 +34,7 @@ protected function setUpIfdo($merge = []) 'image-set-handle' => '20.500.12085/test-example', 'image-set-name' => 'My Cool Volume', 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'image', ], ], $merge); @@ -73,6 +74,7 @@ public function testGenerateReport() 'image-set-handle' => '20.500.12085/test-example', 'image-set-name' => 'My Cool Volume', 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'image', 'image-annotation-creators' => [ [ 'id' => $user->uuid, @@ -145,6 +147,7 @@ public function testGenerateReportMultiLabel() 'image-set-handle' => '20.500.12085/test-example', 'image-set-name' => 'My Cool Volume', 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'image', 'image-annotation-creators' => [ [ 'id' => $user->uuid, @@ -207,6 +210,7 @@ public function testGenerateReportEmpty() 'image-set-handle' => '20.500.12085/test-example', 'image-set-name' => 'My Cool Volume', 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'image', ], 'image-set-items' => [ $image->filename => [], @@ -240,6 +244,7 @@ public function testGenerateReportImageLabels() 'image-set-handle' => '20.500.12085/test-example', 'image-set-name' => 'My Cool Volume', 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'image', 'image-annotation-creators' => [ [ 'id' => $user->uuid, @@ -345,6 +350,7 @@ public function testGenerateReportMergeImageSetItems() 'image-set-handle' => '20.500.12085/test-example', 'image-set-name' => 'My Cool Volume', 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'image', 'image-annotation-creators' => [ [ 'id' => '123abc', @@ -403,6 +409,86 @@ public function testGenerateReportMergeImageSetItems() $this->assertEquals($expect, $generator->yaml); } + public function testGenerateReportMergeImageSetItemsArray() + { + $label = LabelTest::create(); + $user = UserTest::create(); + + $image = ImageTest::create(); + + $merge = [ + 'image-set-items' => [ + // The double array here is the difference to testGenerateReportMergeImageSetItems! + $image->filename => [[ + 'image-area-square-meter' => 5.5, + ]], + ], + ]; + + [$volume, $ifdo] = $this->setUpIfdo($merge); + + $a = ImageAnnotationTest::create([ + 'image_id' => $image->id, + 'points' => [150, 150], + 'shape_id' => Shape::pointId(), + ]); + $al = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a->id, + ]); + + $image->volume_id = $volume->id; + $image->save(); + + $generator = new ImageIfdoReportGeneratorStub; + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'image', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $al->label_id, + 'name' => $al->label->name, + ], + ], + ], + 'image-set-items' => [ + $al->annotation->image->filename => [[ + 'image-area-square-meter' => 5.5, + 'image-annotation-geometry-types' => ['single-pixel'], + 'image-annotations' => [ + [ + 'coordinates' => $al->annotation->points, + 'labels' => [ + [ + 'label' => $al->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al->confidence, + 'created-at' => (string) $al->created_at, + ], + ], + ], + ], + ]], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } + public function testGenerateReportRestrictToExportArea() { [$volume, $ifdo] = $this->setUpIfdo(); @@ -448,6 +534,7 @@ public function testGenerateReportRestrictToExportArea() 'image-set-handle' => '20.500.12085/test-example', 'image-set-name' => 'My Cool Volume', 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'image', 'image-annotation-creators' => [ [ 'id' => $user->uuid, @@ -522,6 +609,7 @@ public function testGenerateReportRestrictNewestLabel() 'image-set-handle' => '20.500.12085/test-example', 'image-set-name' => 'My Cool Volume', 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'image', 'image-annotation-creators' => [ [ 'id' => $user->uuid, @@ -609,6 +697,7 @@ public function testGenerateReportRestrictToLabels() 'image-set-handle' => '20.500.12085/test-example', 'image-set-name' => 'My Cool Volume', 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'image', 'image-annotation-creators' => [ [ 'id' => $user->uuid, @@ -689,6 +778,7 @@ public function testGenerateReportLabelAphiaIdInfo() 'image-set-handle' => '20.500.12085/test-example', 'image-set-name' => 'My Cool Volume', 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'image', 'image-annotation-creators' => [ [ 'id' => $user->uuid, @@ -796,6 +886,7 @@ public function testStripIfdo() 'image-set-handle' => '20.500.12085/test-example', 'image-set-name' => 'My Cool Volume', 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'image', 'image-annotation-creators' => [ [ 'id' => $user->uuid, @@ -902,6 +993,7 @@ public function testGeometryTypes() 'image-set-handle' => '20.500.12085/test-example', 'image-set-name' => 'My Cool Volume', 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'image', 'image-annotation-creators' => [ [ 'id' => $user->uuid, diff --git a/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php new file mode 100644 index 000000000..4b8511768 --- /dev/null +++ b/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php @@ -0,0 +1,1055 @@ +assertEquals('video iFDO report', $generator->getName()); + $this->assertEquals('video_ifdo_report', $generator->getFilename()); + $this->assertStringEndsWith('.yaml', $generator->getFullFilename()); + } + + protected function setUpIfdo($merge = []) + { + $ifdo = array_merge_recursive([ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'video', + ], + ], $merge); + + $volume = VolumeTest::create(['name' => 'My Cool Volume']); + + $disk = Storage::fake('ifdos'); + $disk->put($volume->id, yaml_emit($ifdo)); + + return [$volume, $ifdo]; + } + + public function testGenerateReport() + { + [$volume, $ifdo] = $this->setUpIfdo(); + + $label = LabelTest::create(); + $user = UserTest::create(); + + $video = VideoTest::create(['volume_id' => $volume->id]); + $a = VideoAnnotationTest::create([ + 'video_id' => $video->id, + 'points' => [[150, 150], [200, 200]], + 'frames' => [100.0, 200.0], + 'shape_id' => Shape::pointId(), + ]); + $al = VideoAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a->id, + ]); + + $generator = new VideoIfdoReportGeneratorStub; + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'video', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $al->label_id, + 'name' => $al->label->name, + ], + ], + ], + 'image-set-items' => [ + $al->annotation->video->filename => [ + 'image-annotation-geometry-types' => ['single-pixel'], + 'image-annotations' => [ + [ + 'coordinates' => [[150, 150], [200, 200]], + 'frames' => [100.0, 200.0], + 'labels' => [ + [ + 'label' => $al->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al->confidence, + 'created-at' => (string) $al->created_at, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } + + public function testGenerateReportMultiLabel() + { + [$volume, $ifdo] = $this->setUpIfdo(); + + $label = LabelTest::create(); + $label2 = LabelTest::create(); + $user = UserTest::create(); + + $video = VideoTest::create(['volume_id' => $volume->id]); + $a = VideoAnnotationTest::create([ + 'video_id' => $video->id, + 'points' => [[150, 150]], + 'frames' => [100.0], + 'shape_id' => Shape::pointId(), + ]); + $al = VideoAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a->id, + ]); + + $al2 = VideoAnnotationLabelTest::create([ + 'label_id' => $label2->id, + 'user_id' => $user->id, + 'annotation_id' => $a->id, + ]); + + $generator = new VideoIfdoReportGeneratorStub; + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'video', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $al->label_id, + 'name' => $al->label->name, + ], + [ + 'id' => $al2->label_id, + 'name' => $al2->label->name, + ], + ], + ], + 'image-set-items' => [ + $al->annotation->video->filename => [ + 'image-annotation-geometry-types' => ['single-pixel'], + 'image-annotations' => [ + [ + 'coordinates' => [[150, 150]], + 'frames' => [100.0], + 'labels' => [ + [ + 'label' => $al->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al->confidence, + 'created-at' => (string) $al->created_at, + ], + [ + 'label' => $al2->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al2->confidence, + 'created-at' => (string) $al->created_at, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } + + public function testGenerateReportEmpty() + { + [$volume, $ifdo] = $this->setUpIfdo(); + + $video = VideoTest::create(['volume_id' => $volume->id]); + + $generator = new VideoIfdoReportGeneratorStub; + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'video', + ], + 'image-set-items' => [ + $video->filename => [], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } + + public function testGenerateReportVideoLabels() + { + [$volume, $ifdo] = $this->setUpIfdo(); + + $label = LabelTest::create(); + $user = UserTest::create(); + + $vl = VideoLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + ]); + + $vl->video->volume_id = $volume->id; + $vl->video->save(); + + $generator = new VideoIfdoReportGeneratorStub; + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'video', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $vl->label_id, + 'name' => $vl->label->name, + ], + ], + ], + 'image-set-items' => [ + $vl->video->filename => [ + 'image-annotation-geometry-types' => ['whole-image'], + 'image-annotations' => [ + [ + 'coordinates' => [], + 'labels' => [ + [ + 'label' => $vl->label_id, + 'annotator' => $user->uuid, + 'created-at' => (string) $vl->created_at, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } + + public function testGenerateReportMergeImageSetItems() + { + $label = LabelTest::create(); + $user = UserTest::create(); + + $video = VideoTest::create(); + + $merge = [ + 'image-set-header' => [ + 'image-annotation-creators' => [ + [ + 'id' => '123abc', + 'name' => "Test User", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => 123321, + 'name' => 'Test Label', + ], + ], + ], + 'image-set-items' => [ + $video->filename => [ + 'image-area-square-meter' => 5.5, + 'image-annotation-geometry-types' => ['bounding-box'], + 'image-annotations' => [ + [ + 'coordinates' => [10, 20, 20, 30, 30, 20, 20, 10], + 'labels' => [ + [ + 'label' => 123321, + 'annotator' => '123abc', + 'confidence' => 1.0, + 'created-at' => '2022-02-10 09:47:00', + ], + ], + ], + ], + ], + ], + ]; + + [$volume, $ifdo] = $this->setUpIfdo($merge); + + $a = VideoAnnotationTest::create([ + 'video_id' => $video->id, + 'points' => [[150, 150]], + 'frames' => [100.0], + 'shape_id' => Shape::pointId(), + ]); + $al = VideoAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a->id, + ]); + + $video->volume_id = $volume->id; + $video->save(); + + $generator = new VideoIfdoReportGeneratorStub; + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'video', + 'image-annotation-creators' => [ + [ + 'id' => '123abc', + 'name' => "Test User", + 'type' => 'expert', + ], + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => 123321, + 'name' => 'Test Label', + ], + [ + 'id' => $al->label_id, + 'name' => $al->label->name, + ], + ], + ], + 'image-set-items' => [ + $al->annotation->video->filename => [ + 'image-area-square-meter' => 5.5, + 'image-annotation-geometry-types' => ['bounding-box', 'single-pixel'], + 'image-annotations' => [ + [ + 'coordinates' => [10, 20, 20, 30, 30, 20, 20, 10], + 'labels' => [ + [ + 'label' => 123321, + 'annotator' => '123abc', + 'confidence' => 1.0, + 'created-at' => '2022-02-10 09:47:00', + ], + ], + ], + [ + 'coordinates' => [[150, 150]], + 'frames' => [100.0], + 'labels' => [ + [ + 'label' => $al->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al->confidence, + 'created-at' => (string) $al->created_at, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } + + public function testGenerateReportMergeImageSetItemsArray() + { + $label = LabelTest::create(); + $user = UserTest::create(); + + $video = VideoTest::create(); + + $merge = [ + 'image-set-items' => [ + $video->filename => [ + [ + 'image-area-square-meter' => 5.5, + ], + [ + 'image-area-square-meter' => 6.0, + ], + ], + ], + ]; + + [$volume, $ifdo] = $this->setUpIfdo($merge); + + $a = VideoAnnotationTest::create([ + 'video_id' => $video->id, + 'points' => [[150, 150]], + 'frames' => [100.0], + 'shape_id' => Shape::pointId(), + ]); + $al = VideoAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a->id, + ]); + + $video->volume_id = $volume->id; + $video->save(); + + $generator = new VideoIfdoReportGeneratorStub; + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'video', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $al->label_id, + 'name' => $al->label->name, + ], + ], + ], + 'image-set-items' => [ + $al->annotation->video->filename => [ + [ + 'image-area-square-meter' => 5.5, + 'image-annotation-geometry-types' => ['bounding-box', 'single-pixel'], + 'image-annotations' => [ + [ + 'coordinates' => [[150, 150]], + 'frames' => [100.0], + 'labels' => [ + [ + 'label' => $al->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al->confidence, + 'created-at' => (string) $al->created_at, + ], + ], + ], + ], + ], + [ + 'image-area-square-meter' => 6.0, + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } + + public function testGenerateReportRestrictNewestLabel() + { + [$volume, $ifdo] = $this->setUpIfdo(); + + $label = LabelTest::create(); + $label2 = LabelTest::create(); + $user = UserTest::create(); + + $video = VideoTest::create(['volume_id' => $volume->id]); + $a = VideoAnnotationTest::create([ + 'video_id' => $video->id, + 'points' => [[150, 150]], + 'frames' => [100.0], + 'shape_id' => Shape::pointId(), + ]); + $al = VideoAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a->id, + ]); + + $al2 = VideoAnnotationLabelTest::create([ + 'label_id' => $label2->id, + 'user_id' => $user->id, + 'annotation_id' => $a->id, + ]); + + $generator = new VideoIfdoReportGeneratorStub([ + 'newestLabel' => true, + ]); + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'video', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $al2->label_id, + 'name' => $al2->label->name, + ], + ], + ], + 'image-set-items' => [ + $al->annotation->video->filename => [ + 'image-annotation-geometry-types' => ['single-pixel'], + 'image-annotations' => [ + [ + 'points' => [[150, 150]], + 'frames' => [100.0], + 'labels' => [ + [ + 'label' => $al2->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al2->confidence, + 'created-at' => (string) $al->created_at, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } + + public function testGenerateReportRestrictToLabels() + { + [$volume, $ifdo] = $this->setUpIfdo(); + + $label = LabelTest::create(); + $label2 = LabelTest::create(); + $user = UserTest::create(); + + $video1 = VideoTest::create([ + 'volume_id' => $volume->id, + 'filename' => 'img1.jpg', + ]); + $a1 = VideoAnnotationTest::create([ + 'video_id' => $video1->id, + 'shape_id' => Shape::pointId(), + ]); + $al = VideoAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a1->id, + ]); + + $video2 = VideoTest::create([ + 'volume_id' => $volume->id, + 'filename' => 'img2.jpg', + ]); + $a2 = VideoAnnotationTest::create([ + 'video_id' => $video1->id, + 'shape_id' => Shape::pointId(), + ]); + $al2 = VideoAnnotationLabelTest::create([ + 'label_id' => $label2->id, + 'user_id' => $user->id, + 'annotation_id' => $a2->id, + ]); + + $al2->annotation->video->volume_id = $volume->id; + $al2->annotation->video->save(); + + $generator = new VideoIfdoReportGeneratorStub([ + 'onlyLabels' => [$label->id], + ]); + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'video', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $al->label_id, + 'name' => $al->label->name, + ], + ], + ], + 'image-set-items' => [ + $video1->filename => [ + 'image-annotation-geometry-types' => ['single-pixel'], + 'image-annotations' => [ + [ + 'coordinates' => $a1->points, + 'frames' => $a1->frames, + 'labels' => [ + [ + 'label' => $al->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al->confidence, + 'created-at' => (string) $al->created_at, + ], + ], + ], + ], + ], + $video2->filename => [], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } + + public function testGenerateReportNoIfdo() + { + $volume = VolumeTest::create(); + $generator = new VideoIfdoReportGeneratorStub(); + $generator->setSource($volume); + $this->expectException(Exception::class); + $generator->generateReport('my/path'); + } + + public function testGenerateReportLabelAphiaIdInfo() + { + $worms = LabelSource::where('name', 'worms')->first(); + + [$volume, $ifdo] = $this->setUpIfdo(); + + $label = LabelTest::create([ + 'label_source_id' => $worms->id, + 'source_id' => 123999, + ]); + $user = UserTest::create(); + + $video = VideoTest::create(['volume_id' => $volume->id]); + $a = VideoAnnotationTest::create([ + 'video_id' => $video->id, + 'points' => [[150, 150]], + 'frames' => [100.0], + 'shape_id' => Shape::pointId(), + ]); + $al = VideoAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a->id, + ]); + + $generator = new VideoIfdoReportGeneratorStub; + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'video', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => 'urn:lsid:marinespecies.org:taxname:123999', + 'name' => $al->label->name, + ], + ], + ], + 'image-set-items' => [ + $al->annotation->video->filename => [ + 'image-annotation-geometry-types' => ['single-pixel'], + 'image-annotations' => [ + [ + 'coordinates' => [[150, 150]], + 'frames' => [100.0], + 'labels' => [ + [ + 'label' => 'urn:lsid:marinespecies.org:taxname:123999', + 'annotator' => $user->uuid, + 'confidence' => $al->confidence, + 'created-at' => (string) $al->created_at, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } + + public function testStripIfdo() + { + $label = LabelTest::create(); + $user = UserTest::create(); + + $video = VideoTest::create(); + + $merge = [ + 'image-set-header' => [ + 'image-annotation-creators' => [ + [ + 'id' => '123abc', + 'name' => "Test User", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => 123321, + 'name' => 'Test Label', + ], + ], + ], + 'image-set-items' => [ + $video->filename => [ + 'image-annotation-geometry-types' => ['bounding-box'], + 'image-annotations' => [ + [ + 'coordinates' => [10, 20], + 'labels' => [ + [ + 'label' => 123321, + 'annotator' => '123abc', + 'confidence' => 1.0, + 'created-at' => '2022-02-10 09:47:00', + ], + ], + ], + ], + ], + ], + ]; + + [$volume, $ifdo] = $this->setUpIfdo($merge); + + $a = VideoAnnotationTest::create([ + 'video_id' => $video->id, + 'points' => [[150, 150]], + 'frames' => [100.0], + 'shape_id' => Shape::pointId(), + ]); + $al = VideoAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a->id, + ]); + + $video->volume_id = $volume->id; + $video->save(); + + $generator = new VideoIfdoReportGeneratorStub([ + 'stripIfdo' => true, + ]); + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'video', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $al->label_id, + 'name' => $al->label->name, + ], + ], + ], + 'image-set-items' => [ + $al->annotation->video->filename => [ + 'image-annotation-geometry-types' => ['single-pixel'], + 'image-annotations' => [ + [ + 'coordinates' => [[150, 150]], + 'frames' => [100.0], + 'labels' => [ + [ + 'label' => $al->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al->confidence, + 'created-at' => (string) $al->created_at, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } + + public function testGeometryTypes() + { + [$volume, $ifdo] = $this->setUpIfdo(); + + $label = LabelTest::create(); + $user = UserTest::create(); + $video = VideoTest::create([ + 'volume_id' => $volume->id, + ]); + + $a1 = VideoAnnotationTest::create([ + 'video_id' => $video->id, + 'shape_id' => Shape::pointId(), + ]); + $al1 = VideoAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a1->id, + ]); + + $a2 = VideoAnnotationTest::create([ + 'video_id' => $video->id, + 'shape_id' => Shape::rectangleId(), + ]); + $al2 = VideoAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a2->id, + ]); + + $a3 = VideoAnnotationTest::create([ + 'video_id' => $video->id, + 'shape_id' => Shape::circleId(), + ]); + $al3 = VideoAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a3->id, + ]); + + $a4 = VideoAnnotationTest::create([ + 'video_id' => $video->id, + 'shape_id' => Shape::ellipseId(), + ]); + $al4 = VideoAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a4->id, + ]); + + $a5 = VideoAnnotationTest::create([ + 'video_id' => $video->id, + 'shape_id' => Shape::polygonId(), + ]); + $al5 = VideoAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a5->id, + ]); + + $a6 = VideoAnnotationTest::create([ + 'video_id' => $video->id, + 'shape_id' => Shape::wholeFrameId(), + ]); + $al6 = VideoAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a6->id, + ]); + + $generator = new VideoIfdoReportGeneratorStub; + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'video', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $label->id, + 'name' => $label->name, + ], + ], + ], + 'image-set-items' => [ + $video->filename => [ + 'image-annotation-geometry-types' => ['single-pixel', 'polygon', 'bounding-box', 'whole-image'], + 'image-annotations' => [ + [ + 'coordinates' => $a1->points, + 'frames' => $a1->frames, + 'labels' => [ + [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'confidence' => $al1->confidence, + 'created-at' => (string) $al1->created_at, + ], + ], + ], + [ + 'coordinates' => $a2->points, + 'frames' => $a2->frames, + 'labels' => [ + [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'confidence' => $al2->confidence, + 'created-at' => (string) $al2->created_at, + ], + ], + ], + [ + 'coordinates' => $a3->points, + 'frames' => $a3->frames, + 'labels' => [ + [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'confidence' => $al3->confidence, + 'created-at' => (string) $al3->created_at, + ], + ], + ], + [ + 'coordinates' => $a4->points, + 'frames' => $a4->frames, + 'labels' => [ + [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'confidence' => $al4->confidence, + 'created-at' => (string) $al4->created_at, + ], + ], + ], + [ + 'coordinates' => $a5->points, + 'frames' => $a5->frames, + 'labels' => [ + [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'confidence' => $al5->confidence, + 'created-at' => (string) $al5->created_at, + ], + ], + ], + [ + 'coordinates' => $a6->points, + 'frames' => $a6->frames, + 'labels' => [ + [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'confidence' => $al6->confidence, + 'created-at' => (string) $al6->created_at, + ], + ], + ], + ], + ], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } +} + +class VideoIfdoReportGeneratorStub extends VideoIfdoReportGenerator +{ + public $yaml; + + protected function writeYaml(array $content, string $path) + { + $this->yaml = $content; + } +} From b0cd2816330d9cbca7456949d1c9b25fd43b9a8c Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Wed, 9 Mar 2022 10:57:35 +0100 Subject: [PATCH 306/407] Use api middleware for API routes --- src/Http/routes.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/routes.php b/src/Http/routes.php index 70e4f1eb2..1f425e1af 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -3,7 +3,7 @@ $router->group([ 'namespace' => 'Api', 'prefix' => 'api/v1', - 'middleware' => 'auth:web,api', + 'middleware' => ['api', 'auth:web,api'], ], function ($router) { $router->group([ 'namespace' => 'Volumes', From ec3c04072a5152298e566cfd67bfa4c0e92b5ead Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 11 Mar 2022 16:42:16 +0100 Subject: [PATCH 307/407] Remove unused route --- src/Http/routes.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/Http/routes.php b/src/Http/routes.php index 1f425e1af..fa0493cbd 100644 --- a/src/Http/routes.php +++ b/src/Http/routes.php @@ -58,9 +58,4 @@ 'uses' => 'ReportsController@index', 'as' => 'reports', ]); - - $router->get('videos/{id}/reports', [ - 'uses' => 'VideoReportsController@show', - 'as' => 'video-reports', - ]); }); From 3bb4426586390b81930d2abe2a72d37c7e990500 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Mar 2022 06:56:59 +0000 Subject: [PATCH 308/407] Bump minimist from 1.2.5 to 1.2.6 Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 78ef74c93..00e75dd82 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7456,9 +7456,9 @@ } }, "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "node_modules/mkdirp": { @@ -17085,9 +17085,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "mkdirp": { From e5b617cb351c8fe97a21f42f6ee6121548939353 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Mar 2022 06:56:59 +0000 Subject: [PATCH 309/407] Bump node-forge from 1.2.1 to 1.3.0 Bumps [node-forge](https://github.com/digitalbazaar/forge) from 1.2.1 to 1.3.0. - [Release notes](https://github.com/digitalbazaar/forge/releases) - [Changelog](https://github.com/digitalbazaar/forge/blob/main/CHANGELOG.md) - [Commits](https://github.com/digitalbazaar/forge/compare/v1.2.1...v1.3.0) --- updated-dependencies: - dependency-name: node-forge dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 78ef74c93..3eb76f7e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7560,9 +7560,9 @@ "dev": true }, "node_modules/node-forge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", - "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.0.tgz", + "integrity": "sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA==", "dev": true, "engines": { "node": ">= 6.13.0" @@ -17174,9 +17174,9 @@ "dev": true }, "node-forge": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", - "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.0.tgz", + "integrity": "sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA==", "dev": true }, "node-libs-browser": { From 3d6b73305e0402073552d6b1ad3779e814f85642 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 29 Mar 2022 09:38:50 +0200 Subject: [PATCH 310/407] Use new notificationSettings mixin --- .../views/settings/notifications.blade.php | 28 ++----------------- 1 file changed, 3 insertions(+), 25 deletions(-) diff --git a/src/resources/views/settings/notifications.blade.php b/src/resources/views/settings/notifications.blade.php index 0616ecd99..d81166753 100644 --- a/src/resources/views/settings/notifications.blade.php +++ b/src/resources/views/settings/notifications.blade.php @@ -23,32 +23,10 @@ @push('scripts') From 9209e05b1f8941c58f3ff4da72873914bb7eb2ab Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 7 Apr 2022 10:50:03 +0200 Subject: [PATCH 311/407] Fix handling off iFDO array items Video items are always arrays and images can be both. --- .../Volumes/ImageIfdoReportGenerator.php | 71 +++++++++++- .../Volumes/VideoIfdoReportGenerator.php | 77 +++++++++++-- tests/Jobs/GenerateReportJobTest.php | 6 +- .../Volumes/ImageIfdoReportGeneratorTest.php | 108 ++++++++++++++++++ .../Volumes/VideoIfdoReportGeneratorTest.php | 48 ++++---- 5 files changed, 269 insertions(+), 41 deletions(-) diff --git a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php index 4a2a148f9..c96df2585 100644 --- a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php @@ -109,9 +109,16 @@ public function generateReport($path) unset($ifdo['image-set-header']['image-annotation-labels']); if (array_key_exists('image-set-items', $ifdo)) { foreach ($ifdo['image-set-items'] as &$item) { - unset($item['image-annotations']); - unset($item['image-annotation-geometry-types']); + if ($this->isArrayItem($item)) { + unset($item[0]['image-annotations']); + unset($item[0]['image-annotation-geometry-types']); + } else { + unset($item['image-annotations']); + unset($item['image-annotation-geometry-types']); + } } + // Always unset by-reference variables of loops. + unset($item); } } @@ -144,10 +151,13 @@ public function generateReport($path) } if (!empty($this->imageSetItems)) { - $ifdo['image-set-items'] = array_merge_recursive( - $ifdo['image-set-items'] ?? [], - $this->imageSetItems - ); + $keys = array_keys($this->imageSetItems); + + $ifdo['image-set-items'] = $ifdo['image-set-items'] ?? []; + + foreach ($keys as $key) { + $this->mergeImageSetItem($key, $ifdo['image-set-items']); + } } $this->writeYaml($ifdo, $path); @@ -376,4 +386,53 @@ protected function getWormsUrn($label) { return "urn:lsid:marinespecies.org:taxname:{$label->source_id}"; } + + /** + * Determine if an iFDO item is a single object or an array of objects. + * Both are allowed for images. Only the latter should be the case for videos. + * + * @param array $item + * + * @return boolean + */ + protected function isArrayItem($item) + { + return !empty($item) && array_reduce(array_keys($item), function ($carry, $key) { + return $carry && is_numeric($key); + }, true); + } + + /** + * Merge an image-set-items item of the original iFDO with the item generated by this + * report. + * + * @param string $key Filename key of the item (guaranteed to be in + * $this->imageSetItems). + * @param array $ifdoItems image-set-items of the original iFDO + */ + protected function mergeImageSetItem($key, &$ifdoItems) + { + if (array_key_exists($key, $ifdoItems)) { + if ($this->isArrayItem($ifdoItems[$key])) { + if ($this->isArrayItem($this->imageSetItems[$key])) { + $ifdoItems[$key][0] = array_merge_recursive( + $ifdoItems[$key][0], + $this->imageSetItems[$key][0] + ); + } else { + $ifdoItems[$key][0] = array_merge_recursive( + $ifdoItems[$key][0], + $this->imageSetItems[$key] + ); + } + } else { + $ifdoItems[$key] = array_merge_recursive( + $ifdoItems[$key], + $this->imageSetItems[$key] + ); + } + } else { + $ifdoItems[$key] = $this->imageSetItems[$key]; + } + } } diff --git a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php b/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php index b27a63985..5c767fa7f 100644 --- a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php @@ -109,9 +109,14 @@ public function generateReport($path) unset($ifdo['image-set-header']['image-annotation-labels']); if (array_key_exists('image-set-items', $ifdo)) { foreach ($ifdo['image-set-items'] as &$item) { - unset($item['image-annotations']); - unset($item['image-annotation-geometry-types']); + foreach ($item as &$entry) { + unset($entry['image-annotations']); + unset($entry['image-annotation-geometry-types']); + } } + // Always unset by-reference variables of loops. + unset($entry); + unset($item); } } @@ -144,10 +149,13 @@ public function generateReport($path) } if (!empty($this->imageSetItems)) { - $ifdo['image-set-items'] = array_merge_recursive( - $ifdo['image-set-items'] ?? [], - $this->imageSetItems - ); + $keys = array_keys($this->imageSetItems); + + $ifdo['image-set-items'] = $ifdo['image-set-items'] ?? []; + + foreach ($keys as $key) { + $this->mergeImageSetItem($key, $ifdo['image-set-items']); + } } $this->writeYaml($ifdo, $path); @@ -341,8 +349,12 @@ public function processVideo(Video $video) $videoAnnotations = $annotations->toBase()->merge($labels)->toArray(); if (!empty($videoAnnotations)) { - $this->imageSetItems[$video->filename]['image-annotations'] = $videoAnnotations; - $this->imageSetItems[$video->filename]['image-annotation-geometry-types'] = $geometryTypes; + // In contrast to image items, video items should always be an array. + // However, we only fill the first array entry with this report. + $this->imageSetItems[$video->filename][] = [ + 'image-annotations' => $videoAnnotations, + 'image-annotation-geometry-types' => $geometryTypes, + ]; } } @@ -380,4 +392,53 @@ protected function getWormsUrn($label) { return "urn:lsid:marinespecies.org:taxname:{$label->source_id}"; } + + /** + * Determine if an iFDO item is a single object or an array of objects. + * Both are allowed for images. Only the latter should be the case for videos. + * + * @param array $item + * + * @return boolean + */ + protected function isArrayItem($item) + { + return !empty($item) && array_reduce(array_keys($item), function ($carry, $key) { + return $carry && is_numeric($key); + }, true); + } + + /** + * Merge an image-set-items item of the original iFDO with the item generated by this + * report. + * + * @param string $key Filename key of the item (guaranteed to be in + * $this->imageSetItems). + * @param array $ifdoItems image-set-items of the original iFDO + */ + protected function mergeImageSetItem($key, &$ifdoItems) + { + if (array_key_exists($key, $ifdoItems)) { + if ($this->isArrayItem($ifdoItems[$key])) { + if ($this->isArrayItem($this->imageSetItems[$key])) { + $ifdoItems[$key][0] = array_merge_recursive( + $ifdoItems[$key][0], + $this->imageSetItems[$key][0] + ); + } else { + $ifdoItems[$key][0] = array_merge_recursive( + $ifdoItems[$key][0], + $this->imageSetItems[$key] + ); + } + } else { + $ifdoItems[$key] = array_merge_recursive( + $ifdoItems[$key], + $this->imageSetItems[$key] + ); + } + } else { + $ifdoItems[$key] = $this->imageSetItems[$key]; + } + } } diff --git a/tests/Jobs/GenerateReportJobTest.php b/tests/Jobs/GenerateReportJobTest.php index ecbefff2f..b7a3817b1 100644 --- a/tests/Jobs/GenerateReportJobTest.php +++ b/tests/Jobs/GenerateReportJobTest.php @@ -34,7 +34,7 @@ public function testHandleWithoutNotifications() ->with('options') ->andReturn($opts); $report->shouldReceive('save')->once(); - + $report->options = $opts; with(new GenerateReportJob($report))->handle(); } @@ -60,7 +60,7 @@ public function testHandleWithNotificationsTrue() ->with('options') ->andReturn($opts); $report->shouldReceive('save')->once(); - + $report->options = $opts; with(new GenerateReportJob($report))->handle(); } @@ -86,7 +86,7 @@ public function testHandleWithNotificationsFalse() ->with('options') ->andReturn($opts); $report->shouldReceive('save')->once(); - + $report->options = $opts; with(new GenerateReportJob($report))->handle(); } diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php index 155a816a7..3fa05f5ea 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -924,6 +924,114 @@ public function testStripIfdo() $this->assertEquals($expect, $generator->yaml); } + public function testStripIfdoArray() + { + $label = LabelTest::create(); + $user = UserTest::create(); + + $image = ImageTest::create(); + + $merge = [ + 'image-set-header' => [ + 'image-annotation-creators' => [ + [ + 'id' => '123abc', + 'name' => "Test User", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => 123321, + 'name' => 'Test Label', + ], + ], + ], + 'image-set-items' => [ + $image->filename => [[ + 'image-annotation-geometry-types' => ['bounding-box'], + 'image-annotations' => [ + [ + 'coordinates' => [10, 20], + 'labels' => [ + [ + 'label' => 123321, + 'annotator' => '123abc', + 'confidence' => 1.0, + 'created-at' => '2022-02-10 09:47:00', + ], + ], + ], + ], + ]], + ], + ]; + + [$volume, $ifdo] = $this->setUpIfdo($merge); + + $a = ImageAnnotationTest::create([ + 'image_id' => $image->id, + 'points' => [150, 150], + 'shape_id' => Shape::pointId(), + ]); + $al = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a->id, + ]); + + $image->volume_id = $volume->id; + $image->save(); + + $generator = new ImageIfdoReportGeneratorStub([ + 'stripIfdo' => true, + ]); + $generator->setSource($volume); + $generator->generateReport('my/path'); + + $expect = [ + 'image-set-header' => [ + 'image-set-handle' => '20.500.12085/test-example', + 'image-set-name' => 'My Cool Volume', + 'image-set-uuid' => 'd7546c4b-307f-4d42-8554-33236c577450', + 'image-acquisition' => 'image', + 'image-annotation-creators' => [ + [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + 'type' => 'expert', + ], + ], + 'image-annotation-labels' => [ + [ + 'id' => $al->label_id, + 'name' => $al->label->name, + ], + ], + ], + 'image-set-items' => [ + $al->annotation->image->filename => [[ + 'image-annotation-geometry-types' => ['single-pixel'], + 'image-annotations' => [ + [ + 'coordinates' => $al->annotation->points, + 'labels' => [ + [ + 'label' => $al->label_id, + 'annotator' => $user->uuid, + 'confidence' => $al->confidence, + 'created-at' => (string) $al->created_at, + ], + ], + ], + ], + ]], + ], + ]; + + $this->assertEquals($expect, $generator->yaml); + } + public function testGeometryTypes() { [$volume, $ifdo] = $this->setUpIfdo(); diff --git a/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php index 4b8511768..472ecd843 100644 --- a/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php @@ -91,7 +91,7 @@ public function testGenerateReport() ], ], 'image-set-items' => [ - $al->annotation->video->filename => [ + $al->annotation->video->filename => [[ 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ @@ -107,7 +107,7 @@ public function testGenerateReport() ], ], ], - ], + ]], ], ]; @@ -170,7 +170,7 @@ public function testGenerateReportMultiLabel() ], ], 'image-set-items' => [ - $al->annotation->video->filename => [ + $al->annotation->video->filename => [[ 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ @@ -192,7 +192,7 @@ public function testGenerateReportMultiLabel() ], ], ], - ], + ]], ], ]; @@ -264,7 +264,7 @@ public function testGenerateReportVideoLabels() ], ], 'image-set-items' => [ - $vl->video->filename => [ + $vl->video->filename => [[ 'image-annotation-geometry-types' => ['whole-image'], 'image-annotations' => [ [ @@ -278,7 +278,7 @@ public function testGenerateReportVideoLabels() ], ], ], - ], + ]], ], ]; @@ -309,7 +309,7 @@ public function testGenerateReportMergeImageSetItems() ], ], 'image-set-items' => [ - $video->filename => [ + $video->filename => [[ 'image-area-square-meter' => 5.5, 'image-annotation-geometry-types' => ['bounding-box'], 'image-annotations' => [ @@ -325,7 +325,7 @@ public function testGenerateReportMergeImageSetItems() ], ], ], - ], + ]], ], ]; @@ -380,7 +380,7 @@ public function testGenerateReportMergeImageSetItems() ], ], 'image-set-items' => [ - $al->annotation->video->filename => [ + $al->annotation->video->filename => [[ 'image-area-square-meter' => 5.5, 'image-annotation-geometry-types' => ['bounding-box', 'single-pixel'], 'image-annotations' => [ @@ -408,14 +408,14 @@ public function testGenerateReportMergeImageSetItems() ], ], ], - ], + ]], ], ]; $this->assertEquals($expect, $generator->yaml); } - public function testGenerateReportMergeImageSetItemsArray() + public function testGenerateReportMergeImageSetItemsMultiple() { $label = LabelTest::create(); $user = UserTest::create(); @@ -480,7 +480,7 @@ public function testGenerateReportMergeImageSetItemsArray() $al->annotation->video->filename => [ [ 'image-area-square-meter' => 5.5, - 'image-annotation-geometry-types' => ['bounding-box', 'single-pixel'], + 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ 'coordinates' => [[150, 150]], @@ -560,7 +560,7 @@ public function testGenerateReportRestrictNewestLabel() ], ], 'image-set-items' => [ - $al->annotation->video->filename => [ + $al->annotation->video->filename => [[ 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ @@ -576,7 +576,7 @@ public function testGenerateReportRestrictNewestLabel() ], ], ], - ], + ]], ], ]; @@ -649,7 +649,7 @@ public function testGenerateReportRestrictToLabels() ], ], 'image-set-items' => [ - $video1->filename => [ + $video1->filename => [[ 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ @@ -665,7 +665,7 @@ public function testGenerateReportRestrictToLabels() ], ], ], - ], + ]], $video2->filename => [], ], ]; @@ -732,7 +732,7 @@ public function testGenerateReportLabelAphiaIdInfo() ], ], 'image-set-items' => [ - $al->annotation->video->filename => [ + $al->annotation->video->filename => [[ 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ @@ -748,7 +748,7 @@ public function testGenerateReportLabelAphiaIdInfo() ], ], ], - ], + ]], ], ]; @@ -779,7 +779,7 @@ public function testStripIfdo() ], ], 'image-set-items' => [ - $video->filename => [ + $video->filename => [[ 'image-annotation-geometry-types' => ['bounding-box'], 'image-annotations' => [ [ @@ -794,7 +794,7 @@ public function testStripIfdo() ], ], ], - ], + ]], ], ]; @@ -842,7 +842,7 @@ public function testStripIfdo() ], ], 'image-set-items' => [ - $al->annotation->video->filename => [ + $al->annotation->video->filename => [[ 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ @@ -858,7 +858,7 @@ public function testStripIfdo() ], ], ], - ], + ]], ], ]; @@ -960,7 +960,7 @@ public function testGeometryTypes() ], ], 'image-set-items' => [ - $video->filename => [ + $video->filename => [[ 'image-annotation-geometry-types' => ['single-pixel', 'polygon', 'bounding-box', 'whole-image'], 'image-annotations' => [ [ @@ -1036,7 +1036,7 @@ public function testGeometryTypes() ], ], ], - ], + ]], ], ]; From 8c2b1c2cd9593b49b21280a006c2f09bb2c4a782 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 7 Apr 2022 13:22:04 +0200 Subject: [PATCH 312/407] Deduplicate code and add project video iFDO report generator --- src/ReportType.php | 3 +- .../{ => Ifdo}/ImageIfdoReportGenerator.php | 6 +- .../Ifdo/VideoIfdoReportGenerator.php | 49 ++++ .../AnnotationReportGenerator.php | 10 - .../Projects/ProjectReportGenerator.php | 10 + .../Volumes/Ifdo/IfdoReportGenerator.php | 267 ++++++++++++++++++ .../{ => Ifdo}/ImageIfdoReportGenerator.php | 241 +--------------- .../{ => Ifdo}/VideoIfdoReportGenerator.php | 235 +-------------- .../AnnotationReportGenerator.php | 125 +------- .../ImageLocationReportGenerator.php | 4 +- .../ImageLabels/BasicReportGenerator.php | 15 +- .../ImageLabels/CsvReportGenerator.php | 15 +- .../ImageLocationReportGenerator.php | 19 +- .../VideoAnnotations/CsvReportGenerator.php | 44 +-- .../VideoLabels/CsvReportGenerator.php | 15 +- .../Reports/Volumes/VolumeReportGenerator.php | 12 + src/Traits/RestrictsToExportArea.php | 86 ++++++ src/Traits/RestrictsToNewestLabels.php | 33 +++ ...022_04_07_111600_set_ifdo_report_types.php | 39 +++ .../ImageIfdoReportGeneratorTest.php | 4 +- .../Ifdo/VideoIfdoReportGeneratorTest.php | 54 ++++ .../ImageIfdoReportGeneratorTest.php | 4 +- .../VideoIfdoReportGeneratorTest.php | 4 +- 23 files changed, 615 insertions(+), 679 deletions(-) rename src/Support/Reports/Projects/{ => Ifdo}/ImageIfdoReportGenerator.php (82%) create mode 100644 src/Support/Reports/Projects/Ifdo/VideoIfdoReportGenerator.php create mode 100644 src/Support/Reports/Volumes/Ifdo/IfdoReportGenerator.php rename src/Support/Reports/Volumes/{ => Ifdo}/ImageIfdoReportGenerator.php (51%) rename src/Support/Reports/Volumes/{ => Ifdo}/VideoIfdoReportGenerator.php (52%) create mode 100644 src/Traits/RestrictsToExportArea.php create mode 100644 src/Traits/RestrictsToNewestLabels.php create mode 100644 src/database/migrations/2022_04_07_111600_set_ifdo_report_types.php rename tests/Support/Reports/Projects/{ => Ifdo}/ImageIfdoReportGeneratorTest.php (90%) create mode 100644 tests/Support/Reports/Projects/Ifdo/VideoIfdoReportGeneratorTest.php rename tests/Support/Reports/Volumes/{ => Ifdo}/ImageIfdoReportGeneratorTest.php (99%) rename tests/Support/Reports/Volumes/{ => Ifdo}/VideoIfdoReportGeneratorTest.php (99%) diff --git a/src/ReportType.php b/src/ReportType.php index 6259de73d..c66b0a279 100644 --- a/src/ReportType.php +++ b/src/ReportType.php @@ -30,7 +30,8 @@ class ReportType extends Model 'imageLabelsImageLocation' => 'ImageLabels\ImageLocation', 'videoAnnotationsCsv' => 'VideoAnnotations\Csv', 'videoLabelsCsv' => 'VideoLabels\Csv', - 'imageIfdo' => 'ImageIfdo', + 'imageIfdo' => 'Ifdo\ImageIfdo', + 'videoIfdo' => 'Ifdo\VideoIfdo', ]; /** diff --git a/src/Support/Reports/Projects/ImageIfdoReportGenerator.php b/src/Support/Reports/Projects/Ifdo/ImageIfdoReportGenerator.php similarity index 82% rename from src/Support/Reports/Projects/ImageIfdoReportGenerator.php rename to src/Support/Reports/Projects/Ifdo/ImageIfdoReportGenerator.php index a6f667ebe..82ce8dc79 100644 --- a/src/Support/Reports/Projects/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Projects/Ifdo/ImageIfdoReportGenerator.php @@ -1,12 +1,12 @@ filter(function ($volume) { + return $volume->hasIfdo(); + }); + + if ($volumes->isEmpty()) { + throw new Exception('No volume with iFDO found for this project.'); + } + + return $volumes; + } +} diff --git a/src/Support/Reports/Projects/ImageAnnotations/AnnotationReportGenerator.php b/src/Support/Reports/Projects/ImageAnnotations/AnnotationReportGenerator.php index a5edbda4c..b1710e1dd 100644 --- a/src/Support/Reports/Projects/ImageAnnotations/AnnotationReportGenerator.php +++ b/src/Support/Reports/Projects/ImageAnnotations/AnnotationReportGenerator.php @@ -67,14 +67,4 @@ protected function isRestrictedToExportArea() { return $this->options->get('exportArea', false); } - - /** - * Determines if this report should take only the newest label for each annotation. - * - * @return bool - */ - protected function isRestrictedToNewestLabel() - { - return $this->options->get('newestLabel', false); - } } diff --git a/src/Support/Reports/Projects/ProjectReportGenerator.php b/src/Support/Reports/Projects/ProjectReportGenerator.php index eeb4ad86d..f2a5669ed 100644 --- a/src/Support/Reports/Projects/ProjectReportGenerator.php +++ b/src/Support/Reports/Projects/ProjectReportGenerator.php @@ -60,4 +60,14 @@ protected function getReportGenerator() { return new $this->reportClass($this->options); } + + /** + * Determines if this report should take only the newest label for each annotation. + * + * @return bool + */ + protected function isRestrictedToNewestLabel() + { + return $this->options->get('newestLabel', false); + } } diff --git a/src/Support/Reports/Volumes/Ifdo/IfdoReportGenerator.php b/src/Support/Reports/Volumes/Ifdo/IfdoReportGenerator.php new file mode 100644 index 000000000..755853628 --- /dev/null +++ b/src/Support/Reports/Volumes/Ifdo/IfdoReportGenerator.php @@ -0,0 +1,267 @@ +wormsLabelSource = LabelSource::where('name', 'worms')->first(); + $this->users = $this->getUsers()->keyBy('id'); + $this->labels = $this->getLabels()->keyBy('id'); + + $this->query()->eachById([$this, 'processFile']); + + $ifdo = $this->source->getIfdo(); + + if (is_null($ifdo)) { + throw new Exception("No iFDO file found for the volume."); + } + + $creators = array_map(function ($user) { + return [ + 'id' => $user->uuid, + 'name' => "{$user->firstname} {$user->lastname}", + // TODO maybe leave this out? No way to determine the type here. + 'type' => 'expert', + ]; + }, $this->imageAnnotationCreators); + + if ($this->options->get('stripIfdo', false)) { + unset($ifdo['image-set-header']['image-annotation-creators']); + unset($ifdo['image-set-header']['image-annotation-labels']); + if (array_key_exists('image-set-items', $ifdo)) { + foreach ($ifdo['image-set-items'] as &$item) { + if ($this->isArrayItem($item)) { + foreach ($item as &$entry) { + unset($entry['image-annotations']); + unset($entry['image-annotation-geometry-types']); + } + // Always unset by-reference variables of loops. + unset($entry); + } else { + unset($item['image-annotations']); + unset($item['image-annotation-geometry-types']); + } + } + // Always unset by-reference variables of loops. + unset($item); + } + } + + if (!empty($creators)) { + $ifdo['image-set-header']['image-annotation-creators'] = array_merge( + $ifdo['image-set-header']['image-annotation-creators'] ?? [], + $creators + ); + } + + $labels = array_map(function ($label) { + if ($this->shouldConvertWormsId($label)) { + return [ + 'id' => $this->getWormsUrn($label), + 'name' => $label->name, + ]; + } + + return [ + 'id' => $label->id, + 'name' => $label->name, + ]; + }, $this->imageAnnotationLabels); + + if (!empty($labels)) { + $ifdo['image-set-header']['image-annotation-labels'] = array_merge( + $ifdo['image-set-header']['image-annotation-labels'] ?? [], + $labels + ); + } + + if (!empty($this->imageSetItems)) { + $keys = array_keys($this->imageSetItems); + + $ifdo['image-set-items'] = $ifdo['image-set-items'] ?? []; + + foreach ($keys as $key) { + $this->mergeImageSetItem($key, $ifdo['image-set-items']); + } + } + + $this->writeYaml($ifdo, $path); + } + + /** + * Assemble a new DB query for the volume of this report. + * + * @return \Illuminate\Database\Query\Builder + */ + abstract protected function query(); + + /** + * Get all users who annotated in the volume. + * + * @return Illuminate\Support\Collection + */ + abstract protected function getUsers(); + + /** + * Get all labels that were used in the volume. + * + * @return Illuminate\Support\Collection + */ + abstract protected function getLabels(); + + /** + * Create the image-set-item entry for an image or video. + * + * @param Image|Video $file + * + */ + abstract public function processFile(Image|Video $file); + + /** + * Write the report YAML file. + * + * @param array $content + * @param string $path + */ + protected function writeYaml(array $content, string $path) + { + yaml_emit_file($path, $content); + } + + /** + * Determine if the label ID should be converted to a WoRMS URN. + * + * @param Label $label + * + * @return bool + */ + protected function shouldConvertWormsId(Label $label) + { + return $this->wormsLabelSource && $label->label_source_id === $this->wormsLabelSource->id; + } + + /** + * Get the WoRMS URN for a label (if it has one). + * + * @param Label $label + * + * @return string + */ + protected function getWormsUrn($label) + { + return "urn:lsid:marinespecies.org:taxname:{$label->source_id}"; + } + + /** + * Determine if an iFDO item is a single object or an array of objects. + * Both are allowed for images. Only the latter should be the case for videos. + * + * @param array $item + * + * @return boolean + */ + protected function isArrayItem($item) + { + return !empty($item) && array_reduce(array_keys($item), function ($carry, $key) { + return $carry && is_numeric($key); + }, true); + } + + /** + * Merge an image-set-items item of the original iFDO with the item generated by this + * report. + * + * @param string $key Filename key of the item (guaranteed to be in + * $this->imageSetItems). + * @param array $ifdoItems image-set-items of the original iFDO + */ + protected function mergeImageSetItem($key, &$ifdoItems) + { + if (array_key_exists($key, $ifdoItems)) { + if ($this->isArrayItem($ifdoItems[$key])) { + if ($this->isArrayItem($this->imageSetItems[$key])) { + $ifdoItems[$key][0] = array_merge_recursive( + $ifdoItems[$key][0], + $this->imageSetItems[$key][0] + ); + } else { + $ifdoItems[$key][0] = array_merge_recursive( + $ifdoItems[$key][0], + $this->imageSetItems[$key] + ); + } + } else { + $ifdoItems[$key] = array_merge_recursive( + $ifdoItems[$key], + $this->imageSetItems[$key] + ); + } + } else { + $ifdoItems[$key] = $this->imageSetItems[$key]; + } + } +} diff --git a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php b/src/Support/Reports/Volumes/Ifdo/ImageIfdoReportGenerator.php similarity index 51% rename from src/Support/Reports/Volumes/ImageIfdoReportGenerator.php rename to src/Support/Reports/Volumes/Ifdo/ImageIfdoReportGenerator.php index c96df2585..e5951de2a 100644 --- a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/Ifdo/ImageIfdoReportGenerator.php @@ -1,18 +1,19 @@ wormsLabelSource = LabelSource::where('name', 'worms')->first(); - $this->users = $this->getUsers()->keyBy('id'); - $this->labels = $this->getLabels()->keyBy('id'); - - $this->query()->eachById([$this, 'processImage']); - - $ifdo = $this->source->getIfdo(); - - if (is_null($ifdo)) { - throw new Exception("No iFDO file found for the volume."); - } - - $creators = array_map(function ($user) { - return [ - 'id' => $user->uuid, - 'name' => "{$user->firstname} {$user->lastname}", - // TODO maybe leave this out? No way to determine the type here. - 'type' => 'expert', - ]; - }, $this->imageAnnotationCreators); - - if ($this->options->get('stripIfdo', false)) { - unset($ifdo['image-set-header']['image-annotation-creators']); - unset($ifdo['image-set-header']['image-annotation-labels']); - if (array_key_exists('image-set-items', $ifdo)) { - foreach ($ifdo['image-set-items'] as &$item) { - if ($this->isArrayItem($item)) { - unset($item[0]['image-annotations']); - unset($item[0]['image-annotation-geometry-types']); - } else { - unset($item['image-annotations']); - unset($item['image-annotation-geometry-types']); - } - } - // Always unset by-reference variables of loops. - unset($item); - } - } - - if (!empty($creators)) { - $ifdo['image-set-header']['image-annotation-creators'] = array_merge( - $ifdo['image-set-header']['image-annotation-creators'] ?? [], - $creators - ); - } - - $labels = array_map(function ($label) { - if ($this->shouldConvertWormsId($label)) { - return [ - 'id' => $this->getWormsUrn($label), - 'name' => $label->name, - ]; - } - - return [ - 'id' => $label->id, - 'name' => $label->name, - ]; - }, $this->imageAnnotationLabels); - - if (!empty($labels)) { - $ifdo['image-set-header']['image-annotation-labels'] = array_merge( - $ifdo['image-set-header']['image-annotation-labels'] ?? [], - $labels - ); - } - - if (!empty($this->imageSetItems)) { - $keys = array_keys($this->imageSetItems); - - $ifdo['image-set-items'] = $ifdo['image-set-items'] ?? []; - - foreach ($keys as $key) { - $this->mergeImageSetItem($key, $ifdo['image-set-items']); - } - } - - $this->writeYaml($ifdo, $path); - } - /** * Assemble a new DB query for the volume of this report. * @@ -178,11 +43,11 @@ protected function query() }, 'annotations.labels' => function ($query) { if ($this->isRestrictedToNewestLabel()) { - $query = $this->restrictToNewestLabelQuery($query); + $query = $this->restrictToNewestLabelQuery($query, 'image_annotation_labels'); } if ($this->isRestrictedToLabels()) { - $query = $this->restrictToLabelsQuery($query); + $query = $this->restrictToLabelsQuery($query, 'image_annotation_labels'); } return $query; @@ -246,10 +111,10 @@ protected function getLabels() /** * Create the image-set-item entry for an image. * - * @param Image $image + * @param Image|Video $image * */ - public function processImage(Image $image) + public function processFile(Image|Video $image) { $geometryTypes = []; @@ -351,88 +216,4 @@ public function processImage(Image $image) $this->imageSetItems[$image->filename]['image-annotation-geometry-types'] = $geometryTypes; } } - - /** - * Write the report YAML file. - * - * @param array $content - * @param string $path - */ - protected function writeYaml(array $content, string $path) - { - yaml_emit_file($path, $content); - } - - /** - * Determine if the label ID should be converted to a WoRMS URN. - * - * @param Label $label - * - * @return bool - */ - protected function shouldConvertWormsId(Label $label) - { - return $this->wormsLabelSource && $label->label_source_id === $this->wormsLabelSource->id; - } - - /** - * Get the WoRMS URN for a label (if it has one). - * - * @param Label $label - * - * @return string - */ - protected function getWormsUrn($label) - { - return "urn:lsid:marinespecies.org:taxname:{$label->source_id}"; - } - - /** - * Determine if an iFDO item is a single object or an array of objects. - * Both are allowed for images. Only the latter should be the case for videos. - * - * @param array $item - * - * @return boolean - */ - protected function isArrayItem($item) - { - return !empty($item) && array_reduce(array_keys($item), function ($carry, $key) { - return $carry && is_numeric($key); - }, true); - } - - /** - * Merge an image-set-items item of the original iFDO with the item generated by this - * report. - * - * @param string $key Filename key of the item (guaranteed to be in - * $this->imageSetItems). - * @param array $ifdoItems image-set-items of the original iFDO - */ - protected function mergeImageSetItem($key, &$ifdoItems) - { - if (array_key_exists($key, $ifdoItems)) { - if ($this->isArrayItem($ifdoItems[$key])) { - if ($this->isArrayItem($this->imageSetItems[$key])) { - $ifdoItems[$key][0] = array_merge_recursive( - $ifdoItems[$key][0], - $this->imageSetItems[$key][0] - ); - } else { - $ifdoItems[$key][0] = array_merge_recursive( - $ifdoItems[$key][0], - $this->imageSetItems[$key] - ); - } - } else { - $ifdoItems[$key] = array_merge_recursive( - $ifdoItems[$key], - $this->imageSetItems[$key] - ); - } - } else { - $ifdoItems[$key] = $this->imageSetItems[$key]; - } - } } diff --git a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php b/src/Support/Reports/Volumes/Ifdo/VideoIfdoReportGenerator.php similarity index 52% rename from src/Support/Reports/Volumes/VideoIfdoReportGenerator.php rename to src/Support/Reports/Volumes/Ifdo/VideoIfdoReportGenerator.php index 5c767fa7f..911d87636 100644 --- a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/Ifdo/VideoIfdoReportGenerator.php @@ -1,17 +1,14 @@ wormsLabelSource = LabelSource::where('name', 'worms')->first(); - $this->users = $this->getUsers()->keyBy('id'); - $this->labels = $this->getLabels()->keyBy('id'); - - $this->query()->eachById([$this, 'processVideo']); - - $ifdo = $this->source->getIfdo(); - - if (is_null($ifdo)) { - throw new Exception("No iFDO file found for the volume."); - } - - $creators = array_map(function ($user) { - return [ - 'id' => $user->uuid, - 'name' => "{$user->firstname} {$user->lastname}", - // TODO maybe leave this out? No way to determine the type here. - 'type' => 'expert', - ]; - }, $this->imageAnnotationCreators); - - if ($this->options->get('stripIfdo', false)) { - unset($ifdo['image-set-header']['image-annotation-creators']); - unset($ifdo['image-set-header']['image-annotation-labels']); - if (array_key_exists('image-set-items', $ifdo)) { - foreach ($ifdo['image-set-items'] as &$item) { - foreach ($item as &$entry) { - unset($entry['image-annotations']); - unset($entry['image-annotation-geometry-types']); - } - } - // Always unset by-reference variables of loops. - unset($entry); - unset($item); - } - } - - if (!empty($creators)) { - $ifdo['image-set-header']['image-annotation-creators'] = array_merge( - $ifdo['image-set-header']['image-annotation-creators'] ?? [], - $creators - ); - } - - $labels = array_map(function ($label) { - if ($this->shouldConvertWormsId($label)) { - return [ - 'id' => $this->getWormsUrn($label), - 'name' => $label->name, - ]; - } - - return [ - 'id' => $label->id, - 'name' => $label->name, - ]; - }, $this->imageAnnotationLabels); - - if (!empty($labels)) { - $ifdo['image-set-header']['image-annotation-labels'] = array_merge( - $ifdo['image-set-header']['image-annotation-labels'] ?? [], - $labels - ); - } - - if (!empty($this->imageSetItems)) { - $keys = array_keys($this->imageSetItems); - - $ifdo['image-set-items'] = $ifdo['image-set-items'] ?? []; - - foreach ($keys as $key) { - $this->mergeImageSetItem($key, $ifdo['image-set-items']); - } - } - - $this->writeYaml($ifdo, $path); - } - /** * Assemble a new DB query for the volume of this report. * @@ -174,11 +37,11 @@ protected function query() }, 'annotations.labels' => function ($query) { // if ($this->isRestrictedToNewestLabel()) { - // $query = $this->restrictToNewestLabelQuery($query); + // $query = $this->restrictToNewestLabelQuery($query, 'video_annotation_labels');; // } // if ($this->isRestrictedToLabels()) { - // $query = $this->restrictToLabelsQuery($query); + // $query = $this->restrictToLabelsQuery($query, 'video_annotation_labels'); // } return $query; @@ -244,10 +107,10 @@ protected function getLabels() /** * Create the image-set-item entry for a video. * - * @param Video $video + * @param Image|Video $video * */ - public function processVideo(Video $video) + public function processFile(Image|Video $video) { $geometryTypes = []; @@ -357,88 +220,4 @@ public function processVideo(Video $video) ]; } } - - /** - * Write the report YAML file. - * - * @param array $content - * @param string $path - */ - protected function writeYaml(array $content, string $path) - { - yaml_emit_file($path, $content); - } - - /** - * Determine if the label ID should be converted to a WoRMS URN. - * - * @param Label $label - * - * @return bool - */ - protected function shouldConvertWormsId(Label $label) - { - return $this->wormsLabelSource && $label->label_source_id === $this->wormsLabelSource->id; - } - - /** - * Get the WoRMS URN for a label (if it has one). - * - * @param Label $label - * - * @return string - */ - protected function getWormsUrn($label) - { - return "urn:lsid:marinespecies.org:taxname:{$label->source_id}"; - } - - /** - * Determine if an iFDO item is a single object or an array of objects. - * Both are allowed for images. Only the latter should be the case for videos. - * - * @param array $item - * - * @return boolean - */ - protected function isArrayItem($item) - { - return !empty($item) && array_reduce(array_keys($item), function ($carry, $key) { - return $carry && is_numeric($key); - }, true); - } - - /** - * Merge an image-set-items item of the original iFDO with the item generated by this - * report. - * - * @param string $key Filename key of the item (guaranteed to be in - * $this->imageSetItems). - * @param array $ifdoItems image-set-items of the original iFDO - */ - protected function mergeImageSetItem($key, &$ifdoItems) - { - if (array_key_exists($key, $ifdoItems)) { - if ($this->isArrayItem($ifdoItems[$key])) { - if ($this->isArrayItem($this->imageSetItems[$key])) { - $ifdoItems[$key][0] = array_merge_recursive( - $ifdoItems[$key][0], - $this->imageSetItems[$key][0] - ); - } else { - $ifdoItems[$key][0] = array_merge_recursive( - $ifdoItems[$key][0], - $this->imageSetItems[$key] - ); - } - } else { - $ifdoItems[$key] = array_merge_recursive( - $ifdoItems[$key], - $this->imageSetItems[$key] - ); - } - } else { - $ifdoItems[$key] = $this->imageSetItems[$key]; - } - } } diff --git a/src/Support/Reports/Volumes/ImageAnnotations/AnnotationReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/AnnotationReportGenerator.php index f9c003a84..ea1613658 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/AnnotationReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/AnnotationReportGenerator.php @@ -3,12 +3,15 @@ namespace Biigle\Modules\Reports\Support\Reports\Volumes\ImageAnnotations; use Biigle\Modules\Reports\Support\Reports\Volumes\VolumeReportGenerator; -use Biigle\Modules\Reports\Volume; +use Biigle\Modules\Reports\Traits\RestrictsToExportArea; +use Biigle\Modules\Reports\Traits\RestrictsToNewestLabels; use DB; use Illuminate\Support\Str; class AnnotationReportGenerator extends VolumeReportGenerator { + use RestrictsToExportArea, RestrictsToNewestLabels; + /** * Get the report name. * @@ -71,17 +74,6 @@ public function getFilename() return $this->filename; } - /** - * Callback to be used in a `when` query statement that restricts the resulting annotations to the export area of the reansect of this report (if there is any). - * - * @param \Illuminate\Database\Query\Builder $query - * @return \Illuminate\Database\Query\Builder - */ - public function restrictToExportAreaQuery($query) - { - return $query->whereNotIn('image_annotations.id', $this->getSkipIds()); - } - /** * Callback to be used in a `when` query statement that restricts the resulting annotation labels to the annotation session of this report. * @@ -105,97 +97,6 @@ public function restrictToAnnotationSessionQuery($query) }); } - /** - * Callback to be used in a `when` query statement that restricts the results to the newest annotation labels of each annotation. - * - * @param \Illuminate\Database\Query\Builder $query - * @return \Illuminate\Database\Query\Builder - */ - public function restrictToNewestLabelQuery($query) - { - // This is a quite inefficient query. Here is why: - // We could use "select distinct on" directly on the query but this would be - // overridden by the subsequent select() in self::initQuery(). If we would add - // the "select distinct on" **after** the select(), we would get invalid syntax: - // "select *, distinct on". - return $query->whereIn('image_annotation_labels.id', function ($query) { - return $query->selectRaw('distinct on (annotation_id) id') - ->from('image_annotation_labels') - ->orderBy('annotation_id', 'desc') - ->orderBy('id', 'desc') - ->orderBy('created_at', 'desc'); - }); - } - - /** - * Returns the annotation IDs to skip as outside of the volume export area. - * - * We collect the IDs to skip rather than the IDs to include since there are probably - * fewer annotations outside of the export area. - * - * @return array Annotation IDs - */ - protected function getSkipIds() - { - $skip = []; - $exportArea = Volume::convert($this->source)->exportArea; - - if (!$exportArea) { - // take all annotations if no export area is specified - return $skip; - } - - $exportArea = [ - // min x - min($exportArea[0], $exportArea[2]), - // min y - min($exportArea[1], $exportArea[3]), - // max x - max($exportArea[0], $exportArea[2]), - // max y - max($exportArea[1], $exportArea[3]), - ]; - - $handleChunk = function ($annotations) use ($exportArea, &$skip) { - foreach ($annotations as $annotation) { - $points = json_decode($annotation->points); - $size = sizeof($points); - // Works for circles with 3 elements in $points, too! - for ($x = 0, $y = 1; $y < $size; $x += 2, $y += 2) { - if ($points[$x] >= $exportArea[0] && - $points[$x] <= $exportArea[2] && - $points[$y] >= $exportArea[1] && - $points[$y] <= $exportArea[3]) { - // As long as one point of the annotation is inside the - // area, don't skip it. - continue 2; - } - } - - $skip[] = $annotation->id; - } - }; - - DB::table('image_annotations') - ->join('images', 'image_annotations.image_id', '=', 'images.id') - ->where('images.volume_id', $this->source->id) - ->select('image_annotations.id as id', 'image_annotations.points') - ->chunkById(500, $handleChunk, 'image_annotations.id', 'id'); - - return $skip; - } - - /** - * Callback to be used in a `when` query statement that restricts the results to a specific subset of annotation labels. - * - * @param \Illuminate\Database\Query\Builder $query - * @return \Illuminate\Database\Query\Builder - */ - public function restrictToLabelsQuery($query) - { - return $query->whereIn('image_annotation_labels.label_id', $this->getOnlyLabels()); - } - /** * Assembles the part of the DB query that is the same for all annotation reports. * @@ -211,8 +112,12 @@ public function initQuery($columns = []) ->where('images.volume_id', $this->source->id) ->when($this->isRestrictedToExportArea(), [$this, 'restrictToExportAreaQuery']) ->when($this->isRestrictedToAnnotationSession(), [$this, 'restrictToAnnotationSessionQuery']) - ->when($this->isRestrictedToNewestLabel(), [$this, 'restrictToNewestLabelQuery']) - ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']) + ->when($this->isRestrictedToNewestLabel(), function ($query) { + return $this->restrictToNewestLabelQuery($query, 'image_annotation_labels'); + }) + ->when($this->isRestrictedToLabels(), function ($query) { + return $this->restrictToLabelsQuery($query, 'image_annotation_labels'); + }) ->select($columns); if ($this->shouldSeparateLabelTrees()) { @@ -224,16 +129,6 @@ public function initQuery($columns = []) return $query; } - /** - * Should this report be restricted to the export area? - * - * @return bool - */ - protected function isRestrictedToExportArea() - { - return $this->options->get('exportArea', false); - } - /** * Determines if this report should aggregate child labels. * diff --git a/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php index 9e91d6a55..27083436a 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php @@ -49,7 +49,9 @@ public function generateReport($path) ->join('images', 'image_annotations.image_id', '=', 'images.id') ->join('labels', 'image_annotation_labels.label_id', '=', 'labels.id') ->where('images.volume_id', $this->source->id) - ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']) + ->when($this->isRestrictedToLabels(), function ($query) { + return $this->restrictToLabelsQuery($query, 'image_annotation_labels'); + }) ->orderBy('labels.id') ->distinct(); diff --git a/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php index 4a9f9e5ba..230a0d639 100644 --- a/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php @@ -63,17 +63,6 @@ public function generateReport($path) $this->executeScript('csvs_to_xlsx', $path); } - /** - * Callback to be used in a `when` query statement that restricts the results to a specific subset of annotation labels. - * - * @param \Illuminate\Database\Query\Builder $query - * @return \Illuminate\Database\Query\Builder - */ - public function restrictToLabelsQuery($query) - { - return $query->whereIn('image_labels.label_id', $this->getOnlyLabels()); - } - /** * Assemble a new DB query for the volume of this report. * @@ -85,7 +74,9 @@ public function query() ->join('images', 'image_labels.image_id', '=', 'images.id') ->select('images.id', 'images.filename', 'image_labels.label_id') ->where('images.volume_id', $this->source->id) - ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']) + ->when($this->isRestrictedToLabels(), function ($query) { + return $this->restrictToLabelsQuery($query, 'image_labels'); + }) ->orderBy('images.filename'); if ($this->shouldSeparateLabelTrees()) { diff --git a/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php index 6496d601b..54b7c0a37 100644 --- a/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php @@ -73,17 +73,6 @@ public function generateReport($path) $this->makeZip($toZip, $path); } - /** - * Callback to be used in a `when` query statement that restricts the results to a specific subset of annotation labels. - * - * @param \Illuminate\Database\Query\Builder $query - * @return \Illuminate\Database\Query\Builder - */ - public function restrictToLabelsQuery($query) - { - return $query->whereIn('image_labels.label_id', $this->getOnlyLabels()); - } - /** * Assemble a new DB query for the volume of this report. * @@ -108,7 +97,9 @@ public function query() 'labels.name as label_name', ]) ->where('images.volume_id', $this->source->id) - ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']) + ->when($this->isRestrictedToLabels(), function ($query) { + return $this->restrictToLabelsQuery($query, 'image_labels'); + }) ->orderBy('images.filename'); if ($this->shouldSeparateLabelTrees()) { diff --git a/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php index 9c29d60d1..7d57c0438 100644 --- a/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php @@ -49,7 +49,9 @@ public function generateReport($path) $usedImageLabelsQuery = ImageLabel::join('images', 'image_labels.image_id', '=', 'images.id') ->join('labels', 'image_labels.label_id', '=', 'labels.id') ->where('images.volume_id', $this->source->id) - ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']) + ->when($this->isRestrictedToLabels(), function ($query) { + return $this->restrictToLabelsQuery($query, 'image_labels'); + }) ->orderBy('labels.id') ->distinct(); @@ -97,17 +99,6 @@ public function generateReport($path) $this->makeZip($toZip, $path); } - /** - * Callback to be used in a `when` query statement that restricts the results to a specific subset of annotation labels. - * - * @param \Illuminate\Database\Query\Builder $query - * @return \Illuminate\Database\Query\Builder - */ - public function restrictToLabelsQuery($query) - { - return $query->whereIn('image_labels.label_id', $this->getOnlyLabels()); - } - /** * Assemble a new DB query for the volume of this report. * @@ -122,7 +113,9 @@ public function query() 'image_labels.label_id', ]) ->where('images.volume_id', $this->source->id) - ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']); + ->when($this->isRestrictedToLabels(), function ($query) { + return $this->restrictToLabelsQuery($query, 'image_labels'); + }); if ($this->shouldSeparateLabelTrees()) { $query->join('labels', 'labels.id', '=', 'image_labels.label_id') diff --git a/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php b/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php index 7965f681a..b73e58f03 100644 --- a/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php @@ -7,13 +7,14 @@ use Biigle\Modules\Reports\Support\CsvFile; use Biigle\Modules\Reports\Support\Reports\MakesZipArchives; use Biigle\Modules\Reports\Support\Reports\Volumes\VolumeReportGenerator; +use Biigle\Modules\Reports\Traits\RestrictsToNewestLabels; use Biigle\User; use DB; use Illuminate\Support\Str; class CsvReportGenerator extends VolumeReportGenerator { - use MakesZipArchives; + use MakesZipArchives, RestrictsToNewestLabels; /** * Name of the report for use in text. @@ -129,17 +130,6 @@ public function generateReport($path) $this->makeZip($toZip, $path); } - /** - * Callback to be used in a `when` query statement that restricts the results to a specific subset of annotation labels. - * - * @param \Illuminate\Database\Query\Builder $query - * @return \Illuminate\Database\Query\Builder - */ - public function restrictToLabelsQuery($query) - { - return $query->whereIn('video_annotation_labels.label_id', $this->getOnlyLabels()); - } - /** * Assembles the part of the DB query that is the same for all annotation reports. * @@ -154,8 +144,12 @@ public function initQuery($columns = []) ->join('labels', 'video_annotation_labels.label_id', '=', 'labels.id') ->where('videos.volume_id', $this->source->id) ->when($this->isRestrictedToAnnotationSession(), [$this, 'restrictToAnnotationSessionQuery']) - ->when($this->isRestrictedToNewestLabel(), [$this, 'restrictToNewestLabelQuery']) - ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']) + ->when($this->isRestrictedToNewestLabel(), function ($query) { + return $this->restrictToNewestLabelQuery($query, 'video_annotation_labels'); + }) + ->when($this->isRestrictedToLabels(), function ($query) { + return $this->restrictToLabelsQuery($query, 'video_annotation_labels'); + }) ->select($columns); if ($this->shouldSeparateLabelTrees()) { @@ -190,28 +184,6 @@ public function restrictToAnnotationSessionQuery($query) }); } - /** - * Callback to be used in a `when` query statement that restricts the results to the newest annotation labels of each annotation. - * - * @param \Illuminate\Database\Query\Builder $query - * @return \Illuminate\Database\Query\Builder - */ - public function restrictToNewestLabelQuery($query) - { - // This is a quite inefficient query. Here is why: - // We could use "select distinct on" directly on the query but this would be - // overridden by the subsequent select() in self::initQuery(). If we would add - // the "select distinct on" **after** the select(), we would get invalid syntax: - // "select *, distinct on". - return $query->whereIn('video_annotation_labels.id', function ($query) { - return $query->selectRaw('distinct on (annotation_id) id') - ->from('video_annotation_labels') - ->orderBy('annotation_id', 'desc') - ->orderBy('id', 'desc') - ->orderBy('created_at', 'desc'); - }); - } - /** * Assemble a new DB query for the video of this report. * diff --git a/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php b/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php index eefef8ad6..7d918d75f 100644 --- a/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php @@ -73,17 +73,6 @@ public function generateReport($path) $this->makeZip($toZip, $path); } - /** - * Callback to be used in a `when` query statement that restricts the results to a specific subset of annotation labels. - * - * @param \Illuminate\Database\Query\Builder $query - * @return \Illuminate\Database\Query\Builder - */ - public function restrictToLabelsQuery($query) - { - return $query->whereIn('video_labels.label_id', $this->getOnlyLabels()); - } - /** * Assemble a new DB query for the volume of this report. * @@ -106,7 +95,9 @@ public function query() 'labels.name as label_name', ]) ->where('videos.volume_id', $this->source->id) - ->when($this->isRestrictedToLabels(), [$this, 'restrictToLabelsQuery']) + ->when($this->isRestrictedToLabels(), function ($query) { + return $this->restrictToLabelsQuery($query, 'video_labels'); + }) ->orderBy('videos.filename'); if ($this->shouldSeparateLabelTrees()) { diff --git a/src/Support/Reports/Volumes/VolumeReportGenerator.php b/src/Support/Reports/Volumes/VolumeReportGenerator.php index 379159506..56dff5595 100644 --- a/src/Support/Reports/Volumes/VolumeReportGenerator.php +++ b/src/Support/Reports/Volumes/VolumeReportGenerator.php @@ -140,4 +140,16 @@ protected function isRestrictedToNewestLabel() { return $this->options->get('newestLabel', false); } + + /** + * Callback to be used in a `when` query statement that restricts the results to a specific subset of annotation labels. + * + * @param \Illuminate\Database\Query\Builder $query + * @param string $table Name of the annotation/image label DB table + * @return \Illuminate\Database\Query\Builder + */ + protected function restrictToLabelsQuery($query, $table) + { + return $query->whereIn("{$table}.label_id", $this->getOnlyLabels()); + } } diff --git a/src/Traits/RestrictsToExportArea.php b/src/Traits/RestrictsToExportArea.php new file mode 100644 index 000000000..f148a9c61 --- /dev/null +++ b/src/Traits/RestrictsToExportArea.php @@ -0,0 +1,86 @@ +whereNotIn('image_annotations.id', $this->getSkipIds()); + } + + /** + * Should this report be restricted to the export area? + * + * @return bool + */ + protected function isRestrictedToExportArea() + { + return $this->options->get('exportArea', false); + } + + /** + * Returns the annotation IDs to skip as outside of the volume export area. + * + * We collect the IDs to skip rather than the IDs to include since there are probably + * fewer annotations outside of the export area. + * + * @return array Annotation IDs + */ + protected function getSkipIds() + { + $skip = []; + $exportArea = Volume::convert($this->source)->exportArea; + + if (!$exportArea) { + // take all annotations if no export area is specified + return $skip; + } + + $exportArea = [ + // min x + min($exportArea[0], $exportArea[2]), + // min y + min($exportArea[1], $exportArea[3]), + // max x + max($exportArea[0], $exportArea[2]), + // max y + max($exportArea[1], $exportArea[3]), + ]; + + $processAnnotation = function ($annotation) use ($exportArea, &$skip) { + $points = json_decode($annotation->points); + $size = sizeof($points); + // Works for circles with 3 elements in $points, too! + for ($x = 0, $y = 1; $y < $size; $x += 2, $y += 2) { + if ($points[$x] >= $exportArea[0] && + $points[$x] <= $exportArea[2] && + $points[$y] >= $exportArea[1] && + $points[$y] <= $exportArea[3]) { + // As long as one point of the annotation is inside the + // area, don't skip it. + return; + } + } + + $skip[] = $annotation->id; + }; + + DB::table('image_annotations') + ->join('images', 'image_annotations.image_id', '=', 'images.id') + ->where('images.volume_id', $this->source->id) + ->select('image_annotations.id as id', 'image_annotations.points') + ->eachById($processAnnotation, 500, 'image_annotations.id', 'id'); + + return $skip; + } +} diff --git a/src/Traits/RestrictsToNewestLabels.php b/src/Traits/RestrictsToNewestLabels.php new file mode 100644 index 000000000..20d221667 --- /dev/null +++ b/src/Traits/RestrictsToNewestLabels.php @@ -0,0 +1,33 @@ +whereIn("{$table}.id", function ($query) use ($table) { + return $query->selectRaw('distinct on (annotation_id) id') + ->from($table) + ->orderBy('annotation_id', 'desc') + ->orderBy('id', 'desc') + ->orderBy('created_at', 'desc'); + }); + } +} diff --git a/src/database/migrations/2022_04_07_111600_set_ifdo_report_types.php b/src/database/migrations/2022_04_07_111600_set_ifdo_report_types.php new file mode 100644 index 000000000..f0b37c41e --- /dev/null +++ b/src/database/migrations/2022_04_07_111600_set_ifdo_report_types.php @@ -0,0 +1,39 @@ +where('name', 'ImageIfdo') + ->update(['name' => 'Ifdo\ImageIfdo']); + + DB::table('report_types')->insert([ + ['name' => 'Ifdo\VideoIfdo'], + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + DB::table('report_types') + ->where('name', 'Ifdo\VideoIfdo') + ->delete(); + + DB::table('report_types') + ->where('name', 'Ifdo\ImageIfdo') + ->update(['name' => 'ImageIfdo']); + } +}; diff --git a/tests/Support/Reports/Projects/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Projects/Ifdo/ImageIfdoReportGeneratorTest.php similarity index 90% rename from tests/Support/Reports/Projects/ImageIfdoReportGeneratorTest.php rename to tests/Support/Reports/Projects/Ifdo/ImageIfdoReportGeneratorTest.php index c184b9387..08c74afc3 100644 --- a/tests/Support/Reports/Projects/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/Ifdo/ImageIfdoReportGeneratorTest.php @@ -1,8 +1,8 @@ assertEquals('video iFDO report', $generator->getName()); + $this->assertEquals('video_ifdo_report', $generator->getFilename()); + } + + public function testProcessIfdoVolumesOnly() + { + $volume1 = VolumeTest::create(['media_type_id' => MediaType::videoId()]); + $disk = Storage::fake('ifdos'); + $disk->put($volume1->id, 'abc'); + + $volume2 = VolumeTest::create(['media_type_id' => MediaType::videoId()]); + + $project = ProjectTest::create(); + $project->addVolumeId($volume1->id); + $project->addVolumeId($volume2->id); + + $generator = new VideoIfdoReportGenerator; + $generator->setSource($project); + + $sources = $generator->getProjectSources(); + $this->assertCount(1, $sources); + $this->assertEquals($volume1->id, $sources[0]->id); + } + + public function testThrowIfNoIfdo() + { + $volume = VolumeTest::create(['media_type_id' => MediaType::videoId()]); + $project = ProjectTest::create(); + $project->addVolumeId($volume->id); + + $generator = new VideoIfdoReportGenerator; + $generator->setSource($project); + + $this->expectException(Exception::class); + $generator->getProjectSources(); + } +} diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/Ifdo/ImageIfdoReportGeneratorTest.php similarity index 99% rename from tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php rename to tests/Support/Reports/Volumes/Ifdo/ImageIfdoReportGeneratorTest.php index 3fa05f5ea..0ec500e84 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/Ifdo/ImageIfdoReportGeneratorTest.php @@ -1,10 +1,10 @@ Date: Thu, 7 Apr 2022 14:08:18 +0200 Subject: [PATCH 313/407] Implement restrict label options for video iFDO report --- .../Volumes/Ifdo/VideoIfdoReportGenerator.php | 21 +++++++----- .../Ifdo/ImageIfdoReportGeneratorTest.php | 31 +++++++++++++++-- .../Ifdo/VideoIfdoReportGeneratorTest.php | 33 ++++++++++++++++--- 3 files changed, 69 insertions(+), 16 deletions(-) diff --git a/src/Support/Reports/Volumes/Ifdo/VideoIfdoReportGenerator.php b/src/Support/Reports/Volumes/Ifdo/VideoIfdoReportGenerator.php index 911d87636..2dc2f1201 100644 --- a/src/Support/Reports/Volumes/Ifdo/VideoIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/Ifdo/VideoIfdoReportGenerator.php @@ -7,9 +7,12 @@ use Biigle\Shape; use Biigle\User; use Biigle\Video; +use Biigle\Modules\Reports\Traits\RestrictsToNewestLabels; class VideoIfdoReportGenerator extends IfdoReportGenerator { + use RestrictsToNewestLabels; + /** * Name of the report for use in text. * @@ -36,20 +39,20 @@ protected function query() return $query; }, 'annotations.labels' => function ($query) { - // if ($this->isRestrictedToNewestLabel()) { - // $query = $this->restrictToNewestLabelQuery($query, 'video_annotation_labels');; - // } + if ($this->isRestrictedToNewestLabel()) { + $query = $this->restrictToNewestLabelQuery($query, 'video_annotation_labels'); + } - // if ($this->isRestrictedToLabels()) { - // $query = $this->restrictToLabelsQuery($query, 'video_annotation_labels'); - // } + if ($this->isRestrictedToLabels()) { + $query = $this->restrictToLabelsQuery($query, 'video_annotation_labels'); + } return $query; }, 'labels' => function ($query) { - // if ($this->isRestrictedToLabels()) { - // return $query->whereIn('video_labels.label_id', $this->getOnlyLabels()); - // } + if ($this->isRestrictedToLabels()) { + return $query->whereIn('video_labels.label_id', $this->getOnlyLabels()); + } return $query; }, diff --git a/tests/Support/Reports/Volumes/Ifdo/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/Ifdo/ImageIfdoReportGeneratorTest.php index 0ec500e84..caa2c1360 100644 --- a/tests/Support/Reports/Volumes/Ifdo/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/Ifdo/ImageIfdoReportGeneratorTest.php @@ -669,12 +669,18 @@ public function testGenerateReportRestrictToLabels() 'annotation_id' => $a1->id, ]); + $il1 = ImageLabelTest::create([ + 'image_id' => $image1->id, + 'label_id' => $label->id, + 'user_id' => $user->id, + ]); + $image2 = ImageTest::create([ 'volume_id' => $volume->id, 'filename' => 'img2.jpg', ]); $a2 = ImageAnnotationTest::create([ - 'image_id' => $image1->id, + 'image_id' => $image2->id, 'shape_id' => Shape::pointId(), ]); $al2 = ImageAnnotationLabelTest::create([ @@ -683,6 +689,12 @@ public function testGenerateReportRestrictToLabels() 'annotation_id' => $a2->id, ]); + $il2 = ImageLabelTest::create([ + 'image_id' => $image2->id, + 'label_id' => $label2->id, + 'user_id' => $user->id, + ]); + $al2->annotation->image->volume_id = $volume->id; $al2->annotation->image->save(); @@ -714,19 +726,32 @@ public function testGenerateReportRestrictToLabels() ], 'image-set-items' => [ $image1->filename => [ - 'image-annotation-geometry-types' => ['single-pixel'], + 'image-annotation-geometry-types' => [ + 'single-pixel', + 'whole-image', + ], 'image-annotations' => [ [ 'coordinates' => $a1->points, 'labels' => [ [ - 'label' => $al->label_id, + 'label' => $label->id, 'annotator' => $user->uuid, 'confidence' => $al->confidence, 'created-at' => (string) $al->created_at, ], ], ], + [ + 'coordinates' => [], + 'labels' => [ + [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'created-at' => (string) $il1->created_at, + ], + ], + ], ], ], $image2->filename => [], diff --git a/tests/Support/Reports/Volumes/Ifdo/VideoIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/Ifdo/VideoIfdoReportGeneratorTest.php index 1b5f28504..3f104eed3 100644 --- a/tests/Support/Reports/Volumes/Ifdo/VideoIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/Ifdo/VideoIfdoReportGeneratorTest.php @@ -564,7 +564,7 @@ public function testGenerateReportRestrictNewestLabel() 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ - 'points' => [[150, 150]], + 'coordinates' => [[150, 150]], 'frames' => [100.0], 'labels' => [ [ @@ -605,12 +605,18 @@ public function testGenerateReportRestrictToLabels() 'annotation_id' => $a1->id, ]); + $vl1 = VideoLabelTest::create([ + 'video_id' => $video1->id, + 'label_id' => $label->id, + 'user_id' => $user->id, + ]); + $video2 = VideoTest::create([ 'volume_id' => $volume->id, 'filename' => 'img2.jpg', ]); $a2 = VideoAnnotationTest::create([ - 'video_id' => $video1->id, + 'video_id' => $video2->id, 'shape_id' => Shape::pointId(), ]); $al2 = VideoAnnotationLabelTest::create([ @@ -619,6 +625,12 @@ public function testGenerateReportRestrictToLabels() 'annotation_id' => $a2->id, ]); + $vl2 = VideoLabelTest::create([ + 'video_id' => $video2->id, + 'label_id' => $label2->id, + 'user_id' => $user->id, + ]); + $al2->annotation->video->volume_id = $volume->id; $al2->annotation->video->save(); @@ -650,20 +662,33 @@ public function testGenerateReportRestrictToLabels() ], 'image-set-items' => [ $video1->filename => [[ - 'image-annotation-geometry-types' => ['single-pixel'], + 'image-annotation-geometry-types' => [ + 'single-pixel', + 'whole-image', + ], 'image-annotations' => [ [ 'coordinates' => $a1->points, 'frames' => $a1->frames, 'labels' => [ [ - 'label' => $al->label_id, + 'label' => $label->id, 'annotator' => $user->uuid, 'confidence' => $al->confidence, 'created-at' => (string) $al->created_at, ], ], ], + [ + 'coordinates' => [], + 'labels' => [ + [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'created-at' => (string) $vl1->created_at, + ], + ], + ], ], ]], $video2->filename => [], From 5f66a390f611348e4ad82bcd2bdba4dfd1b7df15 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 7 Apr 2022 14:14:37 +0200 Subject: [PATCH 314/407] Implement video iFDO report type validation --- src/Http/Requests/StoreProjectReport.php | 10 +++++++- src/Http/Requests/StoreVolumeReport.php | 8 +++++- .../Projects/ProjectReportControllerTest.php | 25 +++++++++++++++++++ .../Volumes/VolumeReportControllerTest.php | 23 +++++++++++++++++ 4 files changed, 64 insertions(+), 2 deletions(-) diff --git a/src/Http/Requests/StoreProjectReport.php b/src/Http/Requests/StoreProjectReport.php index 3a8fae18c..c5263b224 100644 --- a/src/Http/Requests/StoreProjectReport.php +++ b/src/Http/Requests/StoreProjectReport.php @@ -77,11 +77,13 @@ protected function validateReportType($validator) ReportType::imageLabelsBasicId(), ReportType::imageLabelsCsvId(), ReportType::imageLabelsImageLocationId(), + ReportType::imageIfdoId(), ]; $videoReports = [ ReportType::videoAnnotationsCsvId(), ReportType::videoLabelsCsvId(), + ReportType::videoIfdoId(), ]; if ($this->isType($imageReports) && !$this->project->imageVolumes()->exists()) { @@ -157,7 +159,13 @@ protected function validateImageMetadata($validator) protected function validateIfdos($validator) { if ($this->isType(ReportType::imageIfdoId())) { - foreach ($this->project->volumes as $volume) { + $volumes = $this->project->imageVolumes; + } elseif ($this->isType(ReportType::videoIfdoId())) { + $volumes = $this->project->videoVolumes; + } + + if (isset($volumes)) { + foreach ($volumes as $volume) { if ($volume->hasIfdo()) { return; } diff --git a/src/Http/Requests/StoreVolumeReport.php b/src/Http/Requests/StoreVolumeReport.php index c69629c55..c205ec20d 100644 --- a/src/Http/Requests/StoreVolumeReport.php +++ b/src/Http/Requests/StoreVolumeReport.php @@ -53,6 +53,7 @@ public function rules() $types = [ ReportType::videoAnnotationsCsvId(), ReportType::videoLabelsCsvId(), + ReportType::videoIfdoId(), ]; } @@ -103,7 +104,12 @@ public function withValidator($validator) } } - if ($this->isType(ReportType::imageIfdoId()) && !$this->volume->hasIfdo()) { + $ifdoTypes = [ + ReportType::imageIfdoId(), + ReportType::videoIfdoId(), + ]; + + if ($this->isType($ifdoTypes) && !$this->volume->hasIfdo()) { $validator->errors()->add('id', 'The volume has no attached iFDO file.'); } }); diff --git a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php index 3af55d83a..aae65b2d4 100644 --- a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php @@ -89,6 +89,7 @@ public function testStoreNoVideoVolumes() $types = [ ReportType::videoAnnotationsCsvId(), ReportType::videoLabelsCsvId(), + ReportType::videoIfdoId(), ]; $this->beGuest(); @@ -293,4 +294,28 @@ public function testStoreImageIfdo() ]) ->assertStatus(201); } + + public function testStoreVideoIfdo() + { + $projectId = $this->project()->id; + // Create volume. + $this->volume(['media_type_id' => MediaType::videoId()]); + $typeId = ReportType::videoIfdoId(); + + $this->beGuest(); + + $this->postJson("api/v1/projects/{$projectId}/reports", [ + 'type_id' => $typeId, + ]) + ->assertStatus(422); + + $disk = Storage::fake('ifdos'); + $disk->put($this->volume()->id, 'abc'); + + $this->expectsJobs(GenerateReportJob::class); + $this->postJson("api/v1/projects/{$projectId}/reports", [ + 'type_id' => $typeId, + ]) + ->assertStatus(201); + } } diff --git a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php index a96cd940f..774a8abc8 100644 --- a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php +++ b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php @@ -143,6 +143,7 @@ public function testStoreVideoVolumeTypes() $types = [ ReportType::videoAnnotationsCsvId(), ReportType::videoLabelsCsvId(), + // videoIfdo is tested below ]; $this->beGuest(); @@ -332,4 +333,26 @@ public function testStoreImageIfdo() ]) ->assertStatus(201); } + + public function testStoreVideoIfdo() + { + $volumeId = $this->volume(['media_type_id' => MediaType::videoId()])->id; + $typeId = ReportType::videoIfdoId(); + + $this->beGuest(); + + $this->postJson("api/v1/volumes/{$volumeId}/reports", [ + 'type_id' => $typeId, + ]) + ->assertStatus(422); + + $disk = Storage::fake('ifdos'); + $disk->put($volumeId, 'abc'); + + $this->expectsJobs(GenerateReportJob::class); + $this->postJson("api/v1/volumes/{$volumeId}/reports", [ + 'type_id' => $typeId, + ]) + ->assertStatus(201); + } } From 939821425be6ed292d7cc2e131de0f4e26bbc4d4 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 7 Apr 2022 14:33:00 +0200 Subject: [PATCH 315/407] Fix namespace of iFDO report generators The namespace should start either with "Image" or "Video". --- src/ReportType.php | 8 ++++---- .../{Ifdo => }/ImageIfdoReportGenerator.php | 3 +-- .../{Ifdo => }/VideoIfdoReportGenerator.php | 3 +-- .../Volumes/{Ifdo => }/IfdoReportGenerator.php | 3 +-- .../Volumes/{Ifdo => }/ImageIfdoReportGenerator.php | 2 +- .../Volumes/{Ifdo => }/VideoIfdoReportGenerator.php | 2 +- ...022_04_07_111600_add_video_ifdo_report_type.php} | 13 ++----------- .../{Ifdo => }/ImageIfdoReportGeneratorTest.php | 4 ++-- .../{Ifdo => }/VideoIfdoReportGeneratorTest.php | 4 ++-- .../{Ifdo => }/ImageIfdoReportGeneratorTest.php | 4 ++-- .../{Ifdo => }/VideoIfdoReportGeneratorTest.php | 4 ++-- 11 files changed, 19 insertions(+), 31 deletions(-) rename src/Support/Reports/Projects/{Ifdo => }/ImageIfdoReportGenerator.php (88%) rename src/Support/Reports/Projects/{Ifdo => }/VideoIfdoReportGenerator.php (88%) rename src/Support/Reports/Volumes/{Ifdo => }/IfdoReportGenerator.php (98%) rename src/Support/Reports/Volumes/{Ifdo => }/ImageIfdoReportGenerator.php (99%) rename src/Support/Reports/Volumes/{Ifdo => }/VideoIfdoReportGenerator.php (99%) rename src/database/migrations/{2022_04_07_111600_set_ifdo_report_types.php => 2022_04_07_111600_add_video_ifdo_report_type.php} (55%) rename tests/Support/Reports/Projects/{Ifdo => }/ImageIfdoReportGeneratorTest.php (90%) rename tests/Support/Reports/Projects/{Ifdo => }/VideoIfdoReportGeneratorTest.php (90%) rename tests/Support/Reports/Volumes/{Ifdo => }/ImageIfdoReportGeneratorTest.php (99%) rename tests/Support/Reports/Volumes/{Ifdo => }/VideoIfdoReportGeneratorTest.php (99%) diff --git a/src/ReportType.php b/src/ReportType.php index c66b0a279..4f0cda362 100644 --- a/src/ReportType.php +++ b/src/ReportType.php @@ -17,21 +17,21 @@ class ReportType extends Model * @var array */ const INSTANCES = [ + 'imageAnnotationsAbundance' => 'ImageAnnotations\Abundance', + 'imageAnnotationsAnnotationLocation' => 'ImageAnnotations\AnnotationLocation', 'imageAnnotationsArea' => 'ImageAnnotations\Area', 'imageAnnotationsBasic' => 'ImageAnnotations\Basic', 'imageAnnotationsCsv' => 'ImageAnnotations\Csv', 'imageAnnotationsExtended' => 'ImageAnnotations\Extended', 'imageAnnotationsFull' => 'ImageAnnotations\Full', - 'imageAnnotationsAbundance' => 'ImageAnnotations\Abundance', 'imageAnnotationsImageLocation' => 'ImageAnnotations\ImageLocation', - 'imageAnnotationsAnnotationLocation' => 'ImageAnnotations\AnnotationLocation', + 'imageIfdo' => 'ImageIfdo', 'imageLabelsBasic' => 'ImageLabels\Basic', 'imageLabelsCsv' => 'ImageLabels\Csv', 'imageLabelsImageLocation' => 'ImageLabels\ImageLocation', 'videoAnnotationsCsv' => 'VideoAnnotations\Csv', + 'videoIfdo' => 'VideoIfdo', 'videoLabelsCsv' => 'VideoLabels\Csv', - 'imageIfdo' => 'Ifdo\ImageIfdo', - 'videoIfdo' => 'Ifdo\VideoIfdo', ]; /** diff --git a/src/Support/Reports/Projects/Ifdo/ImageIfdoReportGenerator.php b/src/Support/Reports/Projects/ImageIfdoReportGenerator.php similarity index 88% rename from src/Support/Reports/Projects/Ifdo/ImageIfdoReportGenerator.php rename to src/Support/Reports/Projects/ImageIfdoReportGenerator.php index 82ce8dc79..84354bff0 100644 --- a/src/Support/Reports/Projects/Ifdo/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Projects/ImageIfdoReportGenerator.php @@ -1,8 +1,7 @@ where('name', 'ImageIfdo') - ->update(['name' => 'Ifdo\ImageIfdo']); - DB::table('report_types')->insert([ - ['name' => 'Ifdo\VideoIfdo'], + ['name' => 'VideoIfdo'], ]); } @@ -29,11 +24,7 @@ public function up() public function down() { DB::table('report_types') - ->where('name', 'Ifdo\VideoIfdo') + ->where('name', 'VideoIfdo') ->delete(); - - DB::table('report_types') - ->where('name', 'Ifdo\ImageIfdo') - ->update(['name' => 'ImageIfdo']); } }; diff --git a/tests/Support/Reports/Projects/Ifdo/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Projects/ImageIfdoReportGeneratorTest.php similarity index 90% rename from tests/Support/Reports/Projects/Ifdo/ImageIfdoReportGeneratorTest.php rename to tests/Support/Reports/Projects/ImageIfdoReportGeneratorTest.php index 08c74afc3..c184b9387 100644 --- a/tests/Support/Reports/Projects/Ifdo/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/ImageIfdoReportGeneratorTest.php @@ -1,8 +1,8 @@ Date: Thu, 7 Apr 2022 14:53:14 +0200 Subject: [PATCH 316/407] Fix confidence and timestamps of iFDO reports --- .../Volumes/ImageIfdoReportGenerator.php | 4 +- .../Volumes/VideoIfdoReportGenerator.php | 7 +- .../Volumes/ImageIfdoReportGeneratorTest.php | 36 +++++------ .../Volumes/VideoIfdoReportGeneratorTest.php | 64 +++++++++---------- 4 files changed, 56 insertions(+), 55 deletions(-) diff --git a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php index f18130404..818df83b3 100644 --- a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php @@ -162,7 +162,7 @@ public function processFile(Image|Video $image) 'label' => $labelId, 'annotator' => $user->uuid, 'confidence' => $aLabel->confidence, - 'created-at' => (string) $aLabel->created_at, + 'created-at' => $aLabel->created_at->toJson(), ]; }); @@ -195,7 +195,7 @@ public function processFile(Image|Video $image) [ 'label' => $labelId, 'annotator' => $user->uuid, - 'created-at' => (string) $iLabel->created_at, + 'created-at' => $iLabel->created_at->toJson(), ], ], ]; diff --git a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php b/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php index b448aecbb..459916676 100644 --- a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php @@ -163,8 +163,9 @@ public function processFile(Image|Video $video) return [ 'label' => $labelId, 'annotator' => $user->uuid, - 'confidence' => $aLabel->confidence, - 'created-at' => (string) $aLabel->created_at, + // Video annotation labels have no confidence. + 'confidence' => 1.0, + 'created-at' => $aLabel->created_at->toJson(), ]; }); @@ -198,7 +199,7 @@ public function processFile(Image|Video $video) [ 'label' => $labelId, 'annotator' => $user->uuid, - 'created-at' => (string) $iLabel->created_at, + 'created-at' => $iLabel->created_at->toJson(), ], ], ]; diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php index 13546571f..c3d89731b 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -100,7 +100,7 @@ public function testGenerateReport() 'label' => $al->label_id, 'annotator' => $user->uuid, 'confidence' => $al->confidence, - 'created-at' => (string) $al->created_at, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -177,13 +177,13 @@ public function testGenerateReportMultiLabel() 'label' => $al->label_id, 'annotator' => $user->uuid, 'confidence' => $al->confidence, - 'created-at' => (string) $al->created_at, + 'created-at' => $al->created_at->toJson(), ], [ 'label' => $al2->label_id, 'annotator' => $user->uuid, 'confidence' => $al2->confidence, - 'created-at' => (string) $al->created_at, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -269,7 +269,7 @@ public function testGenerateReportImageLabels() [ 'label' => $il->label_id, 'annotator' => $user->uuid, - 'created-at' => (string) $il->created_at, + 'created-at' => $il->created_at->toJson(), ], ], ], @@ -397,7 +397,7 @@ public function testGenerateReportMergeImageSetItems() 'label' => $al->label_id, 'annotator' => $user->uuid, 'confidence' => $al->confidence, - 'created-at' => (string) $al->created_at, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -477,7 +477,7 @@ public function testGenerateReportMergeImageSetItemsArray() 'label' => $al->label_id, 'annotator' => $user->uuid, 'confidence' => $al->confidence, - 'created-at' => (string) $al->created_at, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -560,7 +560,7 @@ public function testGenerateReportRestrictToExportArea() 'label' => $al1->label_id, 'annotator' => $user->uuid, 'confidence' => $al1->confidence, - 'created-at' => (string) $al1->created_at, + 'created-at' => $al1->created_at->toJson(), ], ], ], @@ -635,7 +635,7 @@ public function testGenerateReportRestrictNewestLabel() 'label' => $al2->label_id, 'annotator' => $user->uuid, 'confidence' => $al2->confidence, - 'created-at' => (string) $al->created_at, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -738,7 +738,7 @@ public function testGenerateReportRestrictToLabels() 'label' => $label->id, 'annotator' => $user->uuid, 'confidence' => $al->confidence, - 'created-at' => (string) $al->created_at, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -748,7 +748,7 @@ public function testGenerateReportRestrictToLabels() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'created-at' => (string) $il1->created_at, + 'created-at' => $il1->created_at->toJson(), ], ], ], @@ -829,7 +829,7 @@ public function testGenerateReportLabelAphiaIdInfo() 'label' => 'urn:lsid:marinespecies.org:taxname:123999', 'annotator' => $user->uuid, 'confidence' => $al->confidence, - 'created-at' => (string) $al->created_at, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -937,7 +937,7 @@ public function testStripIfdo() 'label' => $al->label_id, 'annotator' => $user->uuid, 'confidence' => $al->confidence, - 'created-at' => (string) $al->created_at, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -1045,7 +1045,7 @@ public function testStripIfdoArray() 'label' => $al->label_id, 'annotator' => $user->uuid, 'confidence' => $al->confidence, - 'created-at' => (string) $al->created_at, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -1152,7 +1152,7 @@ public function testGeometryTypes() 'label' => $label->id, 'annotator' => $user->uuid, 'confidence' => $al1->confidence, - 'created-at' => (string) $al1->created_at, + 'created-at' => $al1->created_at->toJson(), ], ], ], @@ -1163,7 +1163,7 @@ public function testGeometryTypes() 'label' => $label->id, 'annotator' => $user->uuid, 'confidence' => $al2->confidence, - 'created-at' => (string) $al2->created_at, + 'created-at' => $al2->created_at->toJson(), ], ], ], @@ -1174,7 +1174,7 @@ public function testGeometryTypes() 'label' => $label->id, 'annotator' => $user->uuid, 'confidence' => $al3->confidence, - 'created-at' => (string) $al3->created_at, + 'created-at' => $al3->created_at->toJson(), ], ], ], @@ -1185,7 +1185,7 @@ public function testGeometryTypes() 'label' => $label->id, 'annotator' => $user->uuid, 'confidence' => $al4->confidence, - 'created-at' => (string) $al4->created_at, + 'created-at' => $al4->created_at->toJson(), ], ], ], @@ -1196,7 +1196,7 @@ public function testGeometryTypes() 'label' => $label->id, 'annotator' => $user->uuid, 'confidence' => $al5->confidence, - 'created-at' => (string) $al5->created_at, + 'created-at' => $al5->created_at->toJson(), ], ], ], diff --git a/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php index ae3db57da..404cf4ac1 100644 --- a/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php @@ -101,8 +101,8 @@ public function testGenerateReport() [ 'label' => $al->label_id, 'annotator' => $user->uuid, - 'confidence' => $al->confidence, - 'created-at' => (string) $al->created_at, + 'confidence' => 1.0, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -180,14 +180,14 @@ public function testGenerateReportMultiLabel() [ 'label' => $al->label_id, 'annotator' => $user->uuid, - 'confidence' => $al->confidence, - 'created-at' => (string) $al->created_at, + 'confidence' => 1.0, + 'created-at' => $al->created_at->toJson(), ], [ 'label' => $al2->label_id, 'annotator' => $user->uuid, - 'confidence' => $al2->confidence, - 'created-at' => (string) $al->created_at, + 'confidence' => 1.0, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -273,7 +273,7 @@ public function testGenerateReportVideoLabels() [ 'label' => $vl->label_id, 'annotator' => $user->uuid, - 'created-at' => (string) $vl->created_at, + 'created-at' => $vl->created_at->toJson(), ], ], ], @@ -402,8 +402,8 @@ public function testGenerateReportMergeImageSetItems() [ 'label' => $al->label_id, 'annotator' => $user->uuid, - 'confidence' => $al->confidence, - 'created-at' => (string) $al->created_at, + 'confidence' => 1.0, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -489,8 +489,8 @@ public function testGenerateReportMergeImageSetItemsMultiple() [ 'label' => $al->label_id, 'annotator' => $user->uuid, - 'confidence' => $al->confidence, - 'created-at' => (string) $al->created_at, + 'confidence' => 1.0, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -570,8 +570,8 @@ public function testGenerateReportRestrictNewestLabel() [ 'label' => $al2->label_id, 'annotator' => $user->uuid, - 'confidence' => $al2->confidence, - 'created-at' => (string) $al->created_at, + 'confidence' => 1.0, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -674,8 +674,8 @@ public function testGenerateReportRestrictToLabels() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => $al->confidence, - 'created-at' => (string) $al->created_at, + 'confidence' => 1.0, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -685,7 +685,7 @@ public function testGenerateReportRestrictToLabels() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'created-at' => (string) $vl1->created_at, + 'created-at' => $vl1->created_at->toJson(), ], ], ], @@ -767,8 +767,8 @@ public function testGenerateReportLabelAphiaIdInfo() [ 'label' => 'urn:lsid:marinespecies.org:taxname:123999', 'annotator' => $user->uuid, - 'confidence' => $al->confidence, - 'created-at' => (string) $al->created_at, + 'confidence' => 1.0, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -877,8 +877,8 @@ public function testStripIfdo() [ 'label' => $al->label_id, 'annotator' => $user->uuid, - 'confidence' => $al->confidence, - 'created-at' => (string) $al->created_at, + 'confidence' => 1.0, + 'created-at' => $al->created_at->toJson(), ], ], ], @@ -995,8 +995,8 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => $al1->confidence, - 'created-at' => (string) $al1->created_at, + 'confidence' => 1.0, + 'created-at' => $al1->created_at->toJson(), ], ], ], @@ -1007,8 +1007,8 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => $al2->confidence, - 'created-at' => (string) $al2->created_at, + 'confidence' => 1.0, + 'created-at' => $al2->created_at->toJson(), ], ], ], @@ -1019,8 +1019,8 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => $al3->confidence, - 'created-at' => (string) $al3->created_at, + 'confidence' => 1.0, + 'created-at' => $al3->created_at->toJson(), ], ], ], @@ -1031,8 +1031,8 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => $al4->confidence, - 'created-at' => (string) $al4->created_at, + 'confidence' => 1.0, + 'created-at' => $al4->created_at->toJson(), ], ], ], @@ -1043,8 +1043,8 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => $al5->confidence, - 'created-at' => (string) $al5->created_at, + 'confidence' => 1.0, + 'created-at' => $al5->created_at->toJson(), ], ], ], @@ -1055,8 +1055,8 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => $al6->confidence, - 'created-at' => (string) $al6->created_at, + 'confidence' => 1.0, + 'created-at' => $al6->created_at->toJson(), ], ], ], From d00b96ef60b6b2c3b6315417ff743aea9ec9dfb1 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 7 Apr 2022 14:53:37 +0200 Subject: [PATCH 317/407] Add UI for video iFDO reports --- src/public/assets/scripts/main.js | 2 +- src/public/mix-manifest.json | 2 +- src/resources/assets/js/reports/projectForm.vue | 5 +++++ src/resources/assets/js/reports/volumeForm.vue | 5 +++++ src/resources/views/partials/reportTypeInfo.blade.php | 3 +++ src/resources/views/projectReports.blade.php | 7 +++++++ src/resources/views/volumeReports.blade.php | 7 +++++++ 7 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/public/assets/scripts/main.js b/src/public/assets/scripts/main.js index 2426d0bc4..9becc543d 100644 --- a/src/public/assets/scripts/main.js +++ b/src/public/assets/scripts/main.js @@ -1 +1 @@ -(()=>{"use strict";var e,t={650:()=>{var e=biigle.$require("messages").handleErrorResponse,t=biigle.$require("labelTrees.components.labelTrees");function s(e,t,s,r,n,a,i,o){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=s,u._compiled=!0),r&&(u.functional=!0),a&&(u._scopeId="data-v-"+a),i?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),n&&n.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(i)},u._ssrRegister=l):n&&(l=o?function(){n.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:n),l)if(u.functional){u._injectStyles=l;var p=u.render;u.render=function(e,t){return l.call(t),p(e,t)}}else{var c=u.beforeCreate;u.beforeCreate=c?[].concat(c,l):[l]}return{exports:e,options:u}}const r=s({mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:t},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,separate_users:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var s=t.name.split("\\");e.hasOwnProperty(s[0])||(e[s[0]]=[]),s[1]&&e[s[0]].push(s[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.selectedVariant?this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]:this.availableReportTypes[this.selectedType]},availableVariants:function(){return this.variants[this.selectedType]},hasAvailableVariants:function(){return this.availableVariants.length>0},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(s){t[s]=e.options[s]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(t){422===t.status?t.data.hasOwnProperty("errors")?this.errors=t.data.errors:this.errors=t.data:e(t)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0]||"")},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasOption:function(e){return this.allowedOptions[this.selectedType].includes(e)},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))},"options.separate_label_trees":function(e){e&&(this.options.separate_users=!1)},"options.separate_users":function(e){e&&(this.options.separate_label_trees=!1)}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0];var e=biigle.$require("reports.labelTrees");e.forEach((function(e){e.labels.forEach((function(e){e.selected=!1}))})),this.labelTrees=e}},undefined,undefined,!1,null,null,null).exports,n=Vue.resource("/api/v1/projects{/id}/reports");const a=s({mixins:[r],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","only_labels"],ImageIfdo:["export_area","newest_label","only_labels","strip_ifdo"]}}},methods:{submit:function(){this.request(this.projectId,n)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},undefined,undefined,!1,null,null,null).exports,i=Vue.resource("/api/v1/volumes{/id}/reports");const o=s({mixins:[r],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"],ImageIfdo:["export_area","newest_label","only_labels","strip_ifdo"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,i)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},undefined,undefined,!1,null,null,null).exports;biigle.$mount("project-report-form",a),biigle.$mount("volume-report-form",o)},401:()=>{}},s={};function r(e){var n=s[e];if(void 0!==n)return n.exports;var a=s[e]={exports:{}};return t[e](a,a.exports,r),a.exports}r.m=t,e=[],r.O=(t,s,n,a)=>{if(!s){var i=1/0;for(p=0;p=a)&&Object.keys(r.O).every((e=>r.O[e](s[l])))?s.splice(l--,1):(o=!1,a0&&e[p-1][2]>a;p--)e[p]=e[p-1];e[p]=[s,n,a]},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={355:0,392:0};r.O.j=t=>0===e[t];var t=(t,s)=>{var n,a,[i,o,l]=s,u=0;if(i.some((t=>0!==e[t]))){for(n in o)r.o(o,n)&&(r.m[n]=o[n]);if(l)var p=l(r)}for(t&&t(s);ur(650)));var n=r.O(void 0,[392],(()=>r(401)));n=r.O(n)})(); \ No newline at end of file +(()=>{"use strict";var e,t={650:()=>{var e=biigle.$require("messages").handleErrorResponse,t=biigle.$require("labelTrees.components.labelTrees");function s(e,t,s,r,n,a,i,o){var l,u="function"==typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=s,u._compiled=!0),r&&(u.functional=!0),a&&(u._scopeId="data-v-"+a),i?(l=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),n&&n.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(i)},u._ssrRegister=l):n&&(l=o?function(){n.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:n),l)if(u.functional){u._injectStyles=l;var p=u.render;u.render=function(e,t){return l.call(t),p(e,t)}}else{var c=u.beforeCreate;u.beforeCreate=c?[].concat(c,l):[l]}return{exports:e,options:u}}const r=s({mixins:[biigle.$require("core.mixins.loader")],components:{labelTrees:t},data:function(){return{allowedOptions:{},selectedType:"",selectedVariant:"",reportTypes:[],labelTrees:[],hasOnlyLabels:!1,success:!1,errors:{},options:{export_area:!1,newest_label:!1,separate_label_trees:!1,separate_users:!1,only_labels:[],aggregate_child_labels:!1}}},computed:{flatLabels:function(){var e=[];return this.labelTrees.forEach((function(t){Array.prototype.push.apply(e,t.labels)})),e},selectedLabels:function(){return this.flatLabels.filter((function(e){return e.selected}))},selectedLabelsCount:function(){return this.selectedLabels.length},variants:function(){var e={};return this.reportTypes.forEach((function(t){var s=t.name.split("\\");e.hasOwnProperty(s[0])||(e[s[0]]=[]),s[1]&&e[s[0]].push(s[1])})),e},availableReportTypes:function(){var e={};return this.reportTypes.forEach((function(t){e[t.name]=t.id})),e},selectedReportTypeId:function(){return this.selectedVariant?this.availableReportTypes[this.selectedType+"\\"+this.selectedVariant]:this.availableReportTypes[this.selectedType]},availableVariants:function(){return this.variants[this.selectedType]},hasAvailableVariants:function(){return this.availableVariants.length>0},onlyOneAvailableVariant:function(){return 1===this.availableVariants.length},selectedOptions:function(){var e=this,t={};return this.allowedOptions[this.selectedType].forEach((function(s){t[s]=e.options[s]})),t.type_id=this.selectedReportTypeId,t}},methods:{request:function(e,t){this.loading||(this.success=!1,this.startLoading(),t.save({id:e},this.selectedOptions).then(this.submitted,this.handleError).finally(this.finishLoading))},submitted:function(){this.success=!0,this.errors={}},handleError:function(t){422===t.status?t.data.hasOwnProperty("errors")?this.errors=t.data.errors:this.errors=t.data:e(t)},selectType:function(e){this.selectedType=e,-1===this.availableVariants.indexOf(this.selectedVariant)&&(this.selectedVariant=this.availableVariants[0]||"")},wantsType:function(e){return this.selectedType===e},wantsVariant:function(e){return Array.isArray(e)?-1!==e.indexOf(this.selectedVariant):this.selectedVariant===e},hasOption:function(e){return this.allowedOptions[this.selectedType].includes(e)},hasError:function(e){return this.errors.hasOwnProperty(e)},getError:function(e){return this.errors[e]?this.errors[e].join(" "):""},wantsCombination:function(e,t){return this.wantsType(e)&&this.wantsVariant(t)}},watch:{selectedLabels:function(e){this.options.only_labels=e.map((function(e){return e.id}))},hasOnlyLabels:function(e){e||this.flatLabels.forEach((function(e){e.selected=!1}))},"options.separate_label_trees":function(e){e&&(this.options.separate_users=!1)},"options.separate_users":function(e){e&&(this.options.separate_label_trees=!1)}},created:function(){this.reportTypes=biigle.$require("reports.reportTypes"),this.selectedType=Object.keys(this.variants)[0],this.selectedVariant=this.availableVariants[0];var e=biigle.$require("reports.labelTrees");e.forEach((function(e){e.labels.forEach((function(e){e.selected=!1}))})),this.labelTrees=e}},undefined,undefined,!1,null,null,null).exports,n=Vue.resource("/api/v1/projects{/id}/reports");const a=s({mixins:[r],data:function(){return{projectId:null,allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","only_labels"],ImageIfdo:["export_area","newest_label","only_labels","strip_ifdo"],VideoIfdo:["newest_label","only_labels","strip_ifdo"]}}},methods:{submit:function(){this.request(this.projectId,n)}},created:function(){this.projectId=biigle.$require("reports.projectId")}},undefined,undefined,!1,null,null,null).exports,i=Vue.resource("/api/v1/volumes{/id}/reports");const o=s({mixins:[r],data:function(){return{allowedOptions:{ImageAnnotations:["export_area","newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels","aggregate_child_labels"],ImageLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoAnnotations:["newest_label","separate_label_trees","separate_users","annotation_session_id","only_labels"],VideoLabels:["separate_label_trees","separate_users","annotation_session_id","only_labels"],ImageIfdo:["export_area","newest_label","only_labels","strip_ifdo"],VideoIfdo:["newest_label","only_labels","strip_ifdo"]},options:{annotation_session_id:null}}},methods:{submit:function(){this.request(this.volumeId,i)}},created:function(){this.volumeId=biigle.$require("reports.volumeId")}},undefined,undefined,!1,null,null,null).exports;biigle.$mount("project-report-form",a),biigle.$mount("volume-report-form",o)},401:()=>{}},s={};function r(e){var n=s[e];if(void 0!==n)return n.exports;var a=s[e]={exports:{}};return t[e](a,a.exports,r),a.exports}r.m=t,e=[],r.O=(t,s,n,a)=>{if(!s){var i=1/0;for(p=0;p=a)&&Object.keys(r.O).every((e=>r.O[e](s[l])))?s.splice(l--,1):(o=!1,a0&&e[p-1][2]>a;p--)e[p]=e[p-1];e[p]=[s,n,a]},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={355:0,392:0};r.O.j=t=>0===e[t];var t=(t,s)=>{var n,a,[i,o,l]=s,u=0;if(i.some((t=>0!==e[t]))){for(n in o)r.o(o,n)&&(r.m[n]=o[n]);if(l)var p=l(r)}for(t&&t(s);ur(650)));var n=r.O(void 0,[392],(()=>r(401)));n=r.O(n)})(); \ No newline at end of file diff --git a/src/public/mix-manifest.json b/src/public/mix-manifest.json index 9a73e7e22..8b1edd658 100644 --- a/src/public/mix-manifest.json +++ b/src/public/mix-manifest.json @@ -1,5 +1,5 @@ { - "/assets/scripts/main.js": "/assets/scripts/main.js?id=cfe7b0ff3da1a7ec394b", + "/assets/scripts/main.js": "/assets/scripts/main.js?id=61568366e9dc6d75acdc", "/assets/scripts/annotations.js": "/assets/scripts/annotations.js?id=c650e7d96529d0585aff", "/assets/styles/main.css": "/assets/styles/main.css?id=08891fcd37d185b1157e" } diff --git a/src/resources/assets/js/reports/projectForm.vue b/src/resources/assets/js/reports/projectForm.vue index 2874b36dd..780b92c82 100644 --- a/src/resources/assets/js/reports/projectForm.vue +++ b/src/resources/assets/js/reports/projectForm.vue @@ -42,6 +42,11 @@ export default { 'only_labels', 'strip_ifdo', ], + 'VideoIfdo': [ + 'newest_label', + 'only_labels', + 'strip_ifdo', + ], }, }; }, diff --git a/src/resources/assets/js/reports/volumeForm.vue b/src/resources/assets/js/reports/volumeForm.vue index a28772203..5fd4bb0e4 100644 --- a/src/resources/assets/js/reports/volumeForm.vue +++ b/src/resources/assets/js/reports/volumeForm.vue @@ -44,6 +44,11 @@ export default { 'only_labels', 'strip_ifdo', ], + 'VideoIfdo': [ + 'newest_label', + 'only_labels', + 'strip_ifdo', + ], }, options: { annotation_session_id: null, diff --git a/src/resources/views/partials/reportTypeInfo.blade.php b/src/resources/views/partials/reportTypeInfo.blade.php index 0d2b16577..05ad49755 100644 --- a/src/resources/views/partials/reportTypeInfo.blade.php +++ b/src/resources/views/partials/reportTypeInfo.blade.php @@ -40,3 +40,6 @@
    The iFDO report returns the iFDO file that was attached to a volume with added information about annotations and image labels. See the iFDO specification for more information.
    +
    + The iFDO report returns the iFDO file that was attached to a volume with added information about annotations and video labels. See the iFDO specification for more information. +
    diff --git a/src/resources/views/projectReports.blade.php b/src/resources/views/projectReports.blade.php index f16960561..d0167f6c7 100644 --- a/src/resources/views/projectReports.blade.php +++ b/src/resources/views/projectReports.blade.php @@ -54,6 +54,13 @@
    +
    + @if ($hasIfdos) + + @else + + @endif +
    @endif
    diff --git a/src/resources/views/volumeReports.blade.php b/src/resources/views/volumeReports.blade.php index 6406dbd9e..30f8e5448 100644 --- a/src/resources/views/volumeReports.blade.php +++ b/src/resources/views/volumeReports.blade.php @@ -54,6 +54,13 @@
    +
    + @if ($volume->hasIfdo()) + + @else + + @endif +
    @endif
    From c52340d320ba123dfe3f54ddab3f4cb4461881c3 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 7 Apr 2022 14:56:50 +0200 Subject: [PATCH 318/407] Update manual article for video iFDO reports --- .../views/manual/tutorials/reports-schema.blade.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index c41ef378b..effe2b844 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -44,7 +44,7 @@ - Image iFDO reports + iFDO reports
    @@ -367,10 +367,10 @@
  • Label hierarchy (see the extended annotation report on how to interpret a label hierarchy)
  • -

    Image iFDO reports

    +

    iFDO reports

    - iFDO reports can be requested if an iFDO file has been uploaded for a volume. The iFDO report will be generated as the original file with additional information on the annotations and image labels that were created in BIIGLE. Optionally, annotations and image labels of the original file can be excluded from the report. + iFDO reports can be requested if an iFDO file has been uploaded for a volume. The iFDO report will be generated as the original file with additional information on the annotations and image/video labels that were created in BIIGLE. Optionally, annotations and image/video labels of the original file can be excluded from the report.

    @endsection From d2abc7248098fbcc8eefb3eaab8a93bc48396575 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 7 Apr 2022 15:17:08 +0200 Subject: [PATCH 319/407] Make ordering of annotations in iFDO reports consistent --- src/Support/Reports/Volumes/ImageIfdoReportGenerator.php | 3 +++ src/Support/Reports/Volumes/VideoIfdoReportGenerator.php | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php index 818df83b3..1522f3b69 100644 --- a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php @@ -37,6 +37,9 @@ protected function query() { $relations = [ 'annotations' => function ($query) { + // This makes the beavior more consistent in tests, too. + $query = $query->orderBy('image_annotations.id'); + if ($this->isRestrictedToExportArea()) { return $this->restrictToExportAreaQuery($query); } diff --git a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php b/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php index 459916676..2be212558 100644 --- a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php @@ -36,7 +36,8 @@ protected function query() { $relations = [ 'annotations' => function ($query) { - return $query; + // This makes the beavior more consistent in tests, too. + return $query->orderBy('video_annotations.id'); }, 'annotations.labels' => function ($query) { if ($this->isRestrictedToNewestLabel()) { From 178a2a265f5f82ceea8659ac16ae539b26efa36e Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Tue, 12 Apr 2022 13:12:20 +0200 Subject: [PATCH 320/407] Fix test --- tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php index c3d89731b..b5875671b 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -183,7 +183,7 @@ public function testGenerateReportMultiLabel() 'label' => $al2->label_id, 'annotator' => $user->uuid, 'confidence' => $al2->confidence, - 'created-at' => $al->created_at->toJson(), + 'created-at' => $al2->created_at->toJson(), ], ], ], From 26d1c9af654dad2bc46be0baa38e07cf0f4b5b57 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 14 Apr 2022 16:31:03 +0200 Subject: [PATCH 321/407] Store report files with their file extension This is necessary because recent versions of Flysystem throw an error if they cannot detect the MIME type (based on the extension fallback). --- .../Controllers/Api/ReportsController.php | 4 +- src/Report.php | 16 +++++++- .../AbundanceReportGenerator.php | 4 +- .../AnnotationLocationReportGenerator.php | 4 +- .../ImageAnnotations/AreaReportGenerator.php | 4 +- .../ImageAnnotations/BasicReportGenerator.php | 4 +- .../ImageAnnotations/CsvReportGenerator.php | 4 +- .../ExtendedReportGenerator.php | 4 +- .../ImageAnnotations/FullReportGenerator.php | 4 +- .../ImageLocationReportGenerator.php | 4 +- .../Projects/ImageIfdoReportGenerator.php | 4 +- .../ImageLabels/BasicReportGenerator.php | 4 +- .../ImageLabels/CsvReportGenerator.php | 4 +- .../ImageLocationReportGenerator.php | 4 +- .../Projects/ProjectReportGenerator.php | 2 +- .../VideoAnnotations/CsvReportGenerator.php | 4 +- .../Projects/VideoIfdoReportGenerator.php | 4 +- .../VideoLabels/CsvReportGenerator.php | 4 +- src/Support/Reports/ReportGenerator.php | 20 +++++----- .../Reports/Volumes/IfdoReportGenerator.php | 2 +- .../AbundanceReportGenerator.php | 6 +-- .../AnnotationLocationReportGenerator.php | 6 +-- .../ImageAnnotations/AreaReportGenerator.php | 6 +-- .../ImageAnnotations/BasicReportGenerator.php | 6 +-- .../ImageAnnotations/CsvReportGenerator.php | 6 +-- .../ExtendedReportGenerator.php | 6 +-- .../ImageAnnotations/FullReportGenerator.php | 6 +-- .../ImageLocationReportGenerator.php | 6 +-- .../Volumes/ImageIfdoReportGenerator.php | 4 +- .../ImageLabels/BasicReportGenerator.php | 6 +-- .../ImageLabels/CsvReportGenerator.php | 6 +-- .../ImageLocationReportGenerator.php | 6 +-- .../VideoAnnotations/CsvReportGenerator.php | 6 +-- .../Volumes/VideoIfdoReportGenerator.php | 4 +- .../VideoLabels/CsvReportGenerator.php | 6 +-- ...4_14_161000_add_report_file_extensions.php | 37 +++++++++++++++++++ .../Projects/ProjectReportControllerTest.php | 7 +++- .../Controllers/Api/ReportsControllerTest.php | 11 ++++-- .../Volumes/VolumeReportControllerTest.php | 7 +++- tests/ReportTest.php | 10 ++--- .../Projects/ImageIfdoReportGeneratorTest.php | 2 +- .../Projects/VideoIfdoReportGeneratorTest.php | 2 +- .../Volumes/ImageIfdoReportGeneratorTest.php | 2 +- .../Volumes/VideoIfdoReportGeneratorTest.php | 2 +- 44 files changed, 164 insertions(+), 106 deletions(-) create mode 100644 src/database/migrations/2022_04_14_161000_add_report_file_extensions.php diff --git a/src/Http/Controllers/Api/ReportsController.php b/src/Http/Controllers/Api/ReportsController.php index d00255a6a..19d875fb0 100644 --- a/src/Http/Controllers/Api/ReportsController.php +++ b/src/Http/Controllers/Api/ReportsController.php @@ -36,11 +36,11 @@ public function show($id) $disk = Storage::disk(config('reports.storage_disk')); - if (!$disk->exists($report->id)) { + if (!$disk->exists($report->getStorageFilename())) { abort(Response::HTTP_NOT_FOUND); } - return $disk->download($report->id, $report->filename); + return $disk->download($report->getStorageFilename(), $report->filename); } /** diff --git a/src/Report.php b/src/Report.php index 5961596e4..c849fba59 100644 --- a/src/Report.php +++ b/src/Report.php @@ -112,7 +112,7 @@ public function generate() $path = $this->getReportGenerator()->generate($this->source); try { Storage::disk(config('reports.storage_disk')) - ->putFileAs('', new SplFileInfo($path), $this->id); + ->putFileAs('', new SplFileInfo($path), $this->getStorageFilename()); } finally { File::delete($path); } @@ -165,7 +165,19 @@ public function getUrl() */ public function deleteFile() { - Storage::disk(config('reports.storage_disk'))->delete($this->id); + Storage::disk(config('reports.storage_disk'))->delete($this->getStorageFilename()); + } + + /** + * Get the filename of the report in storage (not the filename for download). + * + * @return string + */ + public function getStorageFilename() + { + $extension = $this->getReportGenerator()->extension; + + return $this->id.'.'.$extension; } /** diff --git a/src/Support/Reports/Projects/ImageAnnotations/AbundanceReportGenerator.php b/src/Support/Reports/Projects/ImageAnnotations/AbundanceReportGenerator.php index e1fe78aee..3aa45624a 100644 --- a/src/Support/Reports/Projects/ImageAnnotations/AbundanceReportGenerator.php +++ b/src/Support/Reports/Projects/ImageAnnotations/AbundanceReportGenerator.php @@ -18,12 +18,12 @@ class AbundanceReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'abundance image annotation report'; + public $name = 'abundance image annotation report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'abundance_image_annotation_report'; + public $filename = 'abundance_image_annotation_report'; } diff --git a/src/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGenerator.php b/src/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGenerator.php index 627a51479..5be8fee88 100644 --- a/src/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGenerator.php +++ b/src/Support/Reports/Projects/ImageAnnotations/AnnotationLocationReportGenerator.php @@ -19,14 +19,14 @@ class AnnotationLocationReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'annotation location image annotation report'; + public $name = 'annotation location image annotation report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'annotation_location_image_annotation_report'; + public $filename = 'annotation_location_image_annotation_report'; /** * Get sources for the sub-reports that should be generated for this project. diff --git a/src/Support/Reports/Projects/ImageAnnotations/AreaReportGenerator.php b/src/Support/Reports/Projects/ImageAnnotations/AreaReportGenerator.php index e50ec19b1..0c44cef0d 100644 --- a/src/Support/Reports/Projects/ImageAnnotations/AreaReportGenerator.php +++ b/src/Support/Reports/Projects/ImageAnnotations/AreaReportGenerator.php @@ -18,12 +18,12 @@ class AreaReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'image annotation area report'; + public $name = 'image annotation area report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'image_annotation_area_report'; + public $filename = 'image_annotation_area_report'; } diff --git a/src/Support/Reports/Projects/ImageAnnotations/BasicReportGenerator.php b/src/Support/Reports/Projects/ImageAnnotations/BasicReportGenerator.php index 6ef904489..d73857bed 100644 --- a/src/Support/Reports/Projects/ImageAnnotations/BasicReportGenerator.php +++ b/src/Support/Reports/Projects/ImageAnnotations/BasicReportGenerator.php @@ -18,12 +18,12 @@ class BasicReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'basic image annotation report'; + public $name = 'basic image annotation report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'basic_image_annotation_report'; + public $filename = 'basic_image_annotation_report'; } diff --git a/src/Support/Reports/Projects/ImageAnnotations/CsvReportGenerator.php b/src/Support/Reports/Projects/ImageAnnotations/CsvReportGenerator.php index 0c98d4d15..ee1bd09ca 100644 --- a/src/Support/Reports/Projects/ImageAnnotations/CsvReportGenerator.php +++ b/src/Support/Reports/Projects/ImageAnnotations/CsvReportGenerator.php @@ -18,12 +18,12 @@ class CsvReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'CSV image annotation report'; + public $name = 'CSV image annotation report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'csv_image_annotation_report'; + public $filename = 'csv_image_annotation_report'; } diff --git a/src/Support/Reports/Projects/ImageAnnotations/ExtendedReportGenerator.php b/src/Support/Reports/Projects/ImageAnnotations/ExtendedReportGenerator.php index 97d06302c..b71a8fbc0 100644 --- a/src/Support/Reports/Projects/ImageAnnotations/ExtendedReportGenerator.php +++ b/src/Support/Reports/Projects/ImageAnnotations/ExtendedReportGenerator.php @@ -18,12 +18,12 @@ class ExtendedReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'extended image annotation report'; + public $name = 'extended image annotation report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'extended_image_annotation_report'; + public $filename = 'extended_image_annotation_report'; } diff --git a/src/Support/Reports/Projects/ImageAnnotations/FullReportGenerator.php b/src/Support/Reports/Projects/ImageAnnotations/FullReportGenerator.php index d7ac8e944..0f92419ab 100644 --- a/src/Support/Reports/Projects/ImageAnnotations/FullReportGenerator.php +++ b/src/Support/Reports/Projects/ImageAnnotations/FullReportGenerator.php @@ -18,12 +18,12 @@ class FullReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'full image annotation report'; + public $name = 'full image annotation report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'full_image_annotation_report'; + public $filename = 'full_image_annotation_report'; } diff --git a/src/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGenerator.php b/src/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGenerator.php index d27d7ee37..1c06bea13 100644 --- a/src/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGenerator.php +++ b/src/Support/Reports/Projects/ImageAnnotations/ImageLocationReportGenerator.php @@ -19,14 +19,14 @@ class ImageLocationReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'image location image annotation report'; + public $name = 'image location image annotation report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'image_location_image_annotation_report'; + public $filename = 'image_location_image_annotation_report'; /** * Get sources for the sub-reports that should be generated for this project. diff --git a/src/Support/Reports/Projects/ImageIfdoReportGenerator.php b/src/Support/Reports/Projects/ImageIfdoReportGenerator.php index 84354bff0..4cb275de5 100644 --- a/src/Support/Reports/Projects/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Projects/ImageIfdoReportGenerator.php @@ -19,14 +19,14 @@ class ImageIfdoReportGenerator extends ProjectImageReportGenerator * * @var string */ - protected $name = 'image iFDO report'; + public $name = 'image iFDO report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'image_ifdo_report'; + public $filename = 'image_ifdo_report'; /** * Get sources for the sub-reports that should be generated for this project. diff --git a/src/Support/Reports/Projects/ImageLabels/BasicReportGenerator.php b/src/Support/Reports/Projects/ImageLabels/BasicReportGenerator.php index d1ab97a97..bfc832ce3 100644 --- a/src/Support/Reports/Projects/ImageLabels/BasicReportGenerator.php +++ b/src/Support/Reports/Projects/ImageLabels/BasicReportGenerator.php @@ -19,12 +19,12 @@ class BasicReportGenerator extends ProjectImageReportGenerator * * @var string */ - protected $name = 'basic image label report'; + public $name = 'basic image label report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'basic_image_label_report'; + public $filename = 'basic_image_label_report'; } diff --git a/src/Support/Reports/Projects/ImageLabels/CsvReportGenerator.php b/src/Support/Reports/Projects/ImageLabels/CsvReportGenerator.php index e161082b8..1a6e38acf 100644 --- a/src/Support/Reports/Projects/ImageLabels/CsvReportGenerator.php +++ b/src/Support/Reports/Projects/ImageLabels/CsvReportGenerator.php @@ -19,12 +19,12 @@ class CsvReportGenerator extends ProjectImageReportGenerator * * @var string */ - protected $name = 'CSV image label report'; + public $name = 'CSV image label report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'csv_image_label_report'; + public $filename = 'csv_image_label_report'; } diff --git a/src/Support/Reports/Projects/ImageLabels/ImageLocationReportGenerator.php b/src/Support/Reports/Projects/ImageLabels/ImageLocationReportGenerator.php index 63e72d067..616b269d0 100644 --- a/src/Support/Reports/Projects/ImageLabels/ImageLocationReportGenerator.php +++ b/src/Support/Reports/Projects/ImageLabels/ImageLocationReportGenerator.php @@ -20,14 +20,14 @@ class ImageLocationReportGenerator extends ProjectImageReportGenerator * * @var string */ - protected $name = 'image location image label report'; + public $name = 'image location image label report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'image_location_image_label_report'; + public $filename = 'image_location_image_label_report'; /** * Get sources for the sub-reports that should be generated for this project. diff --git a/src/Support/Reports/Projects/ProjectReportGenerator.php b/src/Support/Reports/Projects/ProjectReportGenerator.php index f2a5669ed..703094e65 100644 --- a/src/Support/Reports/Projects/ProjectReportGenerator.php +++ b/src/Support/Reports/Projects/ProjectReportGenerator.php @@ -21,7 +21,7 @@ abstract class ProjectReportGenerator extends ReportGenerator * * @var string */ - protected $extension = 'zip'; + public $extension = 'zip'; /** * Generate the report. diff --git a/src/Support/Reports/Projects/VideoAnnotations/CsvReportGenerator.php b/src/Support/Reports/Projects/VideoAnnotations/CsvReportGenerator.php index 17f1f1b87..5219415a7 100644 --- a/src/Support/Reports/Projects/VideoAnnotations/CsvReportGenerator.php +++ b/src/Support/Reports/Projects/VideoAnnotations/CsvReportGenerator.php @@ -20,14 +20,14 @@ class CsvReportGenerator extends ProjectVideoReportGenerator * * @var string */ - protected $name = 'CSV video annotation report'; + public $name = 'CSV video annotation report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'csv_video_annotation_report'; + public $filename = 'csv_video_annotation_report'; /** * Get the report name. diff --git a/src/Support/Reports/Projects/VideoIfdoReportGenerator.php b/src/Support/Reports/Projects/VideoIfdoReportGenerator.php index 479669033..8c25b03ac 100644 --- a/src/Support/Reports/Projects/VideoIfdoReportGenerator.php +++ b/src/Support/Reports/Projects/VideoIfdoReportGenerator.php @@ -19,14 +19,14 @@ class VideoIfdoReportGenerator extends ProjectVideoReportGenerator * * @var string */ - protected $name = 'video iFDO report'; + public $name = 'video iFDO report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'video_ifdo_report'; + public $filename = 'video_ifdo_report'; /** * Get sources for the sub-reports that should be generated for this project. diff --git a/src/Support/Reports/Projects/VideoLabels/CsvReportGenerator.php b/src/Support/Reports/Projects/VideoLabels/CsvReportGenerator.php index aa700466a..4bf10ffd3 100644 --- a/src/Support/Reports/Projects/VideoLabels/CsvReportGenerator.php +++ b/src/Support/Reports/Projects/VideoLabels/CsvReportGenerator.php @@ -19,12 +19,12 @@ class CsvReportGenerator extends ProjectVideoReportGenerator * * @var string */ - protected $name = 'CSV video label report'; + public $name = 'CSV video label report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'csv_video_label_report'; + public $filename = 'csv_video_label_report'; } diff --git a/src/Support/Reports/ReportGenerator.php b/src/Support/Reports/ReportGenerator.php index e8a7910e4..f8ff44605 100644 --- a/src/Support/Reports/ReportGenerator.php +++ b/src/Support/Reports/ReportGenerator.php @@ -21,33 +21,33 @@ class ReportGenerator */ public $options; - /** - * Source this report belongs to (e.g. a volume). - * - * @var mixed - */ - protected $source; - /** * Name of the report for use in text. * * @var string */ - protected $name; + public $name; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename; + public $filename; /** * File extension of the report file. * * @var string */ - protected $extension; + public $extension; + + /** + * Source this report belongs to (e.g. a volume). + * + * @var mixed + */ + protected $source; /** * Temporary files that are created when generating a report. diff --git a/src/Support/Reports/Volumes/IfdoReportGenerator.php b/src/Support/Reports/Volumes/IfdoReportGenerator.php index 25f5e1b64..028cf32a0 100644 --- a/src/Support/Reports/Volumes/IfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/IfdoReportGenerator.php @@ -16,7 +16,7 @@ abstract class IfdoReportGenerator extends VolumeReportGenerator * * @var string */ - protected $extension = 'yaml'; + public $extension = 'yaml'; /** * Labels that have been used in this volume. diff --git a/src/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGenerator.php index 43df47510..ad1e32a08 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/AbundanceReportGenerator.php @@ -15,21 +15,21 @@ class AbundanceReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'abundance image annotation report'; + public $name = 'abundance image annotation report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'abundance_image_annotation_report'; + public $filename = 'abundance_image_annotation_report'; /** * File extension of the report file. * * @var string */ - protected $extension = 'xlsx'; + public $extension = 'xlsx'; /** * Generate the report. diff --git a/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php index 7174b0759..e07b6469b 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/AnnotationLocationReportGenerator.php @@ -31,21 +31,21 @@ class AnnotationLocationReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'annotation location image annotation report'; + public $name = 'annotation location image annotation report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'annotation_location_image_annotation_report'; + public $filename = 'annotation_location_image_annotation_report'; /** * File extension of the report file. * * @var string */ - protected $extension = 'zip'; + public $extension = 'zip'; /** * Generate the report. diff --git a/src/Support/Reports/Volumes/ImageAnnotations/AreaReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/AreaReportGenerator.php index e7ef3c14f..a698f2df7 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/AreaReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/AreaReportGenerator.php @@ -18,21 +18,21 @@ class AreaReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'image annotation area report'; + public $name = 'image annotation area report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'image_annotation_area_report'; + public $filename = 'image_annotation_area_report'; /** * File extension of the report file. * * @var string */ - protected $extension = 'xlsx'; + public $extension = 'xlsx'; /** * All images that contain annotations which are included in this report. diff --git a/src/Support/Reports/Volumes/ImageAnnotations/BasicReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/BasicReportGenerator.php index cf88cf4f1..bdcda9123 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/BasicReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/BasicReportGenerator.php @@ -14,21 +14,21 @@ class BasicReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'basic image annotation report'; + public $name = 'basic image annotation report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'basic_image_annotation_report'; + public $filename = 'basic_image_annotation_report'; /** * File extension of the report file. * * @var string */ - protected $extension = 'pdf'; + public $extension = 'pdf'; /** * Generate the report. diff --git a/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php index 59e07b5b8..578ef9a06 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php @@ -17,21 +17,21 @@ class CsvReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'CSV image annotation report'; + public $name = 'CSV image annotation report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'csv_image_annotation_report'; + public $filename = 'csv_image_annotation_report'; /** * File extension of the report file. * * @var string */ - protected $extension = 'zip'; + public $extension = 'zip'; /** * Generate the report. diff --git a/src/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGenerator.php index fbfdb1e0c..878cbf609 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/ExtendedReportGenerator.php @@ -13,21 +13,21 @@ class ExtendedReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'extended image annotation report'; + public $name = 'extended image annotation report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'extended_image_annotation_report'; + public $filename = 'extended_image_annotation_report'; /** * File extension of the report file. * * @var string */ - protected $extension = 'xlsx'; + public $extension = 'xlsx'; /** * Generate the report. diff --git a/src/Support/Reports/Volumes/ImageAnnotations/FullReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/FullReportGenerator.php index 2543b4f38..c8a943153 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/FullReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/FullReportGenerator.php @@ -15,21 +15,21 @@ class FullReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'full image annotation report'; + public $name = 'full image annotation report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'full_image_annotation_report'; + public $filename = 'full_image_annotation_report'; /** * File extension of the report file. * * @var string */ - protected $extension = 'xlsx'; + public $extension = 'xlsx'; /** * Generate the report. diff --git a/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php index 27083436a..6d529cda2 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/ImageLocationReportGenerator.php @@ -21,21 +21,21 @@ class ImageLocationReportGenerator extends AnnotationReportGenerator * * @var string */ - protected $name = 'image location image annotation report'; + public $name = 'image location image annotation report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'image_location_image_annotation_report'; + public $filename = 'image_location_image_annotation_report'; /** * File extension of the report file. * * @var string */ - protected $extension = 'zip'; + public $extension = 'zip'; /** * Generate the report. diff --git a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php index 1522f3b69..8af435889 100644 --- a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php @@ -19,14 +19,14 @@ class ImageIfdoReportGenerator extends IfdoReportGenerator * * @var string */ - protected $name = 'image iFDO report'; + public $name = 'image iFDO report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'image_ifdo_report'; + public $filename = 'image_ifdo_report'; /** * Assemble a new DB query for the volume of this report. diff --git a/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php index 230a0d639..1b3abf2f8 100644 --- a/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/BasicReportGenerator.php @@ -15,21 +15,21 @@ class BasicReportGenerator extends VolumeReportGenerator * * @var string */ - protected $name = 'basic image label report'; + public $name = 'basic image label report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'basic_image_label_report'; + public $filename = 'basic_image_label_report'; /** * File extension of the report file. * * @var string */ - protected $extension = 'xlsx'; + public $extension = 'xlsx'; /** * Generate the report. diff --git a/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php index 54b7c0a37..3e83de353 100644 --- a/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php @@ -18,21 +18,21 @@ class CsvReportGenerator extends VolumeReportGenerator * * @var string */ - protected $name = 'CSV image label report'; + public $name = 'CSV image label report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'csv_image_label_report'; + public $filename = 'csv_image_label_report'; /** * File extension of the report file. * * @var string */ - protected $extension = 'zip'; + public $extension = 'zip'; /** * Generate the report. diff --git a/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php index 7d57c0438..35bfe3f45 100644 --- a/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/ImageLocationReportGenerator.php @@ -22,21 +22,21 @@ class ImageLocationReportGenerator extends VolumeReportGenerator * * @var string */ - protected $name = 'image location image label report'; + public $name = 'image location image label report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'image_location_image_label_report'; + public $filename = 'image_location_image_label_report'; /** * File extension of the report file. * * @var string */ - protected $extension = 'zip'; + public $extension = 'zip'; /** * Generate the report. diff --git a/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php b/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php index b73e58f03..de8c30bd5 100644 --- a/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php @@ -21,21 +21,21 @@ class CsvReportGenerator extends VolumeReportGenerator * * @var string */ - protected $name = 'CSV video annotation report'; + public $name = 'CSV video annotation report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'csv_video_annotation_report'; + public $filename = 'csv_video_annotation_report'; /** * File extension of the report file. * * @var string */ - protected $extension = 'zip'; + public $extension = 'zip'; /** * Get the report name. diff --git a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php b/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php index 2be212558..d96f9b36a 100644 --- a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php @@ -18,14 +18,14 @@ class VideoIfdoReportGenerator extends IfdoReportGenerator * * @var string */ - protected $name = 'video iFDO report'; + public $name = 'video iFDO report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'video_ifdo_report'; + public $filename = 'video_ifdo_report'; /** * Assemble a new DB query for the volume of this report. diff --git a/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php b/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php index 7d918d75f..e2576e2a9 100644 --- a/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php @@ -18,21 +18,21 @@ class CsvReportGenerator extends VolumeReportGenerator * * @var string */ - protected $name = 'CSV video label report'; + public $name = 'CSV video label report'; /** * Name of the report for use as (part of) a filename. * * @var string */ - protected $filename = 'csv_video_label_report'; + public $filename = 'csv_video_label_report'; /** * File extension of the report file. * * @var string */ - protected $extension = 'zip'; + public $extension = 'zip'; /** * Generate the report. diff --git a/src/database/migrations/2022_04_14_161000_add_report_file_extensions.php b/src/database/migrations/2022_04_14_161000_add_report_file_extensions.php new file mode 100644 index 000000000..69c1d40d2 --- /dev/null +++ b/src/database/migrations/2022_04_14_161000_add_report_file_extensions.php @@ -0,0 +1,37 @@ +getReportGenerator(); + $disk->move($report->id, $report->id.'.'.$generator->extension); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + $disk = Storage::disk(config('reports.storage_disk')); + + Report::eachById(function ($report) use ($disk) { + $generator = $report->getReportGenerator(); + $disk->move($report->id.'.'.$generator->extension, $report->id); + }); + } +}; diff --git a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php index aae65b2d4..c31e6607d 100644 --- a/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php +++ b/tests/Http/Controllers/Api/Projects/ProjectReportControllerTest.php @@ -8,6 +8,7 @@ use Biigle\Modules\Reports\ReportType; use Biigle\Tests\ImageTest; use Biigle\Tests\LabelTest; +use Cache; use Storage; class ProjectReportControllerTest extends ApiTestCase @@ -286,7 +287,8 @@ public function testStoreImageIfdo() ->assertStatus(422); $disk = Storage::fake('ifdos'); - $disk->put($this->volume()->id, 'abc'); + $disk->put($this->volume()->id.'.yaml', 'abc'); + Cache::flush(); $this->expectsJobs(GenerateReportJob::class); $this->postJson("api/v1/projects/{$projectId}/reports", [ @@ -310,7 +312,8 @@ public function testStoreVideoIfdo() ->assertStatus(422); $disk = Storage::fake('ifdos'); - $disk->put($this->volume()->id, 'abc'); + $disk->put($this->volume()->id.'.yaml', 'abc'); + Cache::flush(); $this->expectsJobs(GenerateReportJob::class); $this->postJson("api/v1/projects/{$projectId}/reports", [ diff --git a/tests/Http/Controllers/Api/ReportsControllerTest.php b/tests/Http/Controllers/Api/ReportsControllerTest.php index 3f3c24ebb..5158edec1 100644 --- a/tests/Http/Controllers/Api/ReportsControllerTest.php +++ b/tests/Http/Controllers/Api/ReportsControllerTest.php @@ -3,6 +3,7 @@ namespace Biigle\Tests\Modules\Reports\Http\Controllers\Api; use ApiTestCase; +use Biigle\Modules\Reports\ReportType; use Biigle\Tests\Modules\Reports\ReportTest; use Response; use Storage; @@ -11,8 +12,10 @@ class ReportsControllerTest extends ApiTestCase { public function testGet() { - config(['reports.storage_disk' => null]); - $report = ReportTest::create(); + config(['reports.storage_disk' => 'test']); + $report = ReportTest::create([ + 'type_id' => ReportType::imageAnnotationsCsvId(), + ]); $this->doTestApiRoute('GET', "api/v1/reports/{$report->id}"); @@ -24,8 +27,8 @@ public function testGet() $this->json('GET', "api/v1/reports/{$report->id}") ->assertStatus(404); - Storage::fake(); - Storage::disk()->put($report->id, 'content'); + $disk = Storage::fake('test'); + $disk->put($report->getStorageFilename(), 'content'); $this->json('GET', "api/v1/reports/{$report->id}") ->assertStatus(200); } diff --git a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php index 774a8abc8..3e7dcdb2f 100644 --- a/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php +++ b/tests/Http/Controllers/Api/Volumes/VolumeReportControllerTest.php @@ -8,6 +8,7 @@ use Biigle\Modules\Reports\ReportType; use Biigle\Tests\ImageTest; use Biigle\Tests\LabelTest; +use Cache; use Storage; class VolumeReportControllerTest extends ApiTestCase @@ -325,7 +326,8 @@ public function testStoreImageIfdo() ->assertStatus(422); $disk = Storage::fake('ifdos'); - $disk->put($volumeId, 'abc'); + $disk->put($volumeId.'.yaml', 'abc'); + Cache::flush(); $this->expectsJobs(GenerateReportJob::class); $this->postJson("api/v1/volumes/{$volumeId}/reports", [ @@ -347,7 +349,8 @@ public function testStoreVideoIfdo() ->assertStatus(422); $disk = Storage::fake('ifdos'); - $disk->put($volumeId, 'abc'); + $disk->put($volumeId.'.yaml', 'abc'); + Cache::flush(); $this->expectsJobs(GenerateReportJob::class); $this->postJson("api/v1/volumes/{$volumeId}/reports", [ diff --git a/tests/ReportTest.php b/tests/ReportTest.php index d274efc89..9be07722f 100644 --- a/tests/ReportTest.php +++ b/tests/ReportTest.php @@ -57,7 +57,7 @@ public function testGenerate() $this->model->setReportGenerator($mock); $this->model->generate(); - $this->assertTrue($disk->exists($this->model->id)); + $this->assertTrue($disk->exists($this->model->getStorageFilename())); $this->assertFalse($disk->exists('tmp.file')); } @@ -120,19 +120,19 @@ public function testObserveSelf() { config(['reports.storage_disk' => 'test']); Storage::fake('test'); - Storage::disk('test')->put($this->model->id, 'content'); + Storage::disk('test')->put($this->model->getStorageFilename(), 'content'); $this->model->delete(); - $this->assertFalse(Storage::disk('test')->exists($this->model->id)); + $this->assertFalse(Storage::disk('test')->exists($this->model->getStorageFilename())); } public function testObserveUser() { config(['reports.storage_disk' => 'test']); Storage::fake('test'); - Storage::disk('test')->put($this->model->id, 'content'); + Storage::disk('test')->put($this->model->getStorageFilename(), 'content'); $this->model->user->delete(); $this->assertNull($this->model->fresh()); - $this->assertFalse(Storage::disk('test')->exists($this->model->id)); + $this->assertFalse(Storage::disk('test')->exists($this->model->getStorageFilename())); } public function testDontObserveProjects() diff --git a/tests/Support/Reports/Projects/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Projects/ImageIfdoReportGeneratorTest.php index c184b9387..4c1ef8a9f 100644 --- a/tests/Support/Reports/Projects/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/ImageIfdoReportGeneratorTest.php @@ -22,7 +22,7 @@ public function testProcessIfdoVolumesOnly() { $volume1 = VolumeTest::create(); $disk = Storage::fake('ifdos'); - $disk->put($volume1->id, 'abc'); + $disk->put($volume1->id.'.yaml', 'abc'); $volume2 = VolumeTest::create(); diff --git a/tests/Support/Reports/Projects/VideoIfdoReportGeneratorTest.php b/tests/Support/Reports/Projects/VideoIfdoReportGeneratorTest.php index ce1f34213..55c59947a 100644 --- a/tests/Support/Reports/Projects/VideoIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Projects/VideoIfdoReportGeneratorTest.php @@ -23,7 +23,7 @@ public function testProcessIfdoVolumesOnly() { $volume1 = VolumeTest::create(['media_type_id' => MediaType::videoId()]); $disk = Storage::fake('ifdos'); - $disk->put($volume1->id, 'abc'); + $disk->put($volume1->id.'.yaml', 'abc'); $volume2 = VolumeTest::create(['media_type_id' => MediaType::videoId()]); diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php index b5875671b..559f293b5 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -41,7 +41,7 @@ protected function setUpIfdo($merge = []) $volume = VolumeTest::create(['name' => 'My Cool Volume']); $disk = Storage::fake('ifdos'); - $disk->put($volume->id, yaml_emit($ifdo)); + $disk->put($volume->id.'.yaml', yaml_emit($ifdo)); return [$volume, $ifdo]; } diff --git a/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php index 404cf4ac1..27907abb0 100644 --- a/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php @@ -41,7 +41,7 @@ protected function setUpIfdo($merge = []) $volume = VolumeTest::create(['name' => 'My Cool Volume']); $disk = Storage::fake('ifdos'); - $disk->put($volume->id, yaml_emit($ifdo)); + $disk->put($volume->id.'.yaml', yaml_emit($ifdo)); return [$volume, $ifdo]; } From 3dc9be105e4bc586d78ff93e315a418e0d1dff74 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 14 Apr 2022 16:42:27 +0200 Subject: [PATCH 322/407] Fix report file name migration --- ...22_04_14_161000_add_report_file_extensions.php | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/database/migrations/2022_04_14_161000_add_report_file_extensions.php b/src/database/migrations/2022_04_14_161000_add_report_file_extensions.php index 69c1d40d2..fb155d996 100644 --- a/src/database/migrations/2022_04_14_161000_add_report_file_extensions.php +++ b/src/database/migrations/2022_04_14_161000_add_report_file_extensions.php @@ -1,6 +1,7 @@ getReportGenerator(); @@ -27,7 +33,12 @@ public function up() */ public function down() { - $disk = Storage::disk(config('reports.storage_disk')); + try { + $disk = Storage::disk(config('reports.storage_disk')); + } catch (Exception $e) { + // Do not migrate if storage disk is not configured. + return; + } Report::eachById(function ($report) use ($disk) { $generator = $report->getReportGenerator(); From 44339926a38435b952bb53d0e92399bef0bc99a5 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 14 Apr 2022 16:45:14 +0200 Subject: [PATCH 323/407] Fix report file name migration again --- .../migrations/2022_04_14_161000_add_report_file_extensions.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/database/migrations/2022_04_14_161000_add_report_file_extensions.php b/src/database/migrations/2022_04_14_161000_add_report_file_extensions.php index fb155d996..7869f6c4f 100644 --- a/src/database/migrations/2022_04_14_161000_add_report_file_extensions.php +++ b/src/database/migrations/2022_04_14_161000_add_report_file_extensions.php @@ -1,7 +1,6 @@ Date: Wed, 20 Apr 2022 10:39:39 +0200 Subject: [PATCH 324/407] Fix error handling of migration --- ...2022_04_14_161000_add_report_file_extensions.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/database/migrations/2022_04_14_161000_add_report_file_extensions.php b/src/database/migrations/2022_04_14_161000_add_report_file_extensions.php index 7869f6c4f..73060fbaa 100644 --- a/src/database/migrations/2022_04_14_161000_add_report_file_extensions.php +++ b/src/database/migrations/2022_04_14_161000_add_report_file_extensions.php @@ -2,6 +2,7 @@ use Biigle\Modules\Reports\Report; use Illuminate\Database\Migrations\Migration; +use League\Flysystem\FilesystemOperationFailed; return new class extends Migration { @@ -21,7 +22,11 @@ public function up() Report::eachById(function ($report) use ($disk) { $generator = $report->getReportGenerator(); - $disk->move($report->id, $report->id.'.'.$generator->extension); + try { + $disk->move($report->id, $report->id.'.'.$generator->extension); + } catch (FilesystemOperationFailed $e) { + // ignore missing report files and continue + } }); } @@ -41,7 +46,11 @@ public function down() Report::eachById(function ($report) use ($disk) { $generator = $report->getReportGenerator(); - $disk->move($report->id.'.'.$generator->extension, $report->id); + try { + $disk->move($report->id.'.'.$generator->extension, $report->id); + } catch (FilesystemOperationFailed $e) { + // ignore missing report files and continue + } }); } }; From 3de0e72a25953688985f740e270ba93ab3524d70 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 22 Apr 2022 11:57:14 +0200 Subject: [PATCH 325/407] Update annotation type in iFDO reports References https://gitlab.hzdr.de/datahub/marehub/ag-videosimages/fair-marine-images/-/issues/11 --- .../Reports/Volumes/IfdoReportGenerator.php | 28 +++++++++ .../Volumes/ImageIfdoReportGenerator.php | 25 +------- .../Volumes/VideoIfdoReportGenerator.php | 28 +-------- .../Volumes/ImageIfdoReportGeneratorTest.php | 61 +++++++++++++------ .../Volumes/VideoIfdoReportGeneratorTest.php | 57 ++++++++++++----- 5 files changed, 117 insertions(+), 82 deletions(-) diff --git a/src/Support/Reports/Volumes/IfdoReportGenerator.php b/src/Support/Reports/Volumes/IfdoReportGenerator.php index 028cf32a0..32b4a0795 100644 --- a/src/Support/Reports/Volumes/IfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/IfdoReportGenerator.php @@ -2,9 +2,11 @@ namespace Biigle\Modules\Reports\Support\Reports\Volumes; +use Biigle\Annotation; use Biigle\Image; use Biigle\Label; use Biigle\LabelSource; +use Biigle\Shape; use Biigle\Video; use DB; use Exception; @@ -263,4 +265,30 @@ protected function mergeImageSetItem($key, &$ifdoItems) $ifdoItems[$key] = $this->imageSetItems[$key]; } } + + /** + * Get an iFDO geometry type string for an annotation. + * + * @param Annotation $annotation + * + * @return string + */ + protected function getGeometryType(Annotation $annotation) + { + if ($annotation->shape_id === Shape::pointId()) { + return 'single-pixel'; + } elseif ($annotation->shape_id === Shape::lineId()) { + return 'line-string'; + } elseif ($annotation->shape_id === Shape::circleId()) { + return 'circle'; + } elseif ($annotation->shape_id === Shape::rectangleId()) { + return 'rectangle'; + } elseif ($annotation->shape_id === Shape::ellipseId()) { + return 'ellipse'; + } elseif ($annotation->shape_id === Shape::wholeFrameId()) { + return 'whole-image'; + } else { + return 'polygon'; + } + } } diff --git a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php index 8af435889..422be3036 100644 --- a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php @@ -119,30 +119,12 @@ protected function getLabels() */ public function processFile(Image|Video $image) { - $geometryTypes = []; - // Remove annotations that should not be included because of an "onlyLabels" // filter. $annotations = $image->annotations->filter(function ($a) { return $a->labels->isNotEmpty(); }); - $geometryTypes = $annotations->map(function ($a) { - if ($a->shape_id === Shape::pointId()) { - return 'single-pixel'; - } elseif ($a->shape_id === Shape::circleId()) { - // Circles don't store the coordinates but could be converted to - // bounding boxes. - return 'bounding-box'; - } else { - // We treat ellipses as rectangles and rectangles as polygons. - // Also, line strings can only be represented as polygons in iFDO. - return 'polygon'; - } - }) - ->unique() - ->toArray(); - $annotations = $annotations->map(function ($annotation) { $labels = $annotation->labels->map(function ($aLabel) { $user = $this->users->get($aLabel->user_id); @@ -170,6 +152,7 @@ public function processFile(Image|Video $image) }); return [ + 'type' => $this->getGeometryType($annotation), 'coordinates' => $annotation->points, 'labels' => $labels->toArray(), ]; @@ -193,6 +176,7 @@ public function processFile(Image|Video $image) } return [ + 'type' => 'whole-image', 'coordinates' => [], 'labels' => [ [ @@ -204,10 +188,6 @@ public function processFile(Image|Video $image) ]; }); - if ($labels->isNotEmpty()) { - $geometryTypes[] = 'whole-image'; - } - $this->imageSetItems[$image->filename] = []; // Use toBase() because the merge method of Eloquent collections works @@ -216,7 +196,6 @@ public function processFile(Image|Video $image) if (!empty($imageAnnotations)) { $this->imageSetItems[$image->filename]['image-annotations'] = $imageAnnotations; - $this->imageSetItems[$image->filename]['image-annotation-geometry-types'] = $geometryTypes; } } } diff --git a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php b/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php index d96f9b36a..778d367a4 100644 --- a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php @@ -116,33 +116,12 @@ protected function getLabels() */ public function processFile(Image|Video $video) { - $geometryTypes = []; - // Remove annotations that should not be included because of an "onlyLabels" // filter. $annotations = $video->annotations->filter(function ($a) { return $a->labels->isNotEmpty(); }); - $geometryTypes = $annotations->map(function ($a) { - if ($a->shape_id === Shape::pointId()) { - return 'single-pixel'; - } elseif ($a->shape_id === Shape::circleId()) { - // Circles don't store the coordinates but could be converted to - // bounding boxes. - return 'bounding-box'; - } elseif ($a->shape_id === Shape::wholeFrameId()) { - return 'whole-image'; - } else { - // We treat ellipses as rectangles and rectangles as polygons. - // Also, line strings can only be represented as polygons in iFDO. - return 'polygon'; - } - }) - ->unique() - ->values() - ->toArray(); - $annotations = $annotations->map(function ($annotation) { $labels = $annotation->labels->map(function ($aLabel) { $user = $this->users->get($aLabel->user_id); @@ -171,6 +150,7 @@ public function processFile(Image|Video $video) }); return [ + 'type' => $this->getGeometryType($annotation), 'coordinates' => $annotation->points, 'frames' => $annotation->frames, 'labels' => $labels->toArray(), @@ -195,6 +175,7 @@ public function processFile(Image|Video $video) } return [ + 'type' => 'whole-image', 'coordinates' => [], 'labels' => [ [ @@ -206,10 +187,6 @@ public function processFile(Image|Video $video) ]; }); - if ($labels->isNotEmpty() && !in_array('whole-image', $geometryTypes)) { - $geometryTypes[] = 'whole-image'; - } - $this->imageSetItems[$video->filename] = []; // Use toBase() because the merge method of Eloquent collections works @@ -221,7 +198,6 @@ public function processFile(Image|Video $video) // However, we only fill the first array entry with this report. $this->imageSetItems[$video->filename][] = [ 'image-annotations' => $videoAnnotations, - 'image-annotation-geometry-types' => $geometryTypes, ]; } } diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php index 559f293b5..c53508ab5 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -91,9 +91,9 @@ public function testGenerateReport() ], 'image-set-items' => [ $al->annotation->image->filename => [ - 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => $al->annotation->points, 'labels' => [ [ @@ -168,9 +168,9 @@ public function testGenerateReportMultiLabel() ], 'image-set-items' => [ $al->annotation->image->filename => [ - 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => $al->annotation->points, 'labels' => [ [ @@ -261,9 +261,9 @@ public function testGenerateReportImageLabels() ], 'image-set-items' => [ $il->image->filename => [ - 'image-annotation-geometry-types' => ['whole-image'], 'image-annotations' => [ [ + 'type' => 'whole-image', 'coordinates' => [], 'labels' => [ [ @@ -307,9 +307,9 @@ public function testGenerateReportMergeImageSetItems() 'image-set-items' => [ $image->filename => [ 'image-area-square-meter' => 5.5, - 'image-annotation-geometry-types' => ['bounding-box'], 'image-annotations' => [ [ + 'type' => 'rectangle', 'coordinates' => [10, 20, 20, 30, 30, 20, 20, 10], 'labels' => [ [ @@ -377,9 +377,9 @@ public function testGenerateReportMergeImageSetItems() 'image-set-items' => [ $al->annotation->image->filename => [ 'image-area-square-meter' => 5.5, - 'image-annotation-geometry-types' => ['bounding-box', 'single-pixel'], 'image-annotations' => [ [ + 'type' => 'rectangle', 'coordinates' => [10, 20, 20, 30, 30, 20, 20, 10], 'labels' => [ [ @@ -391,6 +391,7 @@ public function testGenerateReportMergeImageSetItems() ], ], [ + 'type' => 'single-pixel', 'coordinates' => $al->annotation->points, 'labels' => [ [ @@ -468,9 +469,9 @@ public function testGenerateReportMergeImageSetItemsArray() 'image-set-items' => [ $al->annotation->image->filename => [[ 'image-area-square-meter' => 5.5, - 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => $al->annotation->points, 'labels' => [ [ @@ -551,9 +552,9 @@ public function testGenerateReportRestrictToExportArea() ], 'image-set-items' => [ $image->filename => [ - 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => $a1->points, 'labels' => [ [ @@ -626,9 +627,9 @@ public function testGenerateReportRestrictNewestLabel() ], 'image-set-items' => [ $al->annotation->image->filename => [ - 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => $al->annotation->points, 'labels' => [ [ @@ -726,12 +727,9 @@ public function testGenerateReportRestrictToLabels() ], 'image-set-items' => [ $image1->filename => [ - 'image-annotation-geometry-types' => [ - 'single-pixel', - 'whole-image', - ], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => $a1->points, 'labels' => [ [ @@ -743,6 +741,7 @@ public function testGenerateReportRestrictToLabels() ], ], [ + 'type' => 'whole-image', 'coordinates' => [], 'labels' => [ [ @@ -820,9 +819,9 @@ public function testGenerateReportLabelAphiaIdInfo() ], 'image-set-items' => [ $al->annotation->image->filename => [ - 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => $al->annotation->points, 'labels' => [ [ @@ -866,9 +865,9 @@ public function testStripIfdo() ], 'image-set-items' => [ $image->filename => [ - 'image-annotation-geometry-types' => ['bounding-box'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => [10, 20], 'labels' => [ [ @@ -928,9 +927,9 @@ public function testStripIfdo() ], 'image-set-items' => [ $al->annotation->image->filename => [ - 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => $al->annotation->points, 'labels' => [ [ @@ -974,9 +973,9 @@ public function testStripIfdoArray() ], 'image-set-items' => [ $image->filename => [[ - 'image-annotation-geometry-types' => ['bounding-box'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => [10, 20], 'labels' => [ [ @@ -1036,9 +1035,9 @@ public function testStripIfdoArray() ], 'image-set-items' => [ $al->annotation->image->filename => [[ - 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => $al->annotation->points, 'labels' => [ [ @@ -1117,6 +1116,16 @@ public function testGeometryTypes() 'annotation_id' => $a5->id, ]); + $a6 = ImageAnnotationTest::create([ + 'image_id' => $image->id, + 'shape_id' => Shape::lineId(), + ]); + $al6 = ImageAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a6->id, + ]); + $generator = new ImageIfdoReportGeneratorStub; $generator->setSource($volume); $generator->generateReport('my/path'); @@ -1143,9 +1152,9 @@ public function testGeometryTypes() ], 'image-set-items' => [ $image->filename => [ - 'image-annotation-geometry-types' => ['single-pixel', 'polygon', 'bounding-box'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => $a1->points, 'labels' => [ [ @@ -1157,6 +1166,7 @@ public function testGeometryTypes() ], ], [ + 'type' => 'rectangle', 'coordinates' => $a2->points, 'labels' => [ [ @@ -1168,6 +1178,7 @@ public function testGeometryTypes() ], ], [ + 'type' => 'circle', 'coordinates' => $a3->points, 'labels' => [ [ @@ -1179,6 +1190,7 @@ public function testGeometryTypes() ], ], [ + 'type' => 'ellipse', 'coordinates' => $a4->points, 'labels' => [ [ @@ -1190,6 +1202,7 @@ public function testGeometryTypes() ], ], [ + 'type' => 'polygon', 'coordinates' => $a5->points, 'labels' => [ [ @@ -1200,6 +1213,18 @@ public function testGeometryTypes() ], ], ], + [ + 'type' => 'line-string', + 'coordinates' => $a6->points, + 'labels' => [ + [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'confidence' => $al6->confidence, + 'created-at' => $al6->created_at->toJson(), + ], + ], + ], ], ], ], diff --git a/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php index 27907abb0..fb913d379 100644 --- a/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php @@ -92,9 +92,9 @@ public function testGenerateReport() ], 'image-set-items' => [ $al->annotation->video->filename => [[ - 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => [[150, 150], [200, 200]], 'frames' => [100.0, 200.0], 'labels' => [ @@ -171,9 +171,9 @@ public function testGenerateReportMultiLabel() ], 'image-set-items' => [ $al->annotation->video->filename => [[ - 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => [[150, 150]], 'frames' => [100.0], 'labels' => [ @@ -265,9 +265,9 @@ public function testGenerateReportVideoLabels() ], 'image-set-items' => [ $vl->video->filename => [[ - 'image-annotation-geometry-types' => ['whole-image'], 'image-annotations' => [ [ + 'type' => 'whole-image', 'coordinates' => [], 'labels' => [ [ @@ -311,9 +311,9 @@ public function testGenerateReportMergeImageSetItems() 'image-set-items' => [ $video->filename => [[ 'image-area-square-meter' => 5.5, - 'image-annotation-geometry-types' => ['bounding-box'], 'image-annotations' => [ [ + 'type' => 'rectangle', 'coordinates' => [10, 20, 20, 30, 30, 20, 20, 10], 'labels' => [ [ @@ -382,9 +382,9 @@ public function testGenerateReportMergeImageSetItems() 'image-set-items' => [ $al->annotation->video->filename => [[ 'image-area-square-meter' => 5.5, - 'image-annotation-geometry-types' => ['bounding-box', 'single-pixel'], 'image-annotations' => [ [ + 'type' => 'rectangle', 'coordinates' => [10, 20, 20, 30, 30, 20, 20, 10], 'labels' => [ [ @@ -396,6 +396,7 @@ public function testGenerateReportMergeImageSetItems() ], ], [ + 'type' => 'single-pixel', 'coordinates' => [[150, 150]], 'frames' => [100.0], 'labels' => [ @@ -480,9 +481,9 @@ public function testGenerateReportMergeImageSetItemsMultiple() $al->annotation->video->filename => [ [ 'image-area-square-meter' => 5.5, - 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => [[150, 150]], 'frames' => [100.0], 'labels' => [ @@ -561,9 +562,9 @@ public function testGenerateReportRestrictNewestLabel() ], 'image-set-items' => [ $al->annotation->video->filename => [[ - 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => [[150, 150]], 'frames' => [100.0], 'labels' => [ @@ -662,12 +663,9 @@ public function testGenerateReportRestrictToLabels() ], 'image-set-items' => [ $video1->filename => [[ - 'image-annotation-geometry-types' => [ - 'single-pixel', - 'whole-image', - ], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => $a1->points, 'frames' => $a1->frames, 'labels' => [ @@ -680,6 +678,7 @@ public function testGenerateReportRestrictToLabels() ], ], [ + 'type' => 'whole-image', 'coordinates' => [], 'labels' => [ [ @@ -758,9 +757,9 @@ public function testGenerateReportLabelAphiaIdInfo() ], 'image-set-items' => [ $al->annotation->video->filename => [[ - 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => [[150, 150]], 'frames' => [100.0], 'labels' => [ @@ -805,9 +804,9 @@ public function testStripIfdo() ], 'image-set-items' => [ $video->filename => [[ - 'image-annotation-geometry-types' => ['bounding-box'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => [10, 20], 'labels' => [ [ @@ -868,9 +867,9 @@ public function testStripIfdo() ], 'image-set-items' => [ $al->annotation->video->filename => [[ - 'image-annotation-geometry-types' => ['single-pixel'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => [[150, 150]], 'frames' => [100.0], 'labels' => [ @@ -960,6 +959,16 @@ public function testGeometryTypes() 'annotation_id' => $a6->id, ]); + $a7 = VideoAnnotationTest::create([ + 'video_id' => $video->id, + 'shape_id' => Shape::lineId(), + ]); + $al7 = VideoAnnotationLabelTest::create([ + 'label_id' => $label->id, + 'user_id' => $user->id, + 'annotation_id' => $a7->id, + ]); + $generator = new VideoIfdoReportGeneratorStub; $generator->setSource($volume); $generator->generateReport('my/path'); @@ -986,9 +995,9 @@ public function testGeometryTypes() ], 'image-set-items' => [ $video->filename => [[ - 'image-annotation-geometry-types' => ['single-pixel', 'polygon', 'bounding-box', 'whole-image'], 'image-annotations' => [ [ + 'type' => 'single-pixel', 'coordinates' => $a1->points, 'frames' => $a1->frames, 'labels' => [ @@ -1001,6 +1010,7 @@ public function testGeometryTypes() ], ], [ + 'type' => 'rectangle', 'coordinates' => $a2->points, 'frames' => $a2->frames, 'labels' => [ @@ -1013,6 +1023,7 @@ public function testGeometryTypes() ], ], [ + 'type' => 'circle', 'coordinates' => $a3->points, 'frames' => $a3->frames, 'labels' => [ @@ -1025,6 +1036,7 @@ public function testGeometryTypes() ], ], [ + 'type' => 'ellipse', 'coordinates' => $a4->points, 'frames' => $a4->frames, 'labels' => [ @@ -1037,6 +1049,7 @@ public function testGeometryTypes() ], ], [ + 'type' => 'polygon', 'coordinates' => $a5->points, 'frames' => $a5->frames, 'labels' => [ @@ -1049,6 +1062,7 @@ public function testGeometryTypes() ], ], [ + 'type' => 'whole-image', 'coordinates' => $a6->points, 'frames' => $a6->frames, 'labels' => [ @@ -1060,6 +1074,19 @@ public function testGeometryTypes() ], ], ], + [ + 'type' => 'line-string', + 'coordinates' => $a7->points, + 'frames' => $a7->frames, + 'labels' => [ + [ + 'label' => $label->id, + 'annotator' => $user->uuid, + 'confidence' => 1.0, + 'created-at' => $al7->created_at->toJson(), + ], + ], + ], ], ]], ], From e42d1991a1c011434662d0e658936f23c8a58868 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 25 Apr 2022 10:50:45 +0200 Subject: [PATCH 326/407] Update iFDO shape definition --- .../Reports/Volumes/IfdoReportGenerator.php | 6 +-- .../Volumes/ImageIfdoReportGenerator.php | 4 +- .../Volumes/VideoIfdoReportGenerator.php | 4 +- .../Volumes/ImageIfdoReportGeneratorTest.php | 44 +++++++++---------- .../Volumes/VideoIfdoReportGeneratorTest.php | 40 ++++++++--------- 5 files changed, 49 insertions(+), 49 deletions(-) diff --git a/src/Support/Reports/Volumes/IfdoReportGenerator.php b/src/Support/Reports/Volumes/IfdoReportGenerator.php index 32b4a0795..385109bed 100644 --- a/src/Support/Reports/Volumes/IfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/IfdoReportGenerator.php @@ -267,18 +267,18 @@ protected function mergeImageSetItem($key, &$ifdoItems) } /** - * Get an iFDO geometry type string for an annotation. + * Get an iFDO geometry name string for an annotation. * * @param Annotation $annotation * * @return string */ - protected function getGeometryType(Annotation $annotation) + protected function getGeometryName(Annotation $annotation) { if ($annotation->shape_id === Shape::pointId()) { return 'single-pixel'; } elseif ($annotation->shape_id === Shape::lineId()) { - return 'line-string'; + return 'polyline'; } elseif ($annotation->shape_id === Shape::circleId()) { return 'circle'; } elseif ($annotation->shape_id === Shape::rectangleId()) { diff --git a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php index 422be3036..8f203ceb4 100644 --- a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php @@ -152,7 +152,7 @@ public function processFile(Image|Video $image) }); return [ - 'type' => $this->getGeometryType($annotation), + 'shape' => $this->getGeometryName($annotation), 'coordinates' => $annotation->points, 'labels' => $labels->toArray(), ]; @@ -176,7 +176,7 @@ public function processFile(Image|Video $image) } return [ - 'type' => 'whole-image', + 'shape' => 'whole-image', 'coordinates' => [], 'labels' => [ [ diff --git a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php b/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php index 778d367a4..9ee7898e4 100644 --- a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php @@ -150,7 +150,7 @@ public function processFile(Image|Video $video) }); return [ - 'type' => $this->getGeometryType($annotation), + 'shape' => $this->getGeometryName($annotation), 'coordinates' => $annotation->points, 'frames' => $annotation->frames, 'labels' => $labels->toArray(), @@ -175,7 +175,7 @@ public function processFile(Image|Video $video) } return [ - 'type' => 'whole-image', + 'shape' => 'whole-image', 'coordinates' => [], 'labels' => [ [ diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php index c53508ab5..aa0748419 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -93,7 +93,7 @@ public function testGenerateReport() $al->annotation->image->filename => [ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => $al->annotation->points, 'labels' => [ [ @@ -170,7 +170,7 @@ public function testGenerateReportMultiLabel() $al->annotation->image->filename => [ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => $al->annotation->points, 'labels' => [ [ @@ -263,7 +263,7 @@ public function testGenerateReportImageLabels() $il->image->filename => [ 'image-annotations' => [ [ - 'type' => 'whole-image', + 'shape' => 'whole-image', 'coordinates' => [], 'labels' => [ [ @@ -309,7 +309,7 @@ public function testGenerateReportMergeImageSetItems() 'image-area-square-meter' => 5.5, 'image-annotations' => [ [ - 'type' => 'rectangle', + 'shape' => 'rectangle', 'coordinates' => [10, 20, 20, 30, 30, 20, 20, 10], 'labels' => [ [ @@ -379,7 +379,7 @@ public function testGenerateReportMergeImageSetItems() 'image-area-square-meter' => 5.5, 'image-annotations' => [ [ - 'type' => 'rectangle', + 'shape' => 'rectangle', 'coordinates' => [10, 20, 20, 30, 30, 20, 20, 10], 'labels' => [ [ @@ -391,7 +391,7 @@ public function testGenerateReportMergeImageSetItems() ], ], [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => $al->annotation->points, 'labels' => [ [ @@ -471,7 +471,7 @@ public function testGenerateReportMergeImageSetItemsArray() 'image-area-square-meter' => 5.5, 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => $al->annotation->points, 'labels' => [ [ @@ -554,7 +554,7 @@ public function testGenerateReportRestrictToExportArea() $image->filename => [ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => $a1->points, 'labels' => [ [ @@ -629,7 +629,7 @@ public function testGenerateReportRestrictNewestLabel() $al->annotation->image->filename => [ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => $al->annotation->points, 'labels' => [ [ @@ -729,7 +729,7 @@ public function testGenerateReportRestrictToLabels() $image1->filename => [ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => $a1->points, 'labels' => [ [ @@ -741,7 +741,7 @@ public function testGenerateReportRestrictToLabels() ], ], [ - 'type' => 'whole-image', + 'shape' => 'whole-image', 'coordinates' => [], 'labels' => [ [ @@ -821,7 +821,7 @@ public function testGenerateReportLabelAphiaIdInfo() $al->annotation->image->filename => [ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => $al->annotation->points, 'labels' => [ [ @@ -867,7 +867,7 @@ public function testStripIfdo() $image->filename => [ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => [10, 20], 'labels' => [ [ @@ -929,7 +929,7 @@ public function testStripIfdo() $al->annotation->image->filename => [ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => $al->annotation->points, 'labels' => [ [ @@ -975,7 +975,7 @@ public function testStripIfdoArray() $image->filename => [[ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => [10, 20], 'labels' => [ [ @@ -1037,7 +1037,7 @@ public function testStripIfdoArray() $al->annotation->image->filename => [[ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => $al->annotation->points, 'labels' => [ [ @@ -1154,7 +1154,7 @@ public function testGeometryTypes() $image->filename => [ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => $a1->points, 'labels' => [ [ @@ -1166,7 +1166,7 @@ public function testGeometryTypes() ], ], [ - 'type' => 'rectangle', + 'shape' => 'rectangle', 'coordinates' => $a2->points, 'labels' => [ [ @@ -1178,7 +1178,7 @@ public function testGeometryTypes() ], ], [ - 'type' => 'circle', + 'shape' => 'circle', 'coordinates' => $a3->points, 'labels' => [ [ @@ -1190,7 +1190,7 @@ public function testGeometryTypes() ], ], [ - 'type' => 'ellipse', + 'shape' => 'ellipse', 'coordinates' => $a4->points, 'labels' => [ [ @@ -1202,7 +1202,7 @@ public function testGeometryTypes() ], ], [ - 'type' => 'polygon', + 'shape' => 'polygon', 'coordinates' => $a5->points, 'labels' => [ [ @@ -1214,7 +1214,7 @@ public function testGeometryTypes() ], ], [ - 'type' => 'line-string', + 'shape' => 'polyline', 'coordinates' => $a6->points, 'labels' => [ [ diff --git a/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php index fb913d379..f09d1534d 100644 --- a/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php @@ -94,7 +94,7 @@ public function testGenerateReport() $al->annotation->video->filename => [[ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => [[150, 150], [200, 200]], 'frames' => [100.0, 200.0], 'labels' => [ @@ -173,7 +173,7 @@ public function testGenerateReportMultiLabel() $al->annotation->video->filename => [[ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => [[150, 150]], 'frames' => [100.0], 'labels' => [ @@ -267,7 +267,7 @@ public function testGenerateReportVideoLabels() $vl->video->filename => [[ 'image-annotations' => [ [ - 'type' => 'whole-image', + 'shape' => 'whole-image', 'coordinates' => [], 'labels' => [ [ @@ -313,7 +313,7 @@ public function testGenerateReportMergeImageSetItems() 'image-area-square-meter' => 5.5, 'image-annotations' => [ [ - 'type' => 'rectangle', + 'shape' => 'rectangle', 'coordinates' => [10, 20, 20, 30, 30, 20, 20, 10], 'labels' => [ [ @@ -384,7 +384,7 @@ public function testGenerateReportMergeImageSetItems() 'image-area-square-meter' => 5.5, 'image-annotations' => [ [ - 'type' => 'rectangle', + 'shape' => 'rectangle', 'coordinates' => [10, 20, 20, 30, 30, 20, 20, 10], 'labels' => [ [ @@ -396,7 +396,7 @@ public function testGenerateReportMergeImageSetItems() ], ], [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => [[150, 150]], 'frames' => [100.0], 'labels' => [ @@ -483,7 +483,7 @@ public function testGenerateReportMergeImageSetItemsMultiple() 'image-area-square-meter' => 5.5, 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => [[150, 150]], 'frames' => [100.0], 'labels' => [ @@ -564,7 +564,7 @@ public function testGenerateReportRestrictNewestLabel() $al->annotation->video->filename => [[ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => [[150, 150]], 'frames' => [100.0], 'labels' => [ @@ -665,7 +665,7 @@ public function testGenerateReportRestrictToLabels() $video1->filename => [[ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => $a1->points, 'frames' => $a1->frames, 'labels' => [ @@ -678,7 +678,7 @@ public function testGenerateReportRestrictToLabels() ], ], [ - 'type' => 'whole-image', + 'shape' => 'whole-image', 'coordinates' => [], 'labels' => [ [ @@ -759,7 +759,7 @@ public function testGenerateReportLabelAphiaIdInfo() $al->annotation->video->filename => [[ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => [[150, 150]], 'frames' => [100.0], 'labels' => [ @@ -806,7 +806,7 @@ public function testStripIfdo() $video->filename => [[ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => [10, 20], 'labels' => [ [ @@ -869,7 +869,7 @@ public function testStripIfdo() $al->annotation->video->filename => [[ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => [[150, 150]], 'frames' => [100.0], 'labels' => [ @@ -997,7 +997,7 @@ public function testGeometryTypes() $video->filename => [[ 'image-annotations' => [ [ - 'type' => 'single-pixel', + 'shape' => 'single-pixel', 'coordinates' => $a1->points, 'frames' => $a1->frames, 'labels' => [ @@ -1010,7 +1010,7 @@ public function testGeometryTypes() ], ], [ - 'type' => 'rectangle', + 'shape' => 'rectangle', 'coordinates' => $a2->points, 'frames' => $a2->frames, 'labels' => [ @@ -1023,7 +1023,7 @@ public function testGeometryTypes() ], ], [ - 'type' => 'circle', + 'shape' => 'circle', 'coordinates' => $a3->points, 'frames' => $a3->frames, 'labels' => [ @@ -1036,7 +1036,7 @@ public function testGeometryTypes() ], ], [ - 'type' => 'ellipse', + 'shape' => 'ellipse', 'coordinates' => $a4->points, 'frames' => $a4->frames, 'labels' => [ @@ -1049,7 +1049,7 @@ public function testGeometryTypes() ], ], [ - 'type' => 'polygon', + 'shape' => 'polygon', 'coordinates' => $a5->points, 'frames' => $a5->frames, 'labels' => [ @@ -1062,7 +1062,7 @@ public function testGeometryTypes() ], ], [ - 'type' => 'whole-image', + 'shape' => 'whole-image', 'coordinates' => $a6->points, 'frames' => $a6->frames, 'labels' => [ @@ -1075,7 +1075,7 @@ public function testGeometryTypes() ], ], [ - 'type' => 'line-string', + 'shape' => 'polyline', 'coordinates' => $a7->points, 'frames' => $a7->frames, 'labels' => [ From c5dc1cc138f73e782bb517a0b7462e0cbcc76e62 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 25 Apr 2022 10:51:59 +0200 Subject: [PATCH 327/407] Remove iFDO creator type This field is now optional. --- .../Reports/Volumes/IfdoReportGenerator.php | 2 -- .../Volumes/ImageIfdoReportGeneratorTest.php | 16 ---------------- .../Volumes/VideoIfdoReportGeneratorTest.php | 13 ------------- 3 files changed, 31 deletions(-) diff --git a/src/Support/Reports/Volumes/IfdoReportGenerator.php b/src/Support/Reports/Volumes/IfdoReportGenerator.php index 385109bed..3b6d9ace8 100644 --- a/src/Support/Reports/Volumes/IfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/IfdoReportGenerator.php @@ -85,8 +85,6 @@ public function generateReport($path) return [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - // TODO maybe leave this out? No way to determine the type here. - 'type' => 'expert', ]; }, $this->imageAnnotationCreators); diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php index aa0748419..a052cdd45 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -79,7 +79,6 @@ public function testGenerateReport() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -152,7 +151,6 @@ public function testGenerateReportMultiLabel() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -249,7 +247,6 @@ public function testGenerateReportImageLabels() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -294,7 +291,6 @@ public function testGenerateReportMergeImageSetItems() [ 'id' => '123abc', 'name' => "Test User", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -355,12 +351,10 @@ public function testGenerateReportMergeImageSetItems() [ 'id' => '123abc', 'name' => "Test User", - 'type' => 'expert', ], [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -456,7 +450,6 @@ public function testGenerateReportMergeImageSetItemsArray() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -540,7 +533,6 @@ public function testGenerateReportRestrictToExportArea() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -615,7 +607,6 @@ public function testGenerateReportRestrictNewestLabel() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -715,7 +706,6 @@ public function testGenerateReportRestrictToLabels() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -807,7 +797,6 @@ public function testGenerateReportLabelAphiaIdInfo() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -853,7 +842,6 @@ public function testStripIfdo() [ 'id' => '123abc', 'name' => "Test User", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -915,7 +903,6 @@ public function testStripIfdo() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -961,7 +948,6 @@ public function testStripIfdoArray() [ 'id' => '123abc', 'name' => "Test User", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -1023,7 +1009,6 @@ public function testStripIfdoArray() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -1140,7 +1125,6 @@ public function testGeometryTypes() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ diff --git a/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php index f09d1534d..4e23264b9 100644 --- a/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php @@ -80,7 +80,6 @@ public function testGenerateReport() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -155,7 +154,6 @@ public function testGenerateReportMultiLabel() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -253,7 +251,6 @@ public function testGenerateReportVideoLabels() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -298,7 +295,6 @@ public function testGenerateReportMergeImageSetItems() [ 'id' => '123abc', 'name' => "Test User", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -360,12 +356,10 @@ public function testGenerateReportMergeImageSetItems() [ 'id' => '123abc', 'name' => "Test User", - 'type' => 'expert', ], [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -467,7 +461,6 @@ public function testGenerateReportMergeImageSetItemsMultiple() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -550,7 +543,6 @@ public function testGenerateReportRestrictNewestLabel() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -651,7 +643,6 @@ public function testGenerateReportRestrictToLabels() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -745,7 +736,6 @@ public function testGenerateReportLabelAphiaIdInfo() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -792,7 +782,6 @@ public function testStripIfdo() [ 'id' => '123abc', 'name' => "Test User", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -855,7 +844,6 @@ public function testStripIfdo() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ @@ -983,7 +971,6 @@ public function testGeometryTypes() [ 'id' => $user->uuid, 'name' => "{$user->firstname} {$user->lastname}", - 'type' => 'expert', ], ], 'image-annotation-labels' => [ From eed75bbceb8c6dc82fd4c89b0d13cad7b87f53f9 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Mon, 25 Apr 2022 10:54:19 +0200 Subject: [PATCH 328/407] Remove iFDO label confidence The field is now optional and the confidence is not used in BIIGLE. --- .../Volumes/ImageIfdoReportGenerator.php | 1 - .../Volumes/VideoIfdoReportGenerator.php | 2 -- .../Volumes/ImageIfdoReportGeneratorTest.php | 21 ------------------- .../Volumes/VideoIfdoReportGeneratorTest.php | 19 ----------------- 4 files changed, 43 deletions(-) diff --git a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php index 8f203ceb4..d774c9f94 100644 --- a/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageIfdoReportGenerator.php @@ -146,7 +146,6 @@ public function processFile(Image|Video $image) return [ 'label' => $labelId, 'annotator' => $user->uuid, - 'confidence' => $aLabel->confidence, 'created-at' => $aLabel->created_at->toJson(), ]; }); diff --git a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php b/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php index 9ee7898e4..56e65563c 100644 --- a/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoIfdoReportGenerator.php @@ -143,8 +143,6 @@ public function processFile(Image|Video $video) return [ 'label' => $labelId, 'annotator' => $user->uuid, - // Video annotation labels have no confidence. - 'confidence' => 1.0, 'created-at' => $aLabel->created_at->toJson(), ]; }); diff --git a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php index a052cdd45..e49bf59b5 100644 --- a/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageIfdoReportGeneratorTest.php @@ -98,7 +98,6 @@ public function testGenerateReport() [ 'label' => $al->label_id, 'annotator' => $user->uuid, - 'confidence' => $al->confidence, 'created-at' => $al->created_at->toJson(), ], ], @@ -174,13 +173,11 @@ public function testGenerateReportMultiLabel() [ 'label' => $al->label_id, 'annotator' => $user->uuid, - 'confidence' => $al->confidence, 'created-at' => $al->created_at->toJson(), ], [ 'label' => $al2->label_id, 'annotator' => $user->uuid, - 'confidence' => $al2->confidence, 'created-at' => $al2->created_at->toJson(), ], ], @@ -311,7 +308,6 @@ public function testGenerateReportMergeImageSetItems() [ 'label' => 123321, 'annotator' => '123abc', - 'confidence' => 1.0, 'created-at' => '2022-02-10 09:47:00', ], ], @@ -379,7 +375,6 @@ public function testGenerateReportMergeImageSetItems() [ 'label' => 123321, 'annotator' => '123abc', - 'confidence' => 1.0, 'created-at' => '2022-02-10 09:47:00', ], ], @@ -391,7 +386,6 @@ public function testGenerateReportMergeImageSetItems() [ 'label' => $al->label_id, 'annotator' => $user->uuid, - 'confidence' => $al->confidence, 'created-at' => $al->created_at->toJson(), ], ], @@ -470,7 +464,6 @@ public function testGenerateReportMergeImageSetItemsArray() [ 'label' => $al->label_id, 'annotator' => $user->uuid, - 'confidence' => $al->confidence, 'created-at' => $al->created_at->toJson(), ], ], @@ -552,7 +545,6 @@ public function testGenerateReportRestrictToExportArea() [ 'label' => $al1->label_id, 'annotator' => $user->uuid, - 'confidence' => $al1->confidence, 'created-at' => $al1->created_at->toJson(), ], ], @@ -626,7 +618,6 @@ public function testGenerateReportRestrictNewestLabel() [ 'label' => $al2->label_id, 'annotator' => $user->uuid, - 'confidence' => $al2->confidence, 'created-at' => $al->created_at->toJson(), ], ], @@ -725,7 +716,6 @@ public function testGenerateReportRestrictToLabels() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => $al->confidence, 'created-at' => $al->created_at->toJson(), ], ], @@ -816,7 +806,6 @@ public function testGenerateReportLabelAphiaIdInfo() [ 'label' => 'urn:lsid:marinespecies.org:taxname:123999', 'annotator' => $user->uuid, - 'confidence' => $al->confidence, 'created-at' => $al->created_at->toJson(), ], ], @@ -861,7 +850,6 @@ public function testStripIfdo() [ 'label' => 123321, 'annotator' => '123abc', - 'confidence' => 1.0, 'created-at' => '2022-02-10 09:47:00', ], ], @@ -922,7 +910,6 @@ public function testStripIfdo() [ 'label' => $al->label_id, 'annotator' => $user->uuid, - 'confidence' => $al->confidence, 'created-at' => $al->created_at->toJson(), ], ], @@ -967,7 +954,6 @@ public function testStripIfdoArray() [ 'label' => 123321, 'annotator' => '123abc', - 'confidence' => 1.0, 'created-at' => '2022-02-10 09:47:00', ], ], @@ -1028,7 +1014,6 @@ public function testStripIfdoArray() [ 'label' => $al->label_id, 'annotator' => $user->uuid, - 'confidence' => $al->confidence, 'created-at' => $al->created_at->toJson(), ], ], @@ -1144,7 +1129,6 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => $al1->confidence, 'created-at' => $al1->created_at->toJson(), ], ], @@ -1156,7 +1140,6 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => $al2->confidence, 'created-at' => $al2->created_at->toJson(), ], ], @@ -1168,7 +1151,6 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => $al3->confidence, 'created-at' => $al3->created_at->toJson(), ], ], @@ -1180,7 +1162,6 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => $al4->confidence, 'created-at' => $al4->created_at->toJson(), ], ], @@ -1192,7 +1173,6 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => $al5->confidence, 'created-at' => $al5->created_at->toJson(), ], ], @@ -1204,7 +1184,6 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => $al6->confidence, 'created-at' => $al6->created_at->toJson(), ], ], diff --git a/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php b/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php index 4e23264b9..3a7bf72b6 100644 --- a/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/VideoIfdoReportGeneratorTest.php @@ -100,7 +100,6 @@ public function testGenerateReport() [ 'label' => $al->label_id, 'annotator' => $user->uuid, - 'confidence' => 1.0, 'created-at' => $al->created_at->toJson(), ], ], @@ -178,13 +177,11 @@ public function testGenerateReportMultiLabel() [ 'label' => $al->label_id, 'annotator' => $user->uuid, - 'confidence' => 1.0, 'created-at' => $al->created_at->toJson(), ], [ 'label' => $al2->label_id, 'annotator' => $user->uuid, - 'confidence' => 1.0, 'created-at' => $al->created_at->toJson(), ], ], @@ -315,7 +312,6 @@ public function testGenerateReportMergeImageSetItems() [ 'label' => 123321, 'annotator' => '123abc', - 'confidence' => 1.0, 'created-at' => '2022-02-10 09:47:00', ], ], @@ -384,7 +380,6 @@ public function testGenerateReportMergeImageSetItems() [ 'label' => 123321, 'annotator' => '123abc', - 'confidence' => 1.0, 'created-at' => '2022-02-10 09:47:00', ], ], @@ -397,7 +392,6 @@ public function testGenerateReportMergeImageSetItems() [ 'label' => $al->label_id, 'annotator' => $user->uuid, - 'confidence' => 1.0, 'created-at' => $al->created_at->toJson(), ], ], @@ -483,7 +477,6 @@ public function testGenerateReportMergeImageSetItemsMultiple() [ 'label' => $al->label_id, 'annotator' => $user->uuid, - 'confidence' => 1.0, 'created-at' => $al->created_at->toJson(), ], ], @@ -563,7 +556,6 @@ public function testGenerateReportRestrictNewestLabel() [ 'label' => $al2->label_id, 'annotator' => $user->uuid, - 'confidence' => 1.0, 'created-at' => $al->created_at->toJson(), ], ], @@ -663,7 +655,6 @@ public function testGenerateReportRestrictToLabels() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => 1.0, 'created-at' => $al->created_at->toJson(), ], ], @@ -756,7 +747,6 @@ public function testGenerateReportLabelAphiaIdInfo() [ 'label' => 'urn:lsid:marinespecies.org:taxname:123999', 'annotator' => $user->uuid, - 'confidence' => 1.0, 'created-at' => $al->created_at->toJson(), ], ], @@ -801,7 +791,6 @@ public function testStripIfdo() [ 'label' => 123321, 'annotator' => '123abc', - 'confidence' => 1.0, 'created-at' => '2022-02-10 09:47:00', ], ], @@ -864,7 +853,6 @@ public function testStripIfdo() [ 'label' => $al->label_id, 'annotator' => $user->uuid, - 'confidence' => 1.0, 'created-at' => $al->created_at->toJson(), ], ], @@ -991,7 +979,6 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => 1.0, 'created-at' => $al1->created_at->toJson(), ], ], @@ -1004,7 +991,6 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => 1.0, 'created-at' => $al2->created_at->toJson(), ], ], @@ -1017,7 +1003,6 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => 1.0, 'created-at' => $al3->created_at->toJson(), ], ], @@ -1030,7 +1015,6 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => 1.0, 'created-at' => $al4->created_at->toJson(), ], ], @@ -1043,7 +1027,6 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => 1.0, 'created-at' => $al5->created_at->toJson(), ], ], @@ -1056,7 +1039,6 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => 1.0, 'created-at' => $al6->created_at->toJson(), ], ], @@ -1069,7 +1051,6 @@ public function testGeometryTypes() [ 'label' => $label->id, 'annotator' => $user->uuid, - 'confidence' => 1.0, 'created-at' => $al7->created_at->toJson(), ], ], From f645243f78c8b9b3c501ce92cfa543fe19211900 Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 28 Apr 2022 13:51:01 +0200 Subject: [PATCH 329/407] Fix CSV field size errors Resolves #79 --- src/resources/scripts/basic_report.py | 3 +++ src/resources/scripts/csvs_to_xlsx.py | 3 +++ src/resources/scripts/full_report.py | 3 +++ 3 files changed, 9 insertions(+) diff --git a/src/resources/scripts/basic_report.py b/src/resources/scripts/basic_report.py index d55683005..0237fa341 100755 --- a/src/resources/scripts/basic_report.py +++ b/src/resources/scripts/basic_report.py @@ -8,6 +8,9 @@ import numpy as np import csv +# See: https://github.com/biigle/reports/issues/79 +csv.field_size_limit(sys.maxsize) + title = sys.argv[1] target_file = sys.argv[2] data_csvs = sys.argv[3:] diff --git a/src/resources/scripts/csvs_to_xlsx.py b/src/resources/scripts/csvs_to_xlsx.py index f9a872bd4..cc796cb31 100755 --- a/src/resources/scripts/csvs_to_xlsx.py +++ b/src/resources/scripts/csvs_to_xlsx.py @@ -3,6 +3,9 @@ from pyexcelerate import Workbook, Style, Font import csv +# See: https://github.com/biigle/reports/issues/79 +csv.field_size_limit(sys.maxsize) + target_file = sys.argv[2] csvs = sys.argv[3:] diff --git a/src/resources/scripts/full_report.py b/src/resources/scripts/full_report.py index 9599b54c7..45bddbf6d 100644 --- a/src/resources/scripts/full_report.py +++ b/src/resources/scripts/full_report.py @@ -3,6 +3,9 @@ import csv import json +# See: https://github.com/biigle/reports/issues/79 +csv.field_size_limit(sys.maxsize) + target_file = sys.argv[2] csvs = sys.argv[3:] From b8ab5160280641edc529ee8ad61aea810a35a02a Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Thu, 28 Apr 2022 14:19:20 +0200 Subject: [PATCH 330/407] Add created_at timestamp to CSV reports Resolves #63 --- .../Reports/Volumes/ImageAnnotations/CsvReportGenerator.php | 3 +++ .../Reports/Volumes/ImageLabels/CsvReportGenerator.php | 3 +++ .../Reports/Volumes/VideoAnnotations/CsvReportGenerator.php | 3 +++ .../Reports/Volumes/VideoLabels/CsvReportGenerator.php | 3 +++ .../views/manual/tutorials/reports-schema.blade.php | 4 ++++ .../Volumes/ImageAnnotations/CsvReportGeneratorTest.php | 6 ++++++ .../Reports/Volumes/ImageLabels/CsvReportGeneratorTest.php | 6 ++++++ .../Volumes/VideoAnnotations/CsvReportGeneratorTest.php | 6 ++++++ .../Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php | 6 ++++++ 9 files changed, 40 insertions(+) diff --git a/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php index 578ef9a06..3d85f64c3 100644 --- a/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageAnnotations/CsvReportGenerator.php @@ -95,6 +95,7 @@ protected function query() 'image_annotations.points', 'images.attrs', 'image_annotations.id as annotation_id', + 'image_annotation_labels.created_at', ]) ->join('shapes', 'image_annotations.shape_id', '=', 'shapes.id') ->join('users', 'image_annotation_labels.user_id', '=', 'users.id') @@ -130,6 +131,7 @@ protected function createCsv($rows) 'points', 'attributes', 'annotation_id', + 'created_at', ]); foreach ($rows as $row) { @@ -150,6 +152,7 @@ protected function createCsv($rows) $row->points, $row->attrs, $row->annotation_id, + $row->created_at, ]); } diff --git a/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php b/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php index 3e83de353..46acb664f 100644 --- a/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/ImageLabels/CsvReportGenerator.php @@ -95,6 +95,7 @@ public function query() 'users.lastname', 'image_labels.label_id', 'labels.name as label_name', + 'image_labels.created_at', ]) ->where('images.volume_id', $this->source->id) ->when($this->isRestrictedToLabels(), function ($query) { @@ -131,6 +132,7 @@ protected function createCsv($rows) 'label_id', 'label_name', 'label_hierarchy', + 'created_at', ]); foreach ($rows as $row) { @@ -146,6 +148,7 @@ protected function createCsv($rows) $row->label_id, $row->label_name, $this->expandLabelName($row->label_id), + $row->created_at, ]); } diff --git a/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php b/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php index de8c30bd5..05324f51e 100644 --- a/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoAnnotations/CsvReportGenerator.php @@ -205,6 +205,7 @@ protected function query() 'video_annotations.points', 'video_annotations.frames', 'video_annotations.id as annotation_id', + 'video_annotation_labels.created_at', ]) ->join('shapes', 'video_annotations.shape_id', '=', 'shapes.id') ->join('users', 'video_annotation_labels.user_id', '=', 'users.id') @@ -238,6 +239,7 @@ protected function createCsv($rows) 'points', 'frames', 'annotation_id', + 'created_at', ]); foreach ($rows as $row) { @@ -256,6 +258,7 @@ protected function createCsv($rows) $row->points, $row->frames, $row->annotation_id, + $row->created_at, ]); } diff --git a/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php b/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php index e2576e2a9..661ff96da 100644 --- a/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php +++ b/src/Support/Reports/Volumes/VideoLabels/CsvReportGenerator.php @@ -93,6 +93,7 @@ public function query() 'users.lastname', 'video_labels.label_id', 'labels.name as label_name', + 'video_labels.created_at', ]) ->where('videos.volume_id', $this->source->id) ->when($this->isRestrictedToLabels(), function ($query) { @@ -129,6 +130,7 @@ protected function createCsv($rows) 'label_id', 'label_name', 'label_hierarchy', + 'created_at', ]); foreach ($rows as $row) { @@ -142,6 +144,7 @@ protected function createCsv($rows) $row->label_id, $row->label_name, $this->expandLabelName($row->label_id), + $row->created_at, ]); } diff --git a/src/resources/views/manual/tutorials/reports-schema.blade.php b/src/resources/views/manual/tutorials/reports-schema.blade.php index effe2b844..59377b4af 100644 --- a/src/resources/views/manual/tutorials/reports-schema.blade.php +++ b/src/resources/views/manual/tutorials/reports-schema.blade.php @@ -184,6 +184,7 @@

  • Annotation ID
  • +
  • Creation date (of the annotation label)
  • Extended

    @@ -298,6 +299,7 @@
  • Label ID
  • Label name
  • Label hierarchy (see the extended annotation report on how to interpret a label hierarchy)
  • +
  • Creation date
  • ImageLocation

    @@ -348,6 +350,7 @@

  • Video annotation ID
  • +
  • Creation date (of the video annotation label)
  • Video label reports

    @@ -365,6 +368,7 @@
  • Label ID
  • Label name
  • Label hierarchy (see the extended annotation report on how to interpret a label hierarchy)
  • +
  • Creation date
  • iFDO reports

    diff --git a/tests/Support/Reports/Volumes/ImageAnnotations/CsvReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageAnnotations/CsvReportGeneratorTest.php index 573303f70..572a0c8e9 100644 --- a/tests/Support/Reports/Volumes/ImageAnnotations/CsvReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageAnnotations/CsvReportGeneratorTest.php @@ -35,6 +35,7 @@ class CsvReportGeneratorTest extends TestCase 'points', 'attributes', 'annotation_id', + 'created_at', ]; public function testProperties() @@ -93,6 +94,7 @@ public function testGenerateReport() json_encode($al->annotation->points), json_encode(['image' => 'attrs']), $al->annotation->id, + $al->created_at, ]); $mock->shouldReceive('close') @@ -174,6 +176,7 @@ public function testGenerateReportSeparateLabelTrees() json_encode($annotation->points), null, $annotation->id, + $al1->created_at, ]); $mock->shouldReceive('put') @@ -195,6 +198,7 @@ public function testGenerateReportSeparateLabelTrees() json_encode($annotation->points), null, $annotation->id, + $al2->created_at, ]); $mock->shouldReceive('close') @@ -286,6 +290,7 @@ public function testGenerateReportSeparateUsers() json_encode($annotation->points), null, $annotation->id, + $al1->created_at, ]); $mock->shouldReceive('put') @@ -307,6 +312,7 @@ public function testGenerateReportSeparateUsers() json_encode($annotation->points), null, $annotation->id, + $al2->created_at, ]); $mock->shouldReceive('close') diff --git a/tests/Support/Reports/Volumes/ImageLabels/CsvReportGeneratorTest.php b/tests/Support/Reports/Volumes/ImageLabels/CsvReportGeneratorTest.php index a63f73b1b..a4c47e305 100644 --- a/tests/Support/Reports/Volumes/ImageLabels/CsvReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/ImageLabels/CsvReportGeneratorTest.php @@ -29,6 +29,7 @@ class CsvReportGeneratorTest extends TestCase 'label_id', 'label_name', 'label_hierarchy', + 'created_at', ]; public function testProperties() @@ -81,6 +82,7 @@ public function testGenerateReport() $il->label_id, $child->name, "{$root->name} > {$child->name}", + $il->created_at, ]); $mock->shouldReceive('close') @@ -150,6 +152,7 @@ public function testGenerateReportSeparateLabelTrees() $label1->id, $label1->name, $label1->name, + $il1->created_at, ]); $mock->shouldReceive('put') @@ -166,6 +169,7 @@ public function testGenerateReportSeparateLabelTrees() $label2->id, $label2->name, $label2->name, + $il2->created_at, ]); $mock->shouldReceive('close') @@ -248,6 +252,7 @@ public function testGenerateReportSeparateUsers() $il1->label->id, $il1->label->name, $il1->label->name, + $il1->created_at, ]); $mock->shouldReceive('put') @@ -264,6 +269,7 @@ public function testGenerateReportSeparateUsers() $il2->label->id, $il2->label->name, $il2->label->name, + $il2->created_at, ]); $mock->shouldReceive('close') diff --git a/tests/Support/Reports/Volumes/VideoAnnotations/CsvReportGeneratorTest.php b/tests/Support/Reports/Volumes/VideoAnnotations/CsvReportGeneratorTest.php index 0ddb557a1..f41226588 100644 --- a/tests/Support/Reports/Volumes/VideoAnnotations/CsvReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/VideoAnnotations/CsvReportGeneratorTest.php @@ -35,6 +35,7 @@ class CsvReportGeneratorTest extends TestCase 'points', 'frames', 'annotation_id', + 'created_at', ]; public function testProperties() @@ -93,6 +94,7 @@ public function testGenerateReport() json_encode($al->annotation->points), json_encode($al->annotation->frames), $al->annotation->id, + $al->created_at, ]); $mock->shouldReceive('close') @@ -170,6 +172,7 @@ public function testGenerateReportSeparateLabelTrees() json_encode($annotation->points), json_encode($annotation->frames), $annotation->id, + $al1->created_at, ]); $mock->shouldReceive('put') @@ -189,6 +192,7 @@ public function testGenerateReportSeparateLabelTrees() json_encode($annotation->points), json_encode($annotation->frames), $annotation->id, + $al2->created_at, ]); $mock->shouldReceive('close') @@ -276,6 +280,7 @@ public function testGenerateReportSeparateUsers() json_encode($annotation->points), json_encode($annotation->frames), $annotation->id, + $al1->created_at, ]); $mock->shouldReceive('put') @@ -295,6 +300,7 @@ public function testGenerateReportSeparateUsers() json_encode($annotation->points), json_encode($annotation->frames), $annotation->id, + $al2->created_at, ]); $mock->shouldReceive('close') diff --git a/tests/Support/Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php b/tests/Support/Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php index 13ba62f91..d230763d7 100644 --- a/tests/Support/Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php +++ b/tests/Support/Reports/Volumes/VideoLabels/CsvReportGeneratorTest.php @@ -27,6 +27,7 @@ class CsvReportGeneratorTest extends TestCase 'label_id', 'label_name', 'label_hierarchy', + 'created_at', ]; public function testProperties() @@ -77,6 +78,7 @@ public function testGenerateReport() $il->label_id, $child->name, "{$root->name} > {$child->name}", + $il->created_at, ]); $mock->shouldReceive('close') @@ -144,6 +146,7 @@ public function testGenerateReportSeparateLabelTrees() $label1->id, $label1->name, $label1->name, + $il1->created_at, ]); $mock->shouldReceive('put') @@ -158,6 +161,7 @@ public function testGenerateReportSeparateLabelTrees() $label2->id, $label2->name, $label2->name, + $il2->created_at, ]); $mock->shouldReceive('close') @@ -238,6 +242,7 @@ public function testGenerateReportSeparateUsers() $il1->label->id, $il1->label->name, $il1->label->name, + $il1->created_at, ]); $mock->shouldReceive('put') @@ -252,6 +257,7 @@ public function testGenerateReportSeparateUsers() $il2->label->id, $il2->label->name, $il2->label->name, + $il2->created_at, ]); $mock->shouldReceive('close') From 5e00e284305f27e7d3d386de9c6872971f270580 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 29 Apr 2022 13:00:17 +0000 Subject: [PATCH 331/407] Bump async from 2.6.3 to 2.6.4 Bumps [async](https://github.com/caolan/async) from 2.6.3 to 2.6.4. - [Release notes](https://github.com/caolan/async/releases) - [Changelog](https://github.com/caolan/async/blob/v2.6.4/CHANGELOG.md) - [Commits](https://github.com/caolan/async/compare/v2.6.3...v2.6.4) --- updated-dependencies: - dependency-name: async dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 947cc8b78..01096cbaf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2978,9 +2978,9 @@ } }, "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "dependencies": { "lodash": "^4.17.14" @@ -13644,9 +13644,9 @@ "dev": true }, "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "requires": { "lodash": "^4.17.14" From 676bc3a301c3f73db20a6adc4d0ff8c9130f99df Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 17 Jun 2022 21:32:05 +0000 Subject: [PATCH 332/407] Bump numpy from 1.8.2 to 1.21.0 Bumps [numpy](https://github.com/numpy/numpy) from 1.8.2 to 1.21.0. - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/HOWTO_RELEASE.rst) - [Commits](https://github.com/numpy/numpy/compare/v1.8.2...v1.21.0) --- updated-dependencies: - dependency-name: numpy dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 02d407a53..272bc8a15 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ PyExcelerate==0.6.7 matplotlib==1.3.1 -numpy==1.8.2 +numpy==1.21.0 From 0c285c2e62a01c7c601cecb06f38a72bafe5253e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 05:20:46 +0000 Subject: [PATCH 333/407] Bump numpy from 1.21.0 to 1.22.0 Bumps [numpy](https://github.com/numpy/numpy) from 1.21.0 to 1.22.0. - [Release notes](https://github.com/numpy/numpy/releases) - [Changelog](https://github.com/numpy/numpy/blob/main/doc/HOWTO_RELEASE.rst) - [Commits](https://github.com/numpy/numpy/compare/v1.21.0...v1.22.0) --- updated-dependencies: - dependency-name: numpy dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 272bc8a15..10ce87874 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ PyExcelerate==0.6.7 matplotlib==1.3.1 -numpy==1.21.0 +numpy==1.22.0 From ed992bf3ef77c7ba4c951fdb8e59c10a92e7311e Mon Sep 17 00:00:00 2001 From: Martin Zurowietz Date: Fri, 24 Jun 2022 10:56:09 +0200 Subject: [PATCH 334/407] Update npm dependencies --- .npmrc | 1 + package-lock.json | 47 +++++++++++++++++++++++------------------------ package.json | 2 +- webpack.mix.js | 2 +- 4 files changed, 26 insertions(+), 26 deletions(-) diff --git a/.npmrc b/.npmrc index ebb09e7c8..bae4c3419 100644 --- a/.npmrc +++ b/.npmrc @@ -1 +1,2 @@ @biigle:registry=https://npm.pkg.github.com +@mzur:registry=https://npm.pkg.github.com diff --git a/package-lock.json b/package-lock.json index 01096cbaf..abb4dbd31 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,11 +12,11 @@ "@biigle/ol": "^5.3.0" }, "devDependencies": { + "@mzur/laravel-mix-artisan-publish": "^1.0.0", "cross-env": "^5.1", "eslint": "^7.3.1", "eslint-plugin-vue": "^7.0.0", "laravel-mix": "^6.0.13", - "laravel-mix-artisan-publish": "git://github.com/mzur/laravel-mix-artisan-publish.git", "resolve-url-loader": "^3.1.2", "sass": "^1.15.2", "sass-loader": "^8.0.0", @@ -1869,6 +1869,19 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@mzur/laravel-mix-artisan-publish": { + "version": "1.0.0", + "resolved": "https://npm.pkg.github.com/download/@mzur/laravel-mix-artisan-publish/1.0.0/33c2d74406872517686d7d189cf3af0e99fe5e80c7e8f46c1b347b7997fe099b", + "integrity": "sha512-zvEn6e538FO8PJH7OiOtCi3VVm2Mv+0noEWjhtPv0ssffFHd2HwepTLAygU/qmA2NDorYtvuuH8nNcXxiGZbtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "node-cmd": "^3.0.0" + }, + "peerDependencies": { + "laravel-mix": "^4.0||^5.0||^6.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -6881,21 +6894,6 @@ "webpack-cli": "^4.9.1" } }, - "node_modules/laravel-mix-artisan-publish": { - "version": "1.0.0", - "resolved": "git+ssh://git@github.com/mzur/laravel-mix-artisan-publish.git#feafb9ba2359d41fddb025bccb4380e9b044783f", - "dev": true, - "license": "MIT", - "dependencies": { - "node-cmd": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "laravel-mix": "^4.0||^5.0||^6.0" - } - }, "node_modules/laravel-mix/node_modules/acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", @@ -12679,6 +12677,15 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "@mzur/laravel-mix-artisan-publish": { + "version": "1.0.0", + "resolved": "https://npm.pkg.github.com/download/@mzur/laravel-mix-artisan-publish/1.0.0/33c2d74406872517686d7d189cf3af0e99fe5e80c7e8f46c1b347b7997fe099b", + "integrity": "sha512-zvEn6e538FO8PJH7OiOtCi3VVm2Mv+0noEWjhtPv0ssffFHd2HwepTLAygU/qmA2NDorYtvuuH8nNcXxiGZbtQ==", + "dev": true, + "requires": { + "node-cmd": "^3.0.0" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -16740,14 +16747,6 @@ } } }, - "laravel-mix-artisan-publish": { - "version": "git+ssh://git@github.com/mzur/laravel-mix-artisan-publish.git#feafb9ba2359d41fddb025bccb4380e9b044783f", - "dev": true, - "from": "laravel-mix-artisan-publish@git://github.com/mzur/laravel-mix-artisan-publish.git", - "requires": { - "node-cmd": "^3.0.0" - } - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", diff --git a/package.json b/package.json index bd2f11956..33b818c0a 100644 --- a/package.json +++ b/package.json @@ -13,11 +13,11 @@ "lint": "eslint --ext .js,.vue --resolve-plugins-relative-to . src/resources/assets/js/" }, "devDependencies": { + "@mzur/laravel-mix-artisan-publish": "^1.0.0", "cross-env": "^5.1", "eslint": "^7.3.1", "eslint-plugin-vue": "^7.0.0", "laravel-mix": "^6.0.13", - "laravel-mix-artisan-publish": "git://github.com/mzur/laravel-mix-artisan-publish.git", "resolve-url-loader": "^3.1.2", "sass": "^1.15.2", "sass-loader": "^8.0.0", diff --git a/webpack.mix.js b/webpack.mix.js index f3dffc9ce..d1afa89bf 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -1,5 +1,5 @@ const mix = require('laravel-mix'); -require('laravel-mix-artisan-publish'); +require('@mzur/laravel-mix-artisan-publish'); /* |-------------------------------------------------------------------------- From dd2acc634fc61e33397f7a9aab80dd0ca3194b89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Langenk=C3=A4mper?= Date: Mon, 4 Jul 2022 14:23:08 +0200 Subject: [PATCH 335/407] initial coco --- package-lock.json | 11481 +------- package.json | 5 +- requirements.txt | 1 + ...2_10_123200_add_image_coco_report_type.php | 30 + src/Http/Requests/StoreVolumeReport.php | 1 + src/ReportType.php | 1 + .../ImageAnnotations/CocoReportGenerator.php | 131 + src/config/reports.php | 1 + src/public/assets/scripts/annotations.js | 22967 +++++++++++++++- src/public/assets/scripts/main.js | 830 +- src/public/assets/styles/main.css | 4 +- src/public/mix-manifest.json | 6 +- src/resources/scripts/toCoco.py | 113 + .../manual/tutorials/reports-schema.blade.php | 6 + .../views/partials/reportTypeInfo.blade.php | 3 + .../Controllers/Api/ReportsControllerTest.php | 1 + .../Volumes/VolumeReportControllerTest.php | 1 + 17 files changed, 24124 insertions(+), 11458 deletions(-) create mode 100644 src/Database/migrations/2022_02_10_123200_add_image_coco_report_type.php create mode 100644 src/Support/Reports/Volumes/ImageAnnotations/CocoReportGenerator.php create mode 100644 src/resources/scripts/toCoco.py diff --git a/package-lock.json b/package-lock.json index 947cc8b78..73990a193 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11359 +1,8 @@ { "name": "biigle-reports", "version": "0.0.1", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "biigle-reports", - "version": "0.0.1", - "license": "GPL-3.0-only", - "dependencies": { - "@biigle/ol": "^5.3.0" - }, - "devDependencies": { - "cross-env": "^5.1", - "eslint": "^7.3.1", - "eslint-plugin-vue": "^7.0.0", - "laravel-mix": "^6.0.13", - "laravel-mix-artisan-publish": "git://github.com/mzur/laravel-mix-artisan-publish.git", - "resolve-url-loader": "^3.1.2", - "sass": "^1.15.2", - "sass-loader": "^8.0.0", - "vue-loader": "^15.9.6", - "vue-template-compiler": "^2.6.11" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.0.tgz", - "integrity": "sha512-d5RysTlJ7hmw5Tw4UxgxcY3lkMe92n8sXCcuLPAyIAHK6j8DefDwtGnVVDgOnv+RnEosulDJ9NPKQL27bDId0g==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.0.tgz", - "integrity": "sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.2.tgz", - "integrity": "sha512-R3VH5G42VSDolRHyUO4V2cfag8WHcZyxdq5Z/m8Xyb92lW/Erm/6kM+XtRFGf3Mulre3mveni2NHfEUws8wSvw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.0.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.17.2", - "@babel/parser": "^7.17.0", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.0.tgz", - "integrity": "sha512-I3Omiv6FGOC29dtlZhkfXO6pgkmukJSlT26QjVvS1DGZe/NzSVCPG41X0tS21oZkJYlovfj9qDWgKP+Cn4bXxw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", - "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", - "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", - "dev": true, - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz", - "integrity": "sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.1.tgz", - "integrity": "sha512-JBdSr/LtyYIno/pNnJ75lBcqc3Z1XXujzPanHqjvvrhOA+DTceTFuJi8XjmWTZh4r3fsdfqaCMN0iZemdkxZHQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", - "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "regexpu-core": "^5.0.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", - "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", - "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", - "dev": true, - "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", - "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz", - "integrity": "sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", - "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz", - "integrity": "sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", - "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", - "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-wrap-function": "^7.16.8", - "@babel/types": "^7.16.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", - "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/traverse": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz", - "integrity": "sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", - "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", - "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", - "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", - "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.8", - "@babel/types": "^7.16.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.2.tgz", - "integrity": "sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.0", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.0.tgz", - "integrity": "sha512-VKXSCQx5D8S04ej+Dqsr1CzYvvWgf20jIw2D+YhQCrIlr2UZGaDds23Y0xg75/skOxpLCRpUZvk/1EAVkGoDOw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz", - "integrity": "sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz", - "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", - "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz", - "integrity": "sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", - "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", - "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz", - "integrity": "sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.4", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", - "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", - "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.10", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", - "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", - "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", - "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", - "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-remap-async-to-generator": "^7.16.8" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", - "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", - "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", - "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-optimise-call-expression": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", - "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz", - "integrity": "sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", - "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", - "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", - "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", - "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", - "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", - "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz", - "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", - "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz", - "integrity": "sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", - "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", - "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", - "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", - "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-replace-supers": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", - "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz", - "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz", - "integrity": "sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q==", - "dev": true, - "dependencies": { - "regenerator-transform": "^0.14.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz", - "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", - "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", - "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", - "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", - "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", - "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", - "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz", - "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", - "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.16.11.tgz", - "integrity": "sha512-qcmWG8R7ZW6WBRPZK//y+E3Cli151B20W1Rv7ln27vuPaXU/8TKms6jFdiJtF7UDTxcrb7mZd88tAeK9LjdT8g==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.16.8", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.16.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-async-generator-functions": "^7.16.8", - "@babel/plugin-proposal-class-properties": "^7.16.7", - "@babel/plugin-proposal-class-static-block": "^7.16.7", - "@babel/plugin-proposal-dynamic-import": "^7.16.7", - "@babel/plugin-proposal-export-namespace-from": "^7.16.7", - "@babel/plugin-proposal-json-strings": "^7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "^7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.7", - "@babel/plugin-proposal-numeric-separator": "^7.16.7", - "@babel/plugin-proposal-object-rest-spread": "^7.16.7", - "@babel/plugin-proposal-optional-catch-binding": "^7.16.7", - "@babel/plugin-proposal-optional-chaining": "^7.16.7", - "@babel/plugin-proposal-private-methods": "^7.16.11", - "@babel/plugin-proposal-private-property-in-object": "^7.16.7", - "@babel/plugin-proposal-unicode-property-regex": "^7.16.7", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.16.7", - "@babel/plugin-transform-async-to-generator": "^7.16.8", - "@babel/plugin-transform-block-scoped-functions": "^7.16.7", - "@babel/plugin-transform-block-scoping": "^7.16.7", - "@babel/plugin-transform-classes": "^7.16.7", - "@babel/plugin-transform-computed-properties": "^7.16.7", - "@babel/plugin-transform-destructuring": "^7.16.7", - "@babel/plugin-transform-dotall-regex": "^7.16.7", - "@babel/plugin-transform-duplicate-keys": "^7.16.7", - "@babel/plugin-transform-exponentiation-operator": "^7.16.7", - "@babel/plugin-transform-for-of": "^7.16.7", - "@babel/plugin-transform-function-name": "^7.16.7", - "@babel/plugin-transform-literals": "^7.16.7", - "@babel/plugin-transform-member-expression-literals": "^7.16.7", - "@babel/plugin-transform-modules-amd": "^7.16.7", - "@babel/plugin-transform-modules-commonjs": "^7.16.8", - "@babel/plugin-transform-modules-systemjs": "^7.16.7", - "@babel/plugin-transform-modules-umd": "^7.16.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.16.8", - "@babel/plugin-transform-new-target": "^7.16.7", - "@babel/plugin-transform-object-super": "^7.16.7", - "@babel/plugin-transform-parameters": "^7.16.7", - "@babel/plugin-transform-property-literals": "^7.16.7", - "@babel/plugin-transform-regenerator": "^7.16.7", - "@babel/plugin-transform-reserved-words": "^7.16.7", - "@babel/plugin-transform-shorthand-properties": "^7.16.7", - "@babel/plugin-transform-spread": "^7.16.7", - "@babel/plugin-transform-sticky-regex": "^7.16.7", - "@babel/plugin-transform-template-literals": "^7.16.7", - "@babel/plugin-transform-typeof-symbol": "^7.16.7", - "@babel/plugin-transform-unicode-escapes": "^7.16.7", - "@babel/plugin-transform-unicode-regex": "^7.16.7", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.16.8", - "babel-plugin-polyfill-corejs2": "^0.3.0", - "babel-plugin-polyfill-corejs3": "^0.5.0", - "babel-plugin-polyfill-regenerator": "^0.3.0", - "core-js-compat": "^3.20.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.17.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.2.tgz", - "integrity": "sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz", - "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template/node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.0.tgz", - "integrity": "sha512-fpFIXvqD6kC7c7PUNnZ0Z8cQXlarCLtCUpt2S1Dx7PjoRtCFffvOkHHSom+m5HIxMZn5bIBVb71lhabcmjEsqg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.0", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.0", - "@babel/types": "^7.17.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/types": { - "version": "7.17.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.17.0.tgz", - "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@biigle/ol": { - "version": "5.3.1", - "resolved": "https://npm.pkg.github.com/download/@biigle/ol/5.3.1/7679746c6bc5e2fcfd95ae524430992bb7a377e13ea7b7eb4640b21b677fc3b3", - "integrity": "sha512-j2MofoJbYeHJB8GsrcOjED7e7wl9k6yhEOFzt8TXz4Fn2aogO19gBn8KovrIQ9xFpXueNTcLre7lRUdZ3AeYBQ==", - "license": "BSD-2-Clause", - "dependencies": { - "@turf/boolean-contains": "^6.0.1", - "@turf/boolean-overlap": "^6.0.1", - "@turf/difference": "6.0.1", - "@turf/helpers": "^6.1.4", - "@turf/union": "^6.0.3", - "pbf": "3.1.0", - "pixelworks": "1.1.0", - "rbush": "2.0.2" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", - "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.4.tgz", - "integrity": "sha512-cz8HFjOFfUBtvN+NXYSFMHYRdxZMaEl0XypVrhzxBgadKIXhIkRd8aMeHhmF56Sl7SuS8OnUpQ73/k9LE4VnLg==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.10.tgz", - "integrity": "sha512-Ht8wIW5v165atIX1p+JvKR5ONzUyF4Ac8DZIQ5kZs9zrb6M8SJNXpx1zn04rn65VjBMygRoMXcyYwNK0fT7bEg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz", - "integrity": "sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@turf/area": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/area/-/area-6.5.0.tgz", - "integrity": "sha512-xCZdiuojokLbQ+29qR6qoMD89hv+JAgWjLrwSEWL+3JV8IXKeNFl6XkEJz9HGkVpnXvQKJoRz4/liT+8ZZ5Jyg==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bbox": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-6.5.0.tgz", - "integrity": "sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/bearing": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/bearing/-/bearing-6.5.0.tgz", - "integrity": "sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-contains": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-contains/-/boolean-contains-6.5.0.tgz", - "integrity": "sha512-4m8cJpbw+YQcKVGi8y0cHhBUnYT+QRfx6wzM4GI1IdtYH3p4oh/DOBJKrepQyiDzFDaNIjxuWXBh0ai1zVwOQQ==", - "dependencies": { - "@turf/bbox": "^6.5.0", - "@turf/boolean-point-in-polygon": "^6.5.0", - "@turf/boolean-point-on-line": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-overlap": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-overlap/-/boolean-overlap-6.5.0.tgz", - "integrity": "sha512-8btMIdnbXVWUa1M7D4shyaSGxLRw6NjMcqKBcsTXcZdnaixl22k7ar7BvIzkaRYN3SFECk9VGXfLncNS3ckQUw==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/line-intersect": "^6.5.0", - "@turf/line-overlap": "^6.5.0", - "@turf/meta": "^6.5.0", - "geojson-equality": "0.1.6" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-point-in-polygon": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.5.0.tgz", - "integrity": "sha512-DtSuVFB26SI+hj0SjrvXowGTUCHlgevPAIsukssW6BG5MlNSBQAo70wpICBNJL6RjukXg8d2eXaAWuD/CqL00A==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/boolean-point-on-line": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/boolean-point-on-line/-/boolean-point-on-line-6.5.0.tgz", - "integrity": "sha512-A1BbuQ0LceLHvq7F/P7w3QvfpmZqbmViIUPHdNLvZimFNLo4e6IQunmzbe+8aSStH9QRZm3VOflyvNeXvvpZEQ==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/destination": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/destination/-/destination-6.5.0.tgz", - "integrity": "sha512-4cnWQlNC8d1tItOz9B4pmJdWpXqS0vEvv65bI/Pj/genJnsL7evI0/Xw42RvEGROS481MPiU80xzvwxEvhQiMQ==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/difference": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@turf/difference/-/difference-6.0.1.tgz", - "integrity": "sha512-lkhJjNfPeLARQm232A851vVhrUvX3gdvTft5QlqkUlr7AzLpiT8PW14yEkU9xABxRh6PGv7T1UUVAeRgC7JxuA==", - "dependencies": { - "@turf/area": "6.x", - "@turf/helpers": "6.x", - "@turf/invariant": "6.x", - "@turf/meta": "6.x", - "martinez-polygon-clipping": "*" - } - }, - "node_modules/@turf/distance": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/distance/-/distance-6.5.0.tgz", - "integrity": "sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/helpers": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.5.0.tgz", - "integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==", - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/invariant": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.5.0.tgz", - "integrity": "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==", - "dependencies": { - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-intersect": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/line-intersect/-/line-intersect-6.5.0.tgz", - "integrity": "sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/line-segment": "^6.5.0", - "@turf/meta": "^6.5.0", - "geojson-rbush": "3.x" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-overlap": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/line-overlap/-/line-overlap-6.5.0.tgz", - "integrity": "sha512-xHOaWLd0hkaC/1OLcStCpfq55lPHpPNadZySDXYiYjEz5HXr1oKmtMYpn0wGizsLwrOixRdEp+j7bL8dPt4ojQ==", - "dependencies": { - "@turf/boolean-point-on-line": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/line-segment": "^6.5.0", - "@turf/meta": "^6.5.0", - "@turf/nearest-point-on-line": "^6.5.0", - "deep-equal": "1.x", - "geojson-rbush": "3.x" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/line-segment": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/line-segment/-/line-segment-6.5.0.tgz", - "integrity": "sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/meta": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-6.5.0.tgz", - "integrity": "sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA==", - "dependencies": { - "@turf/helpers": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/nearest-point-on-line": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/nearest-point-on-line/-/nearest-point-on-line-6.5.0.tgz", - "integrity": "sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg==", - "dependencies": { - "@turf/bearing": "^6.5.0", - "@turf/destination": "^6.5.0", - "@turf/distance": "^6.5.0", - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "@turf/line-intersect": "^6.5.0", - "@turf/meta": "^6.5.0" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@turf/union": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@turf/union/-/union-6.5.0.tgz", - "integrity": "sha512-igYWCwP/f0RFHIlC2c0SKDuM/ObBaqSljI3IdV/x71805QbIvY/BYGcJdyNcgEA6cylIGl/0VSlIbpJHZ9ldhw==", - "dependencies": { - "@turf/helpers": "^6.5.0", - "@turf/invariant": "^6.5.0", - "polygon-clipping": "^0.15.3" - }, - "funding": { - "url": "https://opencollective.com/turf" - } - }, - "node_modules/@types/babel__core": { - "version": "7.1.18", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.18.tgz", - "integrity": "sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.14.2", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", - "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/clean-css": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.5.tgz", - "integrity": "sha512-NEzjkGGpbs9S9fgC4abuBvTpVwE3i+Acu9BBod3PUyjDVZcNsGx61b8r2PphR61QGPnn0JHVs5ey6/I4eTrkxw==", - "dev": true, - "dependencies": { - "@types/node": "*", - "source-map": "^0.6.0" - } - }, - "node_modules/@types/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.1.tgz", - "integrity": "sha512-GE44+DNEyxxh2Kc6ro/VkIj+9ma0pO0bwv9+uHSyBrikYOHr8zYcdPvnBOp1aw8s+CjRvuSx7CyWqRrNFQ59mA==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz", - "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.50", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz", - "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", - "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.28", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", - "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/geojson": { - "version": "7946.0.8", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", - "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==" - }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/http-proxy": { - "version": "1.17.8", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", - "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/imagemin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-8.0.0.tgz", - "integrity": "sha512-B9X2CUeDv/uUeY9CqkzSTfmsLkeJP6PkmXlh4lODBbf9SwpmNuLS30WzUOi863dgsjY3zt3gY5q2F+UdifRi1A==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/imagemin-gifsicle": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-gifsicle/-/imagemin-gifsicle-7.0.1.tgz", - "integrity": "sha512-kUz6sUh0P95JOS0RGEaaemWUrASuw+dLsWIveK2UZJx74id/B9epgblMkCk/r5MjUWbZ83wFvacG5Rb/f97gyA==", - "dev": true, - "dependencies": { - "@types/imagemin": "*" - } - }, - "node_modules/@types/imagemin-mozjpeg": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-mozjpeg/-/imagemin-mozjpeg-8.0.1.tgz", - "integrity": "sha512-kMQWEoKxxhlnH4POI3qfW9DjXlQfi80ux3l2b3j5R3eudSCoUIzKQLkfMjNJ6eMYnMWBcB+rfQOWqIzdIwFGKw==", - "dev": true, - "dependencies": { - "@types/imagemin": "*" - } - }, - "node_modules/@types/imagemin-optipng": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-optipng/-/imagemin-optipng-5.2.1.tgz", - "integrity": "sha512-XCM/3q+HUL7v4zOqMI+dJ5dTxT+MUukY9KU49DSnYb/4yWtSMHJyADP+WHSMVzTR63J2ZvfUOzSilzBNEQW78g==", - "dev": true, - "dependencies": { - "@types/imagemin": "*" - } - }, - "node_modules/@types/imagemin-svgo": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@types/imagemin-svgo/-/imagemin-svgo-8.0.1.tgz", - "integrity": "sha512-YafkdrVAcr38U0Ln1C+L1n4SIZqC47VBHTyxCq7gTUSd1R9MdIvMcrljWlgU1M9O68WZDeQWUrKipKYfEOCOvQ==", - "dev": true, - "dependencies": { - "@types/imagemin": "*", - "@types/svgo": "^1" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", - "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "17.0.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", - "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "node_modules/@types/retry": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", - "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", - "dev": true - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.13.10", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", - "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/svgo": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.6.tgz", - "integrity": "sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug==", - "dev": true - }, - "node_modules/@types/ws": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", - "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vue/component-compiler-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", - "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", - "dev": true, - "dependencies": { - "consolidate": "^0.15.1", - "hash-sum": "^1.0.2", - "lru-cache": "^4.1.2", - "merge-source-map": "^1.1.0", - "postcss": "^7.0.36", - "postcss-selector-parser": "^6.0.2", - "source-map": "~0.6.1", - "vue-template-es2015-compiler": "^1.9.0" - }, - "optionalDependencies": { - "prettier": "^1.18.2 || ^2.0.0" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/@vue/component-compiler-utils/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/@vue/component-compiler-utils/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", - "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", - "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", - "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-3.0.0.tgz", - "integrity": "sha512-YBrGyT2/uVQ/c6Rr+t6ZJXniY03YtHGMJQYal368burRGYKqhx9qGTWqcBU5s1CwYY9E/ri63RYyG1IacMZtqw==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha1-2edrEXM+CFacCEeuezmyhgswt0U=", - "dev": true - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" - } - }, - "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "dependencies": { - "inherits": "2.0.1" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz", - "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.19.1", - "caniuse-lite": "^1.0.30001297", - "fraction.js": "^4.1.2", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/babel-loader": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz", - "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==", - "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", - "dev": true - }, - "node_modules/body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", - "dev": true, - "dependencies": { - "bytes": "3.1.1", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.6", - "raw-body": "2.4.2", - "type-is": "~1.6.18" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/bonjour": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", - "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/browserify-sign/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "dependencies": { - "pako": "~1.0.5" - } - }, - "node_modules/browserslist": { - "version": "4.19.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", - "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30001286", - "electron-to-chromium": "^1.4.17", - "escalade": "^3.1.1", - "node-releases": "^2.0.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-indexof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", - "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001311", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001311.tgz", - "integrity": "sha512-mleTFtFKfykEeW34EyfhGIFjGCqzhh38Y0LhdQ9aWF+HorZTtdgKV/1hEE0NlFkG2ubvisPV6l400tlbPys98A==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/clean-css": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz", - "integrity": "sha512-nKseG8wCzEuji/4yrgM/5cthL9oTDc5UOQyFMvW/Q53oP6gLH690o1NbuTh6Y18nujr7BxlsFuS7gXLnLzKJGg==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-table3": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.1.tgz", - "integrity": "sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "colors": "1.4.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/collect.js": { - "version": "4.31.3", - "resolved": "https://registry.npmjs.org/collect.js/-/collect.js-4.31.3.tgz", - "integrity": "sha512-pHXhGzo5qftTTlEj88MCRXN8YuhARhmEnCOmc7wzBlI+5fVVC5VZ9Z/Z5KEDuM90Fgwv025Fc2Gk4VpFKMrzQA==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha1-ntZ18TzFRQHTCVCkhv9qe6OrGF8=", - "dev": true, - "dependencies": { - "arity-n": "^1.0.4" - } - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/concat": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/concat/-/concat-1.0.3.tgz", - "integrity": "sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=", - "dev": true, - "dependencies": { - "commander": "^2.9.0" - }, - "bin": { - "concat": "bin/concat" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/concat/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/connect-history-api-fallback": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", - "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", - "dev": true - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "node_modules/consolidate": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", - "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", - "dev": true, - "dependencies": { - "bluebird": "^3.1.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true - }, - "node_modules/core-js-compat": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.21.0.tgz", - "integrity": "sha512-OSXseNPSK2OPJa6GdtkMz/XxeXx8/CJvfhQWTqd6neuUraujcL4jVsjkLQz1OWnax8xVQJnRPe0V2jqNWORA+A==", - "dev": true, - "dependencies": { - "browserslist": "^4.19.1", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/cross-env": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.1.tgz", - "integrity": "sha512-1yHhtcfAd1r4nwQgknowuUNfIT9E8dOMMspC36g45dN+iD1blloi7xp8X/xAIDnjHWyt1uQ8PHk2fkNaym7soQ==", - "dev": true, - "dependencies": { - "cross-spawn": "^6.0.5" - }, - "bin": { - "cross-env": "dist/bin/cross-env.js", - "cross-env-shell": "dist/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", - "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", - "dev": true, - "dependencies": { - "timsort": "^0.3.0" - }, - "engines": { - "node": ">= 10" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-loader": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.6.0.tgz", - "integrity": "sha512-FK7H2lisOixPT406s5gZM1S3l8GrfhEBT3ZiL2UX1Ng1XWs0y2GPllz/OTyvbaHe12VgQrIXIzuEGVlbUhodqg==", - "dev": true, - "peer": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.5", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "peer": true - }, - "node_modules/css-select": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", - "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select/node_modules/domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.0.17", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.17.tgz", - "integrity": "sha512-fmjLP7k8kL18xSspeXTzRhaFtRI7DL9b8IcXR80JgtnWBpvAzHT7sCR/6qdn0tnxIaINUN6OEQu83wF57Gs3Xw==", - "dev": true, - "dependencies": { - "cssnano-preset-default": "^5.1.12", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.1.12", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.12.tgz", - "integrity": "sha512-rO/JZYyjW1QNkWBxMGV28DW7d98UDLaF759frhli58QFehZ+D/LSmwQ2z/ylBAe2hUlsIWTq6NYGfQPq65EF9w==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^3.0.2", - "postcss-calc": "^8.2.0", - "postcss-colormin": "^5.2.5", - "postcss-convert-values": "^5.0.4", - "postcss-discard-comments": "^5.0.3", - "postcss-discard-duplicates": "^5.0.3", - "postcss-discard-empty": "^5.0.3", - "postcss-discard-overridden": "^5.0.4", - "postcss-merge-longhand": "^5.0.6", - "postcss-merge-rules": "^5.0.6", - "postcss-minify-font-values": "^5.0.4", - "postcss-minify-gradients": "^5.0.6", - "postcss-minify-params": "^5.0.5", - "postcss-minify-selectors": "^5.1.3", - "postcss-normalize-charset": "^5.0.3", - "postcss-normalize-display-values": "^5.0.3", - "postcss-normalize-positions": "^5.0.4", - "postcss-normalize-repeat-style": "^5.0.4", - "postcss-normalize-string": "^5.0.4", - "postcss-normalize-timing-functions": "^5.0.3", - "postcss-normalize-unicode": "^5.0.4", - "postcss-normalize-url": "^5.0.5", - "postcss-normalize-whitespace": "^5.0.4", - "postcss-ordered-values": "^5.0.5", - "postcss-reduce-initial": "^5.0.3", - "postcss-reduce-transforms": "^5.0.4", - "postcss-svgo": "^5.0.4", - "postcss-unique-selectors": "^5.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.2.tgz", - "integrity": "sha512-KhprijuQv2sP4kT92sSQwhlK3SJTbDIsxcfIEySB0O+3m9esFOai7dP9bMx5enHAh2MwarVIcnwiWoOm01RIbQ==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dev": true, - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/del/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/del/node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true - }, - "node_modules/dns-packet": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", - "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", - "dev": true, - "dependencies": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/dns-txt": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", - "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", - "dev": true, - "dependencies": { - "buffer-indexof": "^1.0.0" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/dom-serializer/node_modules/domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", - "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/domutils/node_modules/domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.68", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.68.tgz", - "integrity": "sha512-cId+QwWrV8R1UawO6b9BR1hnkJ4EJPCPAr4h315vliHUtVUJDk39Sg1PMNnaWKfj5x+93ssjeJ9LKL6r8LaMiA==", - "dev": true - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.0.tgz", - "integrity": "sha512-weDYmzbBygL7HzGGS26M3hGQx68vehdEg6VUmqSOaFzXExFqlnKuSvsEJCVGQHScS8CQMbrAqftT+AzzHNt/YA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-vue": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-7.20.0.tgz", - "integrity": "sha512-oVNDqzBC9h3GO+NTgWeLMhhGigy6/bQaQbHS+0z7C4YEu/qK/yxHvca/2PTZtGNPsCrHwOTgKMrwu02A9iPBmw==", - "dev": true, - "dependencies": { - "eslint-utils": "^2.1.0", - "natural-compare": "^1.4.0", - "semver": "^6.3.0", - "vue-eslint-parser": "^7.10.0" - }, - "engines": { - "node": ">=8.10" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-vue/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-vue/node_modules/espree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", - "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-jsx": "^5.2.0", - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/eslint-plugin-vue/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-vue/node_modules/vue-eslint-parser": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", - "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "eslint-scope": "^5.1.1", - "eslint-visitor-keys": "^1.1.0", - "espree": "^6.2.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8.10" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/eslint/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/eslint/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/execa/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/execa/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/execa/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/execa/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/express": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", - "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", - "dev": true, - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.4.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.9.6", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", - "setprototypeof": "1.2.0", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "dev": true, - "dependencies": { - "type": "^2.5.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.0.tgz", - "integrity": "sha512-eiDBDOmkih5pMbo9OqsqPRGMljLodLcwd5XD5JbtNB0o89xZAwynY9EdCDsJU7LtcVCClu9DvM7/0Ep1hYX3EQ==", - "dev": true - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/file-type": { - "version": "12.4.2", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-12.4.2.tgz", - "integrity": "sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.14.8", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", - "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.3.tgz", - "integrity": "sha512-pUHWWt6vHzZZiQJcM6S/0PXfS+g6FM4BF5rj9wZyreivhQPdsh5PpE25VtSNxq80wHS5RfY51Ii+8Z0Zl/pmzg==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/geojson-equality": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/geojson-equality/-/geojson-equality-0.1.6.tgz", - "integrity": "sha1-oXE3TvBD5dR5eZWEC65GSOB1LXI=", - "dependencies": { - "deep-equal": "^1.0.0" - } - }, - "node_modules/geojson-rbush": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/geojson-rbush/-/geojson-rbush-3.2.0.tgz", - "integrity": "sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w==", - "dependencies": { - "@turf/bbox": "*", - "@turf/helpers": "6.x", - "@turf/meta": "6.x", - "@types/geojson": "7946.0.8", - "rbush": "^3.0.1" - } - }, - "node_modules/geojson-rbush/node_modules/quickselect": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", - "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" - }, - "node_modules/geojson-rbush/node_modules/rbush": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", - "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", - "dependencies": { - "quickselect": "^2.0.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/globals": { - "version": "13.12.1", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.1.tgz", - "integrity": "sha512-317dFlgY2pdJZ9rspXDks7073GpDmXdfbM3vYYp0HAMKGDh1FfWPleI2ljVNLQX5M5lXcAslTcPTrOrMEFOjyw==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", - "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", - "dev": true, - "dependencies": { - "@types/glob": "^7.1.1", - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.0.3", - "glob": "^7.1.3", - "ignore": "^5.1.1", - "merge2": "^1.2.3", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/globby/node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, - "node_modules/growly": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", - "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", - "dev": true - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/hash-sum": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", - "dev": true - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", - "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", - "dev": true - }, - "node_modules/html-loader": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-1.3.2.tgz", - "integrity": "sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==", - "dev": true, - "dependencies": { - "html-minifier-terser": "^5.1.1", - "htmlparser2": "^4.1.0", - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/html-loader/node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/html-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/html-minifier-terser": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", - "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", - "dev": true, - "dependencies": { - "camel-case": "^4.1.1", - "clean-css": "^4.2.3", - "commander": "^4.1.1", - "he": "^1.2.0", - "param-case": "^3.0.3", - "relateurl": "^0.2.7", - "terser": "^4.6.3" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/html-minifier-terser/node_modules/clean-css": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz", - "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/html-minifier-terser/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/htmlparser2": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-4.1.0.tgz", - "integrity": "sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^3.0.0", - "domutils": "^2.0.0", - "entities": "^2.0.0" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true - }, - "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", - "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.3.tgz", - "integrity": "sha512-1bloEwnrHMnCoO/Gcwbz7eSVvW50KPES01PecpagI+YLNLci4AcuKJrujW4Mc3sBLpFxMSlsLNHS5Nl/lvrTPA==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/imagemin": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/imagemin/-/imagemin-7.0.1.tgz", - "integrity": "sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==", - "dev": true, - "dependencies": { - "file-type": "^12.0.0", - "globby": "^10.0.0", - "graceful-fs": "^4.2.2", - "junk": "^3.1.0", - "make-dir": "^3.0.0", - "p-pipe": "^3.0.0", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/img-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-4.0.0.tgz", - "integrity": "sha512-UwRcPQdwdOyEHyCxe1V9s9YFwInwEWCpoO+kJGfIqDrBDqA8jZUsEZTxQ0JteNPGw/Gupmwesk2OhLTcnw6tnQ==", - "dev": true, - "dependencies": { - "loader-utils": "^1.1.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "imagemin": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/immutable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", - "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "dev": true - }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", - "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", - "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/junk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz", - "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/laravel-mix": { - "version": "6.0.41", - "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-6.0.41.tgz", - "integrity": "sha512-LA6ep2kUritCzvePgza98Ge2wmlntYSmd1mJx0BwRqyP6x8vMbh9VnMesTm5ezZql83mXI+hFumRCEBxzAnZaQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.15.8", - "@babel/plugin-proposal-object-rest-spread": "^7.15.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.15.8", - "@babel/preset-env": "^7.15.8", - "@babel/runtime": "^7.15.4", - "@types/babel__core": "^7.1.16", - "@types/clean-css": "^4.2.5", - "@types/imagemin-gifsicle": "^7.0.1", - "@types/imagemin-mozjpeg": "^8.0.1", - "@types/imagemin-optipng": "^5.2.1", - "@types/imagemin-svgo": "^8.0.0", - "autoprefixer": "^10.4.0", - "babel-loader": "^8.2.3", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "clean-css": "^4.2.3 || ^5.1.2", - "cli-table3": "^0.6.0", - "collect.js": "^4.28.5", - "commander": "^7.2.0", - "concat": "^1.0.3", - "css-loader": "^5.2.6", - "cssnano": "^5.0.8", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "glob": "^7.2.0", - "html-loader": "^1.3.2", - "imagemin": "^7.0.1", - "img-loader": "^4.0.0", - "lodash": "^4.17.21", - "md5": "^2.3.0", - "mini-css-extract-plugin": "^1.6.2", - "node-libs-browser": "^2.2.1", - "postcss-load-config": "^3.1.0", - "postcss-loader": "^6.2.0", - "semver": "^7.3.5", - "strip-ansi": "^6.0.0", - "style-loader": "^2.0.0", - "terser": "^5.9.0", - "terser-webpack-plugin": "^5.2.4", - "vue-style-loader": "^4.1.3", - "webpack": "^5.60.0", - "webpack-cli": "^4.9.1", - "webpack-dev-server": "^4.7.3", - "webpack-merge": "^5.8.0", - "webpack-notifier": "^1.14.1", - "webpackbar": "^5.0.0-3", - "yargs": "^17.2.1" - }, - "bin": { - "laravel-mix": "bin/cli.js", - "mix": "bin/cli.js" - }, - "engines": { - "node": ">=12.14.0" - }, - "peerDependencies": { - "@babel/core": "^7.15.8", - "@babel/plugin-proposal-object-rest-spread": "^7.15.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.15.8", - "@babel/preset-env": "^7.15.8", - "postcss": "^8.3.11", - "webpack": "^5.60.0", - "webpack-cli": "^4.9.1" - } - }, - "node_modules/laravel-mix-artisan-publish": { - "version": "1.0.0", - "resolved": "git+ssh://git@github.com/mzur/laravel-mix-artisan-publish.git#feafb9ba2359d41fddb025bccb4380e9b044783f", - "dev": true, - "license": "MIT", - "dependencies": { - "node-cmd": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "laravel-mix": "^4.0||^5.0||^6.0" - } - }, - "node_modules/laravel-mix/node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/laravel-mix/node_modules/css-loader": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz", - "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.15", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.1.0", - "schema-utils": "^3.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.27.0 || ^5.0.0" - } - }, - "node_modules/laravel-mix/node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/laravel-mix/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/laravel-mix/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/laravel-mix/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/laravel-mix/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/laravel-mix/node_modules/terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "acorn": "^8.5.0" - }, - "peerDependenciesMeta": { - "acorn": { - "optional": true - } - } - }, - "node_modules/laravel-mix/node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/laravel-mix/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lilconfig": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", - "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/loader-utils/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/martinez-polygon-clipping": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.7.1.tgz", - "integrity": "sha512-Xt5hOjAVkRoGN7kUb/0VmkxcG07Ja+OA3qU+7YcY2pAlJ78V1G181VTozHCXpzlj0paNBbcLno77mcGeGStI0A==", - "dependencies": { - "robust-predicates": "^2.0.4", - "splaytree": "^0.1.4", - "tinyqueue": "^1.2.0" - } - }, - "node_modules/md5": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", - "dev": true, - "dependencies": { - "charenc": "0.0.2", - "crypt": "0.0.2", - "is-buffer": "~1.1.6" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.1.tgz", - "integrity": "sha512-1c9VPVvW5P7I85c35zAdEr1TD5+F11IToIHIlrVIcflfnzPkJa0ZoYEoEdYDP8KgPFoSZ/opDrUsAoZWym3mtw==", - "dev": true, - "dependencies": { - "fs-monkey": "1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "node_modules/merge-source-map": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", - "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", - "dev": true, - "dependencies": { - "source-map": "^0.6.1" - } - }, - "node_modules/merge-source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-1.6.2.tgz", - "integrity": "sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0", - "webpack-sources": "^1.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/multicast-dns": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", - "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", - "dev": true, - "dependencies": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/multicast-dns-service-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", - "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-cmd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/node-cmd/-/node-cmd-3.0.0.tgz", - "integrity": "sha1-OP/3CkqqT2WdID61eGJzcBjiT28=", - "dev": true - }, - "node_modules/node-forge": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.0.tgz", - "integrity": "sha512-08ARB91bUi6zNKzVmaj3QO7cr397uiDT2nJ63cHjyNtCTWIgvS47j3eT0WfzUwS9+6Z5YshRaoasFkXCKrIYbA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-notifier": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", - "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", - "dev": true, - "dependencies": { - "growly": "^1.3.0", - "is-wsl": "^2.2.0", - "semver": "^7.3.2", - "shellwords": "^0.1.1", - "uuid": "^8.3.0", - "which": "^2.0.2" - } - }, - "node_modules/node-notifier/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-notifier/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-notifier/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/node-notifier/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.2.tgz", - "integrity": "sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", - "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", - "dev": true, - "dependencies": { - "@types/retry": "^0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pbf": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz", - "integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==", - "dependencies": { - "ieee754": "^1.1.6", - "resolve-protobuf-schema": "^2.0.0" - }, - "bin": { - "pbf": "bin/pbf" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pixelworks": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pixelworks/-/pixelworks-1.1.0.tgz", - "integrity": "sha1-Hwla1I3Ki/ihyCWOAJIDGkTyLKU=" - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/polygon-clipping": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.3.tgz", - "integrity": "sha512-ho0Xx5DLkgxRx/+n4O74XyJ67DcyN3Tu9bGYKsnTukGAW6ssnuak6Mwcyb1wHy9MZc9xsUWqIoiazkZB5weECg==", - "dependencies": { - "splaytree": "^3.1.0" - } - }, - "node_modules/polygon-clipping/node_modules/splaytree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.0.tgz", - "integrity": "sha512-gvUGR7xnOy0fLKTCxDeUZYgU/I1Tdf8M/lM1Qrf8L2TIOR5ipZjGk02uYcdv0o2x7WjVRgpm3iS2clLyuVAt0Q==" - }, - "node_modules/portfinder": { - "version": "1.0.28", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", - "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", - "dev": true, - "dependencies": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.5" - }, - "engines": { - "node": ">= 0.12.0" - } - }, - "node_modules/portfinder/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/postcss": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", - "integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", - "dev": true, - "dependencies": { - "nanoid": "^3.2.0", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.2.5", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.5.tgz", - "integrity": "sha512-+X30aDaGYq81mFqwyPpnYInsZQnNpdxMX0ajlY7AExCexEFkPVV+KrO7kXwayqEWL2xwEbNQ4nUO0ZsRWGnevg==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.4.tgz", - "integrity": "sha512-bugzSAyjIexdObovsPZu/sBCTHccImJxLyFgeV0MmNBm/Lw5h5XnjfML6gzEmJ3A6nyfCW7hb1JXzcsA4Zfbdw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.3.tgz", - "integrity": "sha512-6W5BemziRoqIdAKT+1QjM4bNcJAQ7z7zk073730NHg4cUXh3/rQHHj7pmYxUB9aGhuRhBiUf0pXvIHkRwhQP0Q==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.3.tgz", - "integrity": "sha512-vPtm1Mf+kp7iAENTG7jI1MN1lk+fBqL5y+qxyi4v3H+lzsXEdfS3dwUZD45KVhgzDEgduur8ycB4hMegyMTeRw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.3.tgz", - "integrity": "sha512-xGJugpaXKakwKI7sSdZjUuN4V3zSzb2Y0LOlmTajFbNinEjTfVs9PFW2lmKBaC/E64WwYppfqLD03P8l9BuueA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.4.tgz", - "integrity": "sha512-3j9QH0Qh1KkdxwiZOW82cId7zdwXVQv/gRXYDnwx5pBtR1sTkU4cXRK9lp5dSdiM0r0OICO/L8J6sV1/7m0kHg==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-load-config": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz", - "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.4", - "yaml": "^1.10.2" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/postcss-merge-longhand": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.6.tgz", - "integrity": "sha512-rkmoPwQO6ymJSmWsX6l2hHeEBQa7C4kJb9jyi5fZB1sE8nSCv7sqchoYPixRwX/yvLoZP2y6FA5kcjiByeJqDg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.0.3" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.6.tgz", - "integrity": "sha512-nzJWJ9yXWp8AOEpn/HFAW72WKVGD2bsLiAmgw4hDchSij27bt6TF+sIK0cJUBAYT3SGcjtGGsOR89bwkkMuMgQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.0.2", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.4.tgz", - "integrity": "sha512-RN6q3tyuEesvyCYYFCRGJ41J1XFvgV+dvYGHr0CeHv8F00yILlN8Slf4t8XW4IghlfZYCeyRrANO6HpJ948ieA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.6.tgz", - "integrity": "sha512-E/dT6oVxB9nLGUTiY/rG5dX9taugv9cbLNTFad3dKxOO+BQg25Q/xo2z2ddG+ZB1CbkZYaVwx5blY8VC7R/43A==", - "dev": true, - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.5.tgz", - "integrity": "sha512-YBNuq3Rz5LfLFNHb9wrvm6t859b8qIqfXsWeK7wROm3jSKNpO1Y5e8cOyBv6Acji15TgSrAwb3JkVNCqNyLvBg==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.3.tgz", - "integrity": "sha512-9RJfTiQEKA/kZhMaEXND893nBqmYQ8qYa/G+uPdVnXF6D/FzpfI6kwBtWEcHx5FqDbA79O9n6fQJfrIj6M8jvQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.3.tgz", - "integrity": "sha512-iKEplDBco9EfH7sx4ut7R2r/dwTnUqyfACf62Unc9UiyFuI7uUqZZtY+u+qp7g8Qszl/U28HIfcsI3pEABWFfA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.3.tgz", - "integrity": "sha512-FIV5FY/qs4Ja32jiDb5mVj5iWBlS3N8tFcw2yg98+8MkRgyhtnBgSC0lxU+16AMHbjX5fbSJgw5AXLMolonuRQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.4.tgz", - "integrity": "sha512-qynirjBX0Lc73ROomZE3lzzmXXTu48/QiEzKgMeqh28+MfuHLsuqC9po4kj84igZqqFGovz8F8hf44hA3dPYmQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.4.tgz", - "integrity": "sha512-Innt+wctD7YpfeDR7r5Ik6krdyppyAg2HBRpX88fo5AYzC1Ut/l3xaxACG0KsbX49cO2n5EB13clPwuYVt8cMA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.4.tgz", - "integrity": "sha512-Dfk42l0+A1CDnVpgE606ENvdmksttLynEqTQf5FL3XGQOyqxjbo25+pglCUvziicTxjtI2NLUR6KkxyUWEVubQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.3.tgz", - "integrity": "sha512-QRfjvFh11moN4PYnJ7hia4uJXeFotyK3t2jjg8lM9mswleGsNw2Lm3I5wO+l4k1FzK96EFwEVn8X8Ojrp2gP4g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.4.tgz", - "integrity": "sha512-W79Regn+a+eXTzB+oV/8XJ33s3pDyFTND2yDuUCo0Xa3QSy1HtNIfRVPXNubHxjhlqmMFADr3FSCHT84ITW3ig==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.5.tgz", - "integrity": "sha512-Ws3tX+PcekYlXh+ycAt0wyzqGthkvVtZ9SZLutMVvHARxcpu4o7vvXcNoiNKyjKuWecnjS6HDI3fjBuDr5MQxQ==", - "dev": true, - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.4.tgz", - "integrity": "sha512-wsnuHolYZjMwWZJoTC9jeI2AcjA67v4UuidDrPN9RnX8KIZfE+r2Nd6XZRwHVwUiHmRvKQtxiqo64K+h8/imaw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.5.tgz", - "integrity": "sha512-mfY7lXpq+8bDEHfP+muqibDPhZ5eP9zgBEF9XRvoQgXcQe2Db3G1wcvjbnfjXG6wYsl+0UIjikqq4ym1V2jGMQ==", - "dev": true, - "dependencies": { - "cssnano-utils": "^3.0.2", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.3.tgz", - "integrity": "sha512-c88TkSnQ/Dnwgb4OZbKPOBbCaauwEjbECP5uAuFPOzQ+XdjNjRH7SG0dteXrpp1LlIFEKK76iUGgmw2V0xeieA==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.4.tgz", - "integrity": "sha512-VIJB9SFSaL8B/B7AXb7KHL6/GNNbbCHslgdzS9UDfBZYIA2nx8NLY7iD/BXFSO/1sRUILzBTfHCoW5inP37C5g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", - "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.4.tgz", - "integrity": "sha512-yDKHvULbnZtIrRqhZoA+rxreWpee28JSRH/gy9727u0UCgtpv1M/9WEWY3xySlFa0zQJcqf6oCBJPR5NwkmYpg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.4.tgz", - "integrity": "sha512-5ampwoSDJCxDPoANBIlMgoBcYUHnhaiuLYJR5pj1DLnYQvMRVyFuTA5C3Bvt+aHtiqWpJkD/lXT50Vo1D0ZsAQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.5.1.tgz", - "integrity": "sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==", - "dev": true, - "optional": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/protocol-buffers-schema": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", - "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - }, - "node_modules/qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", - "dev": true, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quickselect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.1.1.tgz", - "integrity": "sha512-qN0Gqdw4c4KGPsBOQafj6yj/PA6c/L63f6CaZ/DCF/xF4Esu3jVmKLUDYxghFx8Kb/O7y9tI7x2RjTSXwdK1iQ==" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", - "dev": true, - "dependencies": { - "bytes": "3.1.1", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rbush": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.2.tgz", - "integrity": "sha512-XBOuALcTm+O/H8G90b6pzu6nX6v2zCKiFG4BJho8a+bY6AER6t8uQUZdi5bomQc0AprCWhEGa7ncAbbRap0bRA==", - "dependencies": { - "quickselect": "^1.0.1" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", - "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", - "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.0.1.tgz", - "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-protobuf-schema": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", - "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", - "dependencies": { - "protocol-buffers-schema": "^3.3.1" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/resolve-url-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-3.1.4.tgz", - "integrity": "sha512-D3sQ04o0eeQEySLrcz4DsX3saHfsr8/N6tfhblxgZKXxMT2Louargg12oGNfoTRLV09GXhVUe5/qgA5vdgNigg==", - "dev": true, - "dependencies": { - "adjust-sourcemap-loader": "3.0.0", - "camelcase": "5.3.1", - "compose-function": "3.0.3", - "convert-source-map": "1.7.0", - "es6-iterator": "2.0.3", - "loader-utils": "1.2.3", - "postcss": "7.0.36", - "rework": "1.0.1", - "rework-visit": "1.0.0", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/resolve-url-loader/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/resolve-url-loader/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/resolve-url-loader/node_modules/convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/resolve-url-loader/node_modules/emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve-url-loader/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/resolve-url-loader/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.36", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", - "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-url-loader/node_modules/supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rework": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", - "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", - "dev": true, - "dependencies": { - "convert-source-map": "^0.3.3", - "css": "^2.0.0" - } - }, - "node_modules/rework-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", - "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", - "dev": true - }, - "node_modules/rework/node_modules/convert-source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", - "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", - "dev": true - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/robust-predicates": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-2.0.4.tgz", - "integrity": "sha512-l4NwboJM74Ilm4VKfbAtFeGq7aEjWL+5kVFcmgFA2MrdnQWx9iE/tUGvxY5HyMI7o/WpSIUFLbC5fbeaHgSCYg==" - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sass": { - "version": "1.49.7", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.7.tgz", - "integrity": "sha512-13dml55EMIR2rS4d/RDHHP0sXMY3+30e1TKsyXaSz3iLWVoDWEoboY8WzJd5JMnxrRHffKO3wq2mpJ0jxRJiEQ==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/sass-loader": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", - "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "loader-utils": "^1.2.3", - "neo-async": "^2.6.1", - "schema-utils": "^2.6.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0", - "sass": "^1.3.0", - "webpack": "^4.36.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - } - } - }, - "node_modules/sass-loader/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz", - "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==", - "dev": true, - "dependencies": { - "node-forge": "^1.2.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "1.8.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shellwords": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", - "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", - "dev": true - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/spdy-transport/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/splaytree": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-0.1.4.tgz", - "integrity": "sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ==" - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/std-env": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.0.1.tgz", - "integrity": "sha512-mC1Ps9l77/97qeOZc+HrOL7TIaOboHqMZ24dGVQrlxFcpPpfCHpH+qfUT7Dz+6mlG8+JPA1KfBQo19iC/+Ngcw==", - "dev": true - }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-loader": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz", - "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/style-loader/node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/style-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/stylehacks": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.3.tgz", - "integrity": "sha512-ENcUdpf4yO0E1rubu8rkxI+JGQk4CgjchynZ4bDBJDfqdy+uhTRSWb8/F3Jtu+Bw5MW45Po3/aQGeIyyxgQtxg==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.1.tgz", - "integrity": "sha512-GvlZdT6wPQKbDNW/GDQzZFg/j4vKU96yl2q6mcUkzKOgW4gwf1Z8cZToUCrz31XHlPWH8MVb1r2tFtdDtTGJ7g==", - "dev": true, - "dependencies": { - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1", - "terser": "^5.7.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "optional": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", - "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "acorn": "^8.5.0" - }, - "peerDependenciesMeta": { - "acorn": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/terser/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/terser/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, - "node_modules/tinyqueue": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-1.2.3.tgz", - "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA==" - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tslib": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", - "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", - "dev": true - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - }, - "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "node_modules/vue-hot-reload-api": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", - "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", - "dev": true - }, - "node_modules/vue-loader": { - "version": "15.9.8", - "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.8.tgz", - "integrity": "sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==", - "dev": true, - "dependencies": { - "@vue/component-compiler-utils": "^3.1.0", - "hash-sum": "^1.0.2", - "loader-utils": "^1.1.0", - "vue-hot-reload-api": "^2.3.0", - "vue-style-loader": "^4.1.0" - }, - "peerDependencies": { - "css-loader": "*", - "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" - }, - "peerDependenciesMeta": { - "cache-loader": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/vue-style-loader": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", - "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", - "dev": true, - "dependencies": { - "hash-sum": "^1.0.2", - "loader-utils": "^1.0.2" - } - }, - "node_modules/vue-template-compiler": { - "version": "2.6.14", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz", - "integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==", - "dev": true, - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.1.0" - } - }, - "node_modules/vue-template-es2015-compiler": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", - "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", - "dev": true - }, - "node_modules/watchpack": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", - "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/webpack": { - "version": "5.68.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.68.0.tgz", - "integrity": "sha512-zUcqaUO0772UuuW2bzaES2Zjlm/y3kRBQDVFVCge+s2Y8mwuUTdperGaAv65/NtRL/1zanpSJOq/MD8u61vo6g==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.50", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "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", - "graceful-fs": "^4.2.9", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", - "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.1.1", - "@webpack-cli/info": "^1.4.1", - "@webpack-cli/serve": "^1.6.1", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.1.tgz", - "integrity": "sha512-81EujCKkyles2wphtdrnPg/QqegC/AtqNH//mQkBYSMqwFVCQrxM6ktB2O/SPlZy7LqeEfTbV3cZARGQz6umhg==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.1", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.4.tgz", - "integrity": "sha512-nfdsb02Zi2qzkNmgtZjkrMOcXnYZ6FLKcQwpxT7MvmHKc+oTtDsBju8j+NMyAygZ9GW1jMEUpy3itHtqgEhe1A==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.2.2", - "ansi-html-community": "^0.0.8", - "bonjour": "^3.5.0", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^1.6.0", - "default-gateway": "^6.0.3", - "del": "^6.0.0", - "express": "^4.17.1", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.0", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "portfinder": "^1.0.28", - "schema-utils": "^4.0.0", - "selfsigned": "^2.0.0", - "serve-index": "^1.9.1", - "sockjs": "^0.3.21", - "spdy": "^4.0.2", - "strip-ansi": "^7.0.0", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-server/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-notifier": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.15.0.tgz", - "integrity": "sha512-N2V8UMgRB5komdXQRavBsRpw0hPhJq2/SWNOGuhrXpIgRhcMexzkGQysUyGStHLV5hkUlgpRiF7IUXoBqyMmzQ==", - "dev": true, - "dependencies": { - "node-notifier": "^9.0.0", - "strip-ansi": "^6.0.0" - }, - "peerDependencies": { - "@types/webpack": ">4.41.31" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack-sources/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack/node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack/node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/ws": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", - "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", - "integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", - "dev": true, - "engines": { - "node": ">=12" - } - } - }, "dependencies": { "@ampproject/remapping": { "version": "2.1.0", @@ -13391,8 +2040,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", - "dev": true, - "requires": {} + "dev": true }, "@webpack-cli/info": { "version": "1.4.1", @@ -13407,8 +2055,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", - "dev": true, - "requires": {} + "dev": true }, "@xtuc/ieee754": { "version": "1.2.0", @@ -13442,8 +2089,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "adjust-sourcemap-loader": { "version": "3.0.0", @@ -13523,8 +2169,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} + "dev": true }, "ansi-colors": { "version": "4.1.1", @@ -14517,52 +3162,6 @@ "timsort": "^0.3.0" } }, - "css-loader": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.6.0.tgz", - "integrity": "sha512-FK7H2lisOixPT406s5gZM1S3l8GrfhEBT3ZiL2UX1Ng1XWs0y2GPllz/OTyvbaHe12VgQrIXIzuEGVlbUhodqg==", - "dev": true, - "peer": true, - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.5", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.5" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "peer": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "peer": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "peer": true - } - } - }, "css-select": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", @@ -14669,8 +3268,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.2.tgz", "integrity": "sha512-KhprijuQv2sP4kT92sSQwhlK3SJTbDIsxcfIEySB0O+3m9esFOai7dP9bMx5enHAh2MwarVIcnwiWoOm01RIbQ==", - "dev": true, - "requires": {} + "dev": true }, "csso": { "version": "4.2.0", @@ -16219,8 +4817,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} + "dev": true }, "ieee754": { "version": "1.2.1", @@ -16644,10 +5241,7 @@ "acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "optional": true, - "peer": true + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" }, "css-loader": { "version": "5.2.7", @@ -16741,9 +5335,8 @@ } }, "laravel-mix-artisan-publish": { - "version": "git+ssh://git@github.com/mzur/laravel-mix-artisan-publish.git#feafb9ba2359d41fddb025bccb4380e9b044783f", - "dev": true, - "from": "laravel-mix-artisan-publish@git://github.com/mzur/laravel-mix-artisan-publish.git", + "version": "git+https://github.com/mzur/laravel-mix-artisan-publish.git#feafb9ba2359d41fddb025bccb4380e9b044783f", + "from": "git+https://github.com/mzur/laravel-mix-artisan-publish.git", "requires": { "node-cmd": "^3.0.0" } @@ -17170,8 +5763,7 @@ "node-cmd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/node-cmd/-/node-cmd-3.0.0.tgz", - "integrity": "sha1-OP/3CkqqT2WdID61eGJzcBjiT28=", - "dev": true + "integrity": "sha512-SBvtm39iEkhEEDbUowR0O2YVaqpbD2nRvQ3fxXP/Tn1FgRpZAaUb8yKeEtFulBIv+xTHDodOKkj4EXIBANj+AQ==" }, "node-forge": { "version": "1.3.0", @@ -17699,29 +6291,25 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.3.tgz", "integrity": "sha512-6W5BemziRoqIdAKT+1QjM4bNcJAQ7z7zk073730NHg4cUXh3/rQHHj7pmYxUB9aGhuRhBiUf0pXvIHkRwhQP0Q==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-duplicates": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.3.tgz", "integrity": "sha512-vPtm1Mf+kp7iAENTG7jI1MN1lk+fBqL5y+qxyi4v3H+lzsXEdfS3dwUZD45KVhgzDEgduur8ycB4hMegyMTeRw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-empty": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.3.tgz", "integrity": "sha512-xGJugpaXKakwKI7sSdZjUuN4V3zSzb2Y0LOlmTajFbNinEjTfVs9PFW2lmKBaC/E64WwYppfqLD03P8l9BuueA==", - "dev": true, - "requires": {} + "dev": true }, "postcss-discard-overridden": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.4.tgz", "integrity": "sha512-3j9QH0Qh1KkdxwiZOW82cId7zdwXVQv/gRXYDnwx5pBtR1sTkU4cXRK9lp5dSdiM0r0OICO/L8J6sV1/7m0kHg==", - "dev": true, - "requires": {} + "dev": true }, "postcss-load-config": { "version": "3.1.1", @@ -17836,8 +6424,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -17872,8 +6459,7 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.3.tgz", "integrity": "sha512-iKEplDBco9EfH7sx4ut7R2r/dwTnUqyfACf62Unc9UiyFuI7uUqZZtY+u+qp7g8Qszl/U28HIfcsI3pEABWFfA==", - "dev": true, - "requires": {} + "dev": true }, "postcss-normalize-display-values": { "version": "5.0.3", @@ -19039,6 +7625,17 @@ "xtend": "^4.0.0" } }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -19056,17 +7653,6 @@ } } }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -19242,10 +7828,7 @@ "acorn": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "optional": true, - "peer": true + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" }, "commander": { "version": "2.20.3", @@ -19633,8 +8216,7 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "requires": {} + "dev": true }, "schema-utils": { "version": "3.1.1", @@ -19932,8 +8514,7 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.5.0.tgz", "integrity": "sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==", - "dev": true, - "requires": {} + "dev": true }, "xtend": { "version": "4.0.2", diff --git a/package.json b/package.json index bd2f11956..575ed44ef 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "eslint": "^7.3.1", "eslint-plugin-vue": "^7.0.0", "laravel-mix": "^6.0.13", - "laravel-mix-artisan-publish": "git://github.com/mzur/laravel-mix-artisan-publish.git", + "laravel-mix-artisan-publish": "git+https://github.com/mzur/laravel-mix-artisan-publish.git", "resolve-url-loader": "^3.1.2", "sass": "^1.15.2", "sass-loader": "^8.0.0", @@ -25,6 +25,7 @@ "vue-template-compiler": "^2.6.11" }, "dependencies": { - "@biigle/ol": "^5.3.0" + "@biigle/ol": "^5.3.0", + "laravel-mix-artisan-publish": "git+https://github.com/mzur/laravel-mix-artisan-publish.git" } } diff --git a/requirements.txt b/requirements.txt index 02d407a53..0025baa75 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ PyExcelerate==0.6.7 matplotlib==1.3.1 numpy==1.8.2 +Shapely==1.8.1 \ No newline at end of file diff --git a/src/Database/migrations/2022_02_10_123200_add_image_coco_report_type.php b/src/Database/migrations/2022_02_10_123200_add_image_coco_report_type.php new file mode 100644 index 000000000..d7dea7325 --- /dev/null +++ b/src/Database/migrations/2022_02_10_123200_add_image_coco_report_type.php @@ -0,0 +1,30 @@ +insert( + ['name' => 'ImageAnnotations\Coco'], + ); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + DB::table('report_types') + ->where('name', 'ImageAnnotations\Coco') + ->delete(); + } +} diff --git a/src/Http/Requests/StoreVolumeReport.php b/src/Http/Requests/StoreVolumeReport.php index c69629c55..43fc0e968 100644 --- a/src/Http/Requests/StoreVolumeReport.php +++ b/src/Http/Requests/StoreVolumeReport.php @@ -40,6 +40,7 @@ public function rules() ReportType::imageAnnotationsBasicId(), ReportType::imageAnnotationsCsvId(), ReportType::imageAnnotationsExtendedId(), + ReportType::imageAnnotationsCocoId(), ReportType::imageAnnotationsFullId(), ReportType::imageAnnotationsAbundanceId(), ReportType::imageAnnotationsImageLocationId(), diff --git a/src/ReportType.php b/src/ReportType.php index 6259de73d..d48d9fafa 100644 --- a/src/ReportType.php +++ b/src/ReportType.php @@ -21,6 +21,7 @@ class ReportType extends Model 'imageAnnotationsBasic' => 'ImageAnnotations\Basic', 'imageAnnotationsCsv' => 'ImageAnnotations\Csv', 'imageAnnotationsExtended' => 'ImageAnnotations\Extended', + 'imageAnnotationsCoco' => 'ImageAnnotations\Coco', 'imageAnnotationsFull' => 'ImageAnnotations\Full', 'imageAnnotationsAbundance' => 'ImageAnnotations\Abundance', 'imageAnnotationsImageLocation' => 'ImageAnnotations\ImageLocation', diff --git a/src/Support/Reports/Volumes/ImageAnnotations/CocoReportGenerator.php b/src/Support/Reports/Volumes/ImageAnnotations/CocoReportGenerator.php new file mode 100644 index 000000000..e73b25f5c --- /dev/null +++ b/src/Support/Reports/Volumes/ImageAnnotations/CocoReportGenerator.php @@ -0,0 +1,131 @@ +query()->get(); + $csv = $this->createCsv($rows); + $this->tmpFiles[] = $csv; + $this->executeScript('toCoco', $path); + } + +/** + * Assemble a new DB query for the volume of this report. + * + * @return \Illuminate\Database\Query\Builder + */ + protected function query() + { + $query = $this->initQuery([ + 'image_annotation_labels.id as annotation_label_id', + 'image_annotation_labels.label_id', + 'labels.name as label_name', + 'users.id as user_id', + 'users.firstname', + 'users.lastname', + 'images.id as image_id', + 'images.filename', + 'images.lng as longitude', + 'images.lat as latitude', + 'shapes.id as shape_id', + 'shapes.name as shape_name', + 'image_annotations.points', + 'images.attrs', + 'image_annotations.id as annotation_id', + ]) + ->join('shapes', 'image_annotations.shape_id', '=', 'shapes.id') + ->join('users', 'image_annotation_labels.user_id', '=', 'users.id') + ->orderBy('image_annotation_labels.id'); + + return $query; + } + + /** + * Create a CSV file for this report. + * + * @param \Illuminate\Support\Collection $rows The rows for the CSV + * @return CsvFile + */ + protected function createCsv($rows) + { + $csv = CsvFile::makeTmp(); + // column headers + $csv->put([ + 'annotation_label_id', + 'label_id', + 'label_name', + 'label_hierarchy', + 'user_id', + 'firstname', + 'lastname', + 'image_id', + 'filename', + 'image_longitude', + 'image_latitude', + 'shape_id', + 'shape_name', + 'points', + 'attributes', + 'annotation_id', + ]); + + foreach ($rows as $row) { + $csv->put([ + $row->annotation_label_id, + $row->label_id, + $row->label_name, + $this->expandLabelName($row->label_id), + $row->user_id, + $row->firstname, + $row->lastname, + $row->image_id, + $row->filename, + $row->longitude, + $row->latitude, + $row->shape_id, + $row->shape_name, + $row->points, + $row->attrs, + $row->annotation_id, + ]); + } + + $csv->close(); + + return $csv; + } +} diff --git a/src/config/reports.php b/src/config/reports.php index 7f11e211f..985f42d8e 100644 --- a/src/config/reports.php +++ b/src/config/reports.php @@ -14,6 +14,7 @@ 'basic_report' => __DIR__.'/../resources/scripts/basic_report.py', 'csvs_to_xlsx' => __DIR__.'/../resources/scripts/csvs_to_xlsx.py', 'full_report' => __DIR__.'/../resources/scripts/full_report.py', + 'toCoco' => __DIR__.'/../resources/scripts/toCoco.py', ], /** diff --git a/src/public/assets/scripts/annotations.js b/src/public/assets/scripts/annotations.js index ca8c8df7e..546d513c2 100644 --- a/src/public/assets/scripts/annotations.js +++ b/src/public/assets/scripts/annotations.js @@ -1 +1,22966 @@ -(()=>{var t={166:function(t){t.exports=function(){"use strict";function t(t,i,r,o,s){e(t,i,r||0,o||t.length-1,s||n)}function e(t,n,r,o,s){for(;o>r;){if(o-r>600){var a=o-r+1,h=n-r+1,u=Math.log(a),l=.5*Math.exp(2*u/3),c=.5*Math.sqrt(u*l*(a-l)/a)*(h-a/2<0?-1:1);e(t,n,Math.max(r,Math.floor(n-h*l/a+c)),Math.min(o,Math.floor(n+(a-h)*l/a+c)),s)}var p=t[n],f=r,d=o;for(i(t,r,n),s(t[o],p)>0&&i(t,r,o);f0;)d--}0===s(t[r],p)?i(t,r,d):i(t,++d,o),d<=n&&(r=d+1),n<=d&&(o=d-1)}}function i(t,e,i){var n=t[e];t[e]=t[i],t[i]=n}function n(t,e){return te?1:0}return t}()},510:(t,e,i)=>{"use strict";t.exports=r,t.exports.default=r;var n=i(166);function r(t,e){if(!(this instanceof r))return new r(t,e);this._maxEntries=Math.max(4,t||9),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),e&&this._initFormat(e),this.clear()}function o(t,e,i){if(!i)return e.indexOf(t);for(var n=0;n=t.minX&&e.maxY>=t.minY}function _(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function g(t,e,i,r,o){for(var s,a=[e,i];a.length;)(i=a.pop())-(e=a.pop())<=r||(s=e+Math.ceil((i-e)/r/2)*r,n(t,s,e,i,o),a.push(e,s,s,i))}r.prototype={all:function(){return this._all(this.data,[])},search:function(t){var e=this.data,i=[],n=this.toBBox;if(!d(t,e))return i;for(var r,o,s,a,h=[];e;){for(r=0,o=e.children.length;r=0&&o[e].children.length>this._maxEntries;)this._split(o,e),e--;this._adjustParentBBoxes(r,o,e)},_split:function(t,e){var i=t[e],n=i.children.length,r=this._minEntries;this._chooseSplitAxis(i,r,n);var o=this._chooseSplitIndex(i,r,n),a=_(i.children.splice(o,i.children.length-o));a.height=i.height,a.leaf=i.leaf,s(i,this.toBBox),s(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(i,a)},_splitRoot:function(t,e){this.data=_([t,e]),this.data.height=t.height+1,this.data.leaf=!1,s(this.data,this.toBBox)},_chooseSplitIndex:function(t,e,i){var n,r,o,s,h,u,l,p,f,d,_,g,y,v;for(u=l=1/0,n=e;n<=i-e;n++)r=a(t,0,n,this.toBBox),o=a(t,n,i,this.toBBox),f=r,d=o,_=void 0,g=void 0,y=void 0,v=void 0,_=Math.max(f.minX,d.minX),g=Math.max(f.minY,d.minY),y=Math.min(f.maxX,d.maxX),v=Math.min(f.maxY,d.maxY),s=Math.max(0,y-_)*Math.max(0,v-g),h=c(r)+c(o),s=e;r--)o=t.children[r],h(l,t.leaf?s(o):o),c+=p(l);return c},_adjustParentBBoxes:function(t,e,i){for(var n=i;n>=0;n--)h(e[n],t)},_condense:function(t){for(var e,i=t.length-1;i>=0;i--)0===t[i].children.length?i>0?(e=t[i-1].children).splice(e.indexOf(t[i]),1):this.clear():s(t[i],this.toBBox)},_initFormat:function(t){var e=["return a"," - b",";"];this.compareMinX=new Function("a","b",e.join(t[0])),this.compareMinY=new Function("a","b",e.join(t[1])),this.toBBox=new Function("a","return {minX: a"+t[0]+", minY: a"+t[1]+", maxX: a"+t[2]+", maxY: a"+t[3]+"};")}}}},e={};function i(n){var r=e[n];if(void 0!==r)return r.exports;var o=e[n]={exports:{}};return t[n].call(o.exports,o,o.exports,i),o.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{"use strict";function t(){return function(){throw new Error("Unimplemented abstract method.")}()}var e=0;function n(t){return t.ol_uid||(t.ol_uid=String(++e))}var r="5.3.1";const o=function(t){function e(e){var i="Assertion failed. See https://openlayers.org/en/"+("v"+r.split("-")[0])+"/doc/errors/#"+e+" for details.";t.call(this,i),this.code=e,this.name="AssertionError",this.message=i}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error);function s(t,e){if(!t)throw new o(e)}function a(t,e,i){return Math.min(Math.max(t,e),i)}var h="cosh"in Math?Math.cosh:function(t){var e=Math.exp(t);return(e+1/e)/2};function u(t,e,i,n,r,o){var s=r-i,a=o-n;if(0!==s||0!==a){var h=((t-i)*s+(e-n)*a)/(s*s+a*a);h>1?(i=r,n=o):h>0&&(i+=s*h,n+=a*h)}return l(t,e,i,n)}function l(t,e,i,n){var r=i-t,o=n-e;return r*r+o*o}function c(t,e,i){return t+i*(e-t)}var p=/^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i,f=/^([a-z]*)$/i;function d(t){return"string"==typeof t?t:g(t)}!function(){var t={},e=0}();function _(t){return t[0]=a(t[0]+.5|0,0,255),t[1]=a(t[1]+.5|0,0,255),t[2]=a(t[2]+.5|0,0,255),t[3]=a(t[3],0,1),t}function g(t){var e=t[0];e!=(0|e)&&(e=e+.5|0);var i=t[1];i!=(0|i)&&(i=i+.5|0);var n=t[2];return n!=(0|n)&&(n=n+.5|0),"rgba("+e+","+i+","+n+","+(void 0===t[3]?1:t[3])+")"}function y(t){return Array.isArray(t)?g(t):t}function v(t,e){var i=document.createElement("canvas");return t&&(i.width=t),e&&(i.height=e),i.getContext("2d")}var m="undefined"!=typeof navigator?navigator.userAgent.toLowerCase():"",C=(m.indexOf("firefox"),-1!==m.indexOf("safari")&&m.indexOf("chrom"),-1!==m.indexOf("webkit")&&m.indexOf("edge"),m.indexOf("macintosh"),window.devicePixelRatio,function(){var t=!1;try{t=!!document.createElement("canvas").getContext("2d").setLineDash}catch(t){}return t}());navigator,window,window,navigator.msPointerEnabled;const x=2;var w=function(){var t,e={};return function(i){if(t||(t=document.createElement("div").style),!(i in e)){t.font=i;var n=t.fontFamily;if(t.font="",!n)return null;e[i]=n.split(/,\s?/)}return e[i]}}(),E="function"==typeof Object.assign?Object.assign:function(t,e){var i=arguments;if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(t),r=1,o=arguments.length;r0},e.prototype.removeEventListener=function(t,e){var i=this.listeners_[t];if(i){var n=i.indexOf(e);t in this.pendingRemovals_?(i[n]=Y,++this.pendingRemovals_[t]):(i.splice(n,1),0===i.length&&delete this.listeners_[t])}},e}(I);const B=q,W="change",V="clear",z="contextmenu",K="dblclick";const U=function(t){function e(e){t.call(this),this.highWaterMark=void 0!==e?e:2048,this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.canExpireCache=function(){return this.getCount()>this.highWaterMark},e.prototype.clear=function(){this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null,this.dispatchEvent(V)},e.prototype.containsKey=function(t){return this.entries_.hasOwnProperty(t)},e.prototype.forEach=function(t,e){for(var i=this.oldest_;i;)t.call(e,i.value_,i.key_,this),i=i.newer},e.prototype.get=function(t){var e=this.entries_[t];return s(void 0!==e,15),e===this.newest_||(e===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(e.newer.older=e.older,e.older.newer=e.newer),e.newer=null,e.older=this.newest_,this.newest_.newer=e,this.newest_=e),e.value_},e.prototype.remove=function(t){var e=this.entries_[t];return s(void 0!==e,15),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_},e.prototype.getCount=function(){return this.count_},e.prototype.getKeys=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.key_;return e},e.prototype.getValues=function(){var t,e=new Array(this.count_),i=0;for(t=this.newest_;t;t=t.older)e[i++]=t.value_;return e},e.prototype.peekLast=function(){return this.oldest_.value_},e.prototype.peekLastKey=function(){return this.oldest_.key_},e.prototype.peekFirstKey=function(){return this.newest_.key_},e.prototype.pop=function(){var t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_},e.prototype.replace=function(t,e){this.get(t),this.entries_[t].value_=e},e.prototype.set=function(t,e){s(!(t in this.entries_),16);var i={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=i:this.oldest_=i,this.newest_=i,this.entries_[t]=i,++this.count_},e.prototype.setSize=function(t){this.highWaterMark=t},e.prototype.prune=function(){for(;this.canExpireCache();)this.pop()},e}(B);new Array(6);var H=[0,0,0,1],J=[0,0,0,1],$=new U,Z={},Q=null,tt={};!function(){var t,e,i=Z,n="32px ",r=["monospace","serif"],o=r.length,s="wmytzilWMYTZIL@#/&?$%10";function a(t){for(var i=et(),a=100;a<=700;a+=300){for(var h=a+" ",u=!0,l=0;l0;)this.pop()},e.prototype.extend=function(t){for(var e=0,i=t.length;e=1?(i=l,n=c):(i=h+d*p,n=u+d*f),[i,n]}function Gt(t,e){for(var i=!0,n=t.length-1;n>=0;--n)if(t[n]!=e[n]){i=!1;break}return i}function Ot(t,e){var i=t[0]-e[0],n=t[1]-e[1];return i*i+n*n}function Tt(t,e){return Math.sqrt(Ot(t,e))}var Lt=L,Xt=X,Yt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey},jt=function(t){var e=t.originalEvent;return!e.altKey&&!(e.metaKey||e.ctrlKey)&&e.shiftKey},Nt=function(t){var e=t.pointerEvent;return s(void 0!==e,56),e.isPrimary&&0===e.button};const qt=0,Bt=1,Wt=2,Vt=4,zt=8,Kt=16;function Ut(t){for(var e=Qt(),i=0,n=t.length;ir&&(h|=Vt),ao&&(h|=Wt),h===qt&&(h=Bt),h}function Qt(){return[1/0,1/0,-1/0,-1/0]}function te(t,e,i,n,r){return r?(r[0]=t,r[1]=e,r[2]=i,r[3]=n,r):[t,e,i,n]}function ee(t){return te(1/0,1/0,-1/0,-1/0,t)}function ie(t,e){var i=t[0],n=t[1];return te(i,n,i,n,e)}function ne(t,e,i,n,r){return se(ee(r),t,e,i,n)}function re(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function oe(t,e){e[0]t[2]&&(t[2]=e[0]),e[1]t[3]&&(t[3]=e[1])}function se(t,e,i,n,r){for(;i=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}const ge="Point",ye="LineString",ve="LinearRing",me="Polygon",Ce="MultiPoint",xe="MultiLineString",we="MultiPolygon",Ee="GeometryCollection",Fe="Circle",Se="Rectangle",ke="Ellipse";var Me={DEGREES:"degrees",FEET:"ft",METERS:"m",PIXELS:"pixels",TILE_PIXELS:"tile-pixels",USFEET:"us-ft"},Ie={};Ie[Me.DEGREES]=2*Math.PI*6370997/360,Ie[Me.FEET]=.3048,Ie[Me.METERS]=1,Ie[Me.USFEET]=1200/3937;const Pe=Me;var Re=function(t){this.code_=t.code,this.units_=t.units,this.extent_=void 0!==t.extent?t.extent:null,this.worldExtent_=void 0!==t.worldExtent?t.worldExtent:null,this.axisOrientation_=void 0!==t.axisOrientation?t.axisOrientation:"enu",this.global_=void 0!==t.global&&t.global,this.canWrapX_=!(!this.global_||!this.extent_),this.getPointResolutionFunc_=t.getPointResolution,this.defaultTileGrid_=null,this.metersPerUnit_=t.metersPerUnit};Re.prototype.canWrapX=function(){return this.canWrapX_},Re.prototype.getCode=function(){return this.code_},Re.prototype.getExtent=function(){return this.extent_},Re.prototype.getUnits=function(){return this.units_},Re.prototype.getMetersPerUnit=function(){return this.metersPerUnit_||Ie[this.units_]},Re.prototype.getWorldExtent=function(){return this.worldExtent_},Re.prototype.getAxisOrientation=function(){return this.axisOrientation_},Re.prototype.isGlobal=function(){return this.global_},Re.prototype.setGlobal=function(t){this.global_=t,this.canWrapX_=!(!t||!this.extent_)},Re.prototype.getDefaultTileGrid=function(){return this.defaultTileGrid_},Re.prototype.setDefaultTileGrid=function(t){this.defaultTileGrid_=t},Re.prototype.setExtent=function(t){this.extent_=t,this.canWrapX_=!(!this.global_||!t)},Re.prototype.setWorldExtent=function(t){this.worldExtent_=t},Re.prototype.setGetPointResolution=function(t){this.getPointResolutionFunc_=t},Re.prototype.getPointResolutionFunc=function(){return this.getPointResolutionFunc_};const De=Re;var be=6378137,Ae=Math.PI*be,Ge=[-Ae,-Ae,Ae,Ae],Oe=[-180,-85,180,85],Te=function(t){function e(e){t.call(this,{code:e,units:Pe.METERS,extent:Ge,global:!0,worldExtent:Oe,getPointResolution:function(t,e){return t/h(e[1]/be)}})}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(De),Le=[new Te("EPSG:3857"),new Te("EPSG:102100"),new Te("EPSG:102113"),new Te("EPSG:900913"),new Te("urn:ogc:def:crs:EPSG:6.18:3:3857"),new Te("urn:ogc:def:crs:EPSG::3857"),new Te("http://www.opengis.net/gml/srs/epsg.xml#3857")];function Xe(t,e,i){var n=t.length,r=i>1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=Ae,a=0;as?h=s:h<-s&&(h=-s),o[a+1]=h}return o}function Ye(t,e,i){var n=t.length,r=i>1?i:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(n));for(var s=0;s=e[0]||(t[1]<=e[1]&&t[3]>=e[1]||he(t,this.intersectsCoordinate,this))}return!1},e.prototype.setCenter=function(t){var e=this.stride,i=this.flatCoordinates[e]-this.flatCoordinates[0],n=t.slice();n[e]=n[0]+i;for(var r=1;re?1:t1)a=i;else{if(f>0){for(var d=0;dr&&(r=u),o=a,s=h}return r}function xi(t,e,i,n,r){for(var o=0,s=i.length;o>1)],e))<0?s=n+1:(a=n,h=!r);return h?s:~s}(f,y);if(v<0){var m=(y-f[-v-2])/(f[-v-1]-f[-v-2]),C=e+(-v-2)*n;s=c(t[C],t[C+n],m),a=c(t[C+1],t[C+n+1],m)}else s=t[e+v*n],a=t[e+v*n+1]}return o?(o[0]=s,o[1]=a,o):[s,a]}function Mi(t,e,i,n,r,o){if(i==e)return null;var s;if(r>1;ro&&(u-a)*(o-h)-(r-a)*(l-h)>0&&s++:l<=o&&(u-a)*(o-h)-(r-a)*(l-h)<0&&s--,a=u,h=l}return 0!==s}function Ri(t,e,i,n,r,o){if(0===i.length)return!1;if(!Pi(t,e,i[0],n,r,o))return!1;for(var s=1,a=i.length;s=r[0]&&o[2]<=r[2]||(o[1]>=r[1]&&o[3]<=r[3]||Di(t,e,i,n,(function(t,e){return function(t,e,i){var n=!1,r=Zt(t,e),o=Zt(t,i);if(r===Bt||o===Bt)n=!0;else{var s,a,h=t[0],u=t[1],l=t[2],c=t[3],p=e[0],f=e[1],d=i[0],_=i[1],g=(_-f)/(d-p);o&Wt&&!(r&Wt)&&(n=(s=d-(_-c)/g)>=h&&s<=l),n||!(o&Vt)||r&Vt||(n=(a=_-(d-l)*g)>=u&&a<=c),n||!(o&zt)||r&zt||(n=(s=d-(_-u)/g)>=h&&s<=l),n||!(o&Kt)||r&Kt||(n=(a=_-(d-h)*g)>=u&&a<=c)}return n}(r,t,e)})))))}function Ai(t,e,i,n,r){if(!function(t,e,i,n,r){return!!(bi(t,e,i,n,r)||Pi(t,e,i,n,r[0],r[1])||Pi(t,e,i,n,r[0],r[3])||Pi(t,e,i,n,r[2],r[1])||Pi(t,e,i,n,r[2],r[3]))}(t,e,i[0],n,r))return!1;if(1===i.length)return!0;for(var o=1,s=i.length;o0;){for(var p=l.pop(),f=l.pop(),d=0,_=t[f],g=t[f+1],y=t[p],v=t[p+1],m=f+n;md&&(c=m,d=C)}d>r&&(h[(c-e)/n]=1,f+n0&&_>f)&&(d<0&&g0&&g>d)?(a=c,h=p):(o[s++]=a,o[s++]=h,u=a,l=h,a=c,h=p)}}return o[s++]=a,o[s++]=h,s}function Yi(t,e,i,n,r,o,s,a){for(var h=0,u=i.length;hC&&Ri(t,e,i,n,u=(l+c)/2,d)&&(m=u,C=x),l=c}return isNaN(m)&&(m=r[o]),s?(s.push(m,d,C),s):[m,d,C]}function Qi(t,e,i,n){for(;e0}function en(t,e,i,n,r){for(var o=void 0!==r&&r,s=0,a=i.length;s0}}else if(t.type==Mt){var n=this.handleDownEvent(t);n&&t.preventDefault(),this.handlingDownUpSequence=n,e=this.stopDown(n)}else t.type==kt&&this.handleMoveEvent(t);return!e},e.prototype.handleMoveEvent=function(t){},e.prototype.handleUpEvent=function(t){return!1},e.prototype.stopDown=function(t){return t},e.prototype.updateTrackedPointers_=function(t){if(function(t){var e=t.type;return e===Mt||e===St||e===It}(t)){var e=t.pointerEvent,i=e.pointerId.toString();t.type==It?delete this.trackedPointers_[i]:(t.type==Mt||i in this.trackedPointers_)&&(this.trackedPointers_[i]=e),this.targetPointers=S(this.trackedPointers_)}},e}(pn);const dn=fn,_n="VECTOR",gn="opacity",yn="visible",vn="extent",mn="zIndex",Cn="maxResolution",xn="minResolution",wn="source";var En=function(e){function i(t){e.call(this);var i=E({},t);i[gn]=void 0!==t.opacity?t.opacity:1,i[yn]=void 0===t.visible||t.visible,i[mn]=t.zIndex,i[Cn]=void 0!==t.maxResolution?t.maxResolution:1/0,i[xn]=void 0!==t.minResolution?t.minResolution:0,this.setProperties(i),this.state_=null,this.type}return e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i,i.prototype.getType=function(){return this.type},i.prototype.getLayerState=function(){var t=this.state_||{layer:this,managed:!0};return t.opacity=a(this.getOpacity(),0,1),t.sourceState=this.getSourceState(),t.visible=this.getVisible(),t.extent=this.getExtent(),t.zIndex=this.getZIndex()||0,t.maxResolution=this.getMaxResolution(),t.minResolution=Math.max(this.getMinResolution(),0),this.state_=t,t},i.prototype.getLayersArray=function(e){return t()},i.prototype.getLayerStatesArray=function(e){return t()},i.prototype.getExtent=function(){return this.get(vn)},i.prototype.getMaxResolution=function(){return this.get(Cn)},i.prototype.getMinResolution=function(){return this.get(xn)},i.prototype.getOpacity=function(){return this.get(gn)},i.prototype.getSourceState=function(){return t()},i.prototype.getVisible=function(){return this.get(yn)},i.prototype.getZIndex=function(){return this.get(mn)},i.prototype.setExtent=function(t){this.set(vn,t)},i.prototype.setMaxResolution=function(t){this.set(Cn,t)},i.prototype.setMinResolution=function(t){this.set(xn,t)},i.prototype.setOpacity=function(t){this.set(gn,t)},i.prototype.setVisible=function(t){this.set(yn,t)},i.prototype.setZIndex=function(t){this.set(mn,t)},i}(gt);const Fn="precompose",Sn="undefined",kn="ready";var Mn=function(t){function e(e){var i=E({},e);delete i.source,t.call(this,i),this.mapPrecomposeKey_=null,this.mapRenderKey_=null,this.sourceChangeKey_=null,e.map&&this.setMap(e.map),A(this,_t(wn),this.handleSourcePropertyChange_,this);var n=e.source?e.source:null;this.setSource(n)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getLayersArray=function(t){var e=t||[];return e.push(this),e},e.prototype.getLayerStatesArray=function(t){var e=t||[];return e.push(this.getLayerState()),e},e.prototype.getSource=function(){return this.get(wn)||null},e.prototype.getSourceState=function(){var t=this.getSource();return t?t.getState():Sn},e.prototype.handleSourceChange_=function(){this.changed()},e.prototype.handleSourcePropertyChange_=function(){this.sourceChangeKey_&&(T(this.sourceChangeKey_),this.sourceChangeKey_=null);var t=this.getSource();t&&(this.sourceChangeKey_=A(t,W,this.handleSourceChange_,this)),this.changed()},e.prototype.setMap=function(t){this.mapPrecomposeKey_&&(T(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(T(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=A(t,Fn,(function(t){var e=t,i=this.getLayerState();i.managed=!1,void 0===this.getZIndex()&&(i.zIndex=1/0),e.frameState.layerStatesArray.push(i),e.frameState.layerStates[n(this)]=i}),this),this.mapRenderKey_=A(this,W,t.render,t),this.changed())},e.prototype.setSource=function(t){this.set(wn,t)},e}(En);const In=Mn,Pn="vector";var Rn=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.checksum_=void 0};Rn.prototype.clone=function(){var t=this.getColor();return new Rn({color:Array.isArray(t)?t.slice():t||void 0})},Rn.prototype.getColor=function(){return this.color_},Rn.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},Rn.prototype.getChecksum=function(){if(void 0===this.checksum_){var t=this.color_;t?Array.isArray(t)||"string"==typeof t?this.checksum_="f"+d(t):this.checksum_=n(this.color_):this.checksum_="f-"}return this.checksum_};const Dn=Rn;var bn=function(t){var e=t||{};this.color_=void 0!==e.color?e.color:null,this.lineCap_=e.lineCap,this.lineDash_=void 0!==e.lineDash?e.lineDash:null,this.lineDashOffset_=e.lineDashOffset,this.lineJoin_=e.lineJoin,this.miterLimit_=e.miterLimit,this.width_=e.width,this.checksum_=void 0};bn.prototype.clone=function(){var t=this.getColor();return new bn({color:Array.isArray(t)?t.slice():t||void 0,lineCap:this.getLineCap(),lineDash:this.getLineDash()?this.getLineDash().slice():void 0,lineDashOffset:this.getLineDashOffset(),lineJoin:this.getLineJoin(),miterLimit:this.getMiterLimit(),width:this.getWidth()})},bn.prototype.getColor=function(){return this.color_},bn.prototype.getLineCap=function(){return this.lineCap_},bn.prototype.getLineDash=function(){return this.lineDash_},bn.prototype.getLineDashOffset=function(){return this.lineDashOffset_},bn.prototype.getLineJoin=function(){return this.lineJoin_},bn.prototype.getMiterLimit=function(){return this.miterLimit_},bn.prototype.getWidth=function(){return this.width_},bn.prototype.setColor=function(t){this.color_=t,this.checksum_=void 0},bn.prototype.setLineCap=function(t){this.lineCap_=t,this.checksum_=void 0},bn.prototype.setLineDash=function(t){this.lineDash_=t,this.checksum_=void 0},bn.prototype.setLineDashOffset=function(t){this.lineDashOffset_=t,this.checksum_=void 0},bn.prototype.setLineJoin=function(t){this.lineJoin_=t,this.checksum_=void 0},bn.prototype.setMiterLimit=function(t){this.miterLimit_=t,this.checksum_=void 0},bn.prototype.setWidth=function(t){this.width_=t,this.checksum_=void 0},bn.prototype.getChecksum=function(){return void 0===this.checksum_&&(this.checksum_="s",this.color_?"string"==typeof this.color_?this.checksum_+=this.color_:this.checksum_+=n(this.color_):this.checksum_+="-",this.checksum_+=","+(void 0!==this.lineCap_?this.lineCap_.toString():"-")+","+(this.lineDash_?this.lineDash_.toString():"-")+","+(void 0!==this.lineDashOffset_?this.lineDashOffset_:"-")+","+(void 0!==this.lineJoin_?this.lineJoin_:"-")+","+(void 0!==this.miterLimit_?this.miterLimit_.toString():"-")+","+(void 0!==this.width_?this.width_.toString():"-")),this.checksum_};const An=bn;var Gn=function(t){var e=t||{};this.geometry_=null,this.geometryFunction_=Xn,void 0!==e.geometry&&this.setGeometry(e.geometry),this.fill_=void 0!==e.fill?e.fill:null,this.image_=void 0!==e.image?e.image:null,this.renderer_=void 0!==e.renderer?e.renderer:null,this.stroke_=void 0!==e.stroke?e.stroke:null,this.text_=void 0!==e.text?e.text:null,this.zIndex_=e.zIndex};Gn.prototype.clone=function(){var t=this.getGeometry();return t&&"object"==typeof t&&(t=t.clone()),new Gn({geometry:t,fill:this.getFill()?this.getFill().clone():void 0,image:this.getImage()?this.getImage().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,text:this.getText()?this.getText().clone():void 0,zIndex:this.getZIndex()})},Gn.prototype.getRenderer=function(){return this.renderer_},Gn.prototype.setRenderer=function(t){this.renderer_=t},Gn.prototype.getGeometry=function(){return this.geometry_},Gn.prototype.getGeometryFunction=function(){return this.geometryFunction_},Gn.prototype.getFill=function(){return this.fill_},Gn.prototype.setFill=function(t){this.fill_=t},Gn.prototype.getImage=function(){return this.image_},Gn.prototype.setImage=function(t){this.image_=t},Gn.prototype.getStroke=function(){return this.stroke_},Gn.prototype.setStroke=function(t){this.stroke_=t},Gn.prototype.getText=function(){return this.text_},Gn.prototype.setText=function(t){this.text_=t},Gn.prototype.getZIndex=function(){return this.zIndex_},Gn.prototype.setGeometry=function(t){"function"==typeof t?this.geometryFunction_=t:"string"==typeof t?this.geometryFunction_=function(e){return e.get(t)}:t?void 0!==t&&(this.geometryFunction_=function(){return t}):this.geometryFunction_=Xn,this.geometry_=t},Gn.prototype.setZIndex=function(t){this.zIndex_=t};var On=null;function Tn(t,e){if(!On){var i=new Dn({color:"rgba(255,255,255,0.4)"}),n=new An({color:"#3399CC",width:1.25});On=[new Gn({image:new at({fill:i,stroke:n,radius:5}),fill:i,stroke:n})]}return On}function Ln(){var t={},e=[255,255,255,1],i=[0,153,255,1];return t[me]=[new Gn({fill:new Dn({color:[255,255,255,.5]})})],t[we]=t[me],t[ye]=[new Gn({stroke:new An({color:e,width:5})}),new Gn({stroke:new An({color:i,width:3})})],t[xe]=t[ye],t[Fe]=t[me].concat(t[ye]),t[ge]=[new Gn({image:new at({radius:6,fill:new Dn({color:i}),stroke:new An({color:e,width:1.5})}),zIndex:1/0})],t[Ce]=t[ge],t[Ee]=t[me].concat(t[ye],t[ge]),t}function Xn(t){return t.getGeometry()}const Yn=Gn;var jn="renderOrder",Nn=function(t){function e(e){var i=e||{},n=E({},i);delete n.style,delete n.renderBuffer,delete n.updateWhileAnimating,delete n.updateWhileInteracting,t.call(this,n),this.declutter_=void 0!==i.declutter&&i.declutter,this.renderBuffer_=void 0!==i.renderBuffer?i.renderBuffer:100,this.style_=null,this.styleFunction_=void 0,this.setStyle(i.style),this.updateWhileAnimating_=void 0!==i.updateWhileAnimating&&i.updateWhileAnimating,this.updateWhileInteracting_=void 0!==i.updateWhileInteracting&&i.updateWhileInteracting,this.renderMode_=i.renderMode||Pn,this.type=_n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDeclutter=function(){return this.declutter_},e.prototype.setDeclutter=function(t){this.declutter_=t},e.prototype.getRenderBuffer=function(){return this.renderBuffer_},e.prototype.getRenderOrder=function(){return this.get(jn)},e.prototype.getStyle=function(){return this.style_},e.prototype.getStyleFunction=function(){return this.styleFunction_},e.prototype.getUpdateWhileAnimating=function(){return this.updateWhileAnimating_},e.prototype.getUpdateWhileInteracting=function(){return this.updateWhileInteracting_},e.prototype.setRenderOrder=function(t){this.set(jn,t)},e.prototype.setStyle=function(t){this.style_=void 0!==t?t:Tn,this.styleFunction_=null===t?void 0:function(t){var e;if("function"==typeof t)e=t;else{var i;Array.isArray(t)?i=t:(s("function"==typeof t.getZIndex,41),i=[t]),e=function(){return i}}return e}(this.style_),this.changed()},e.prototype.getRenderMode=function(){return this.renderMode_},e}(In);Nn.prototype.getSource;const qn=Nn,Bn="arraybuffer",Wn="json",Vn="text",zn="xml";function Kn(t,e){return function(t,e,i,n){return function(r,o,s){var a=new XMLHttpRequest;a.open("GET","function"==typeof t?t(r,o,s):t,!0),e.getType()==Bn&&(a.responseType="arraybuffer"),a.onload=function(t){if(!a.status||a.status>=200&&a.status<300){var r,o=e.getType();o==Wn||o==Vn?r=a.responseText:o==zn?(r=a.responseXML)||(r=(new DOMParser).parseFromString(a.responseText,"application/xml")):o==Bn&&(r=a.response),r?i.call(this,e.readFeatures(r,{featureProjection:s}),e.readProjection(r),e.getLastExtent()):n.call(this)}else n.call(this)}.bind(this),a.onerror=function(){n.call(this)}.bind(this),a.send()}}(t,e,(function(t,e){"function"==typeof this.addFeatures&&this.addFeatures(t)}),Y)}function Un(t,e){return[[-1/0,-1/0,1/0,1/0]]}var Hn=function(e){function i(t){e.call(this),this.projection_=Qe(t.projection),this.attributions_=Jn(t.attributions),this.attributionsCollapsible_=void 0===t.attributionsCollapsible||t.attributionsCollapsible,this.loading=!1,this.state_=void 0!==t.state?t.state:kn,this.wrapX_=void 0!==t.wrapX&&t.wrapX}return e&&(i.__proto__=e),i.prototype=Object.create(e&&e.prototype),i.prototype.constructor=i,i.prototype.getAttributions=function(){return this.attributions_},i.prototype.getAttributionsCollapsible=function(){return this.attributionsCollapsible_},i.prototype.getProjection=function(){return this.projection_},i.prototype.getResolutions=function(){return t()},i.prototype.getState=function(){return this.state_},i.prototype.getWrapX=function(){return this.wrapX_},i.prototype.refresh=function(){this.changed()},i.prototype.setAttributions=function(t){this.attributions_=Jn(t),this.changed()},i.prototype.setState=function(t){this.state_=t,this.changed()},i}(gt);function Jn(t){return t?Array.isArray(t)?function(e){return t}:"function"==typeof t?t:function(e){return[t]}:null}const $n=Hn,Zn="addfeature",Qn="changefeature",tr="clear",er="removefeature";var ir=i(510),nr=i.n(ir),rr=function(t){this.rbush_=nr()(t,void 0),this.items_={}};rr.prototype.insert=function(t,e){var i={minX:t[0],minY:t[1],maxX:t[2],maxY:t[3],value:e};this.rbush_.insert(i),this.items_[n(e)]=i},rr.prototype.load=function(t,e){for(var i=new Array(e.length),r=0,o=e.length;r2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]];if(0===o[1])t=[[i,i,i,i]];else{var s=[-1*o[1],o[0]],a=o[0]/o[1],h=(r[0]+a*(n[1]-r[1])-n[0])/(s[0]-s[1]*a),u=[h*s[0],h*s[1]];t=[[[i[0]-u[0],i[1]-u[1]],[n[0]-u[0],n[1]-u[1]],[n[0]+u[0],n[1]+u[1]],[i[0]+u[0],i[1]+u[1]]]]}}else t=[t];var l=e;return l?l.setCoordinates(t):l=new lr(t),l};else if(this.type_===ke)this.minPoints_=3,this.maxPoints_=3,r=function(t,e){if(t.length>2){var i=t[0],n=t[1],r=t[2],o=[n[0]-i[0],n[1]-i[1]],s=[i[0]+.5*o[0],i[1]+.5*o[1]];if(0===o[1])t=[[i,i,i,i]];else{var a=[-1*o[1],o[0]],h=o[0]/o[1],u=(r[0]+h*(n[1]-r[1])-n[0])/(a[0]-a[1]*h),l=[u*a[0],u*a[1]];t=[[[i[0],i[1]],[s[0]-l[0],s[1]-l[1]],[n[0],n[1]],[s[0]+l[0],s[1]+l[1]]]]}}else t=[t];var c=e;return c?c.setCoordinates(t):c=new pr(t),c};else{var o,s=this.mode_;s===fr?o=Vi:s===dr?o=Ni:s===_r&&(o=sn),r=function(t,e){var i=e;return i?s===_r?t[0].length?i.setCoordinates([t[0].concat([t[0][0]])]):i.setCoordinates([]):i.setCoordinates(t):i=new o(t),i}}this.geometryFunction_=r,this.dragVertexDelay_=void 0!==e.dragVertexDelay?e.dragVertexDelay:500,this.finishCoordinate_=null,this.sketchFeature_=null,this.sketchPoint_=null,this.sketchCoords_=null,this.sketchLine_=null,this.sketchLineCoords_=null,this.squaredClickTolerance_=e.clickTolerance?e.clickTolerance*e.clickTolerance:36,this.overlay_=new qn({source:new hr({useSpatialIndex:!1,wrapX:!!e.wrapX&&e.wrapX}),style:e.style?e.style:(n=Ln(),function(t,e){return n[t.getGeometry().getType()]}),updateWhileInteracting:!0}),this.geometryName_=e.geometryName,this.condition_=e.condition?e.condition:Yt,this.freehandCondition_,e.freehand?this.freehandCondition_=Lt:this.freehandCondition_=e.freehandCondition?e.freehandCondition:jt,A(this,_t(cn),this.updateState_,this)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setMap=function(e){t.prototype.setMap.call(this,e),this.updateState_()},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleEvent=function(e){e.originalEvent.type===z&&e.preventDefault(),this.freehand_=this.mode_!==fr&&this.freehandCondition_(e);var i=e.type===kt,n=!0;!this.freehand_&&this.lastDragTime_&&e.type===St&&(Date.now()-this.lastDragTime_>=this.dragVertexDelay_?(this.downPx_=e.pixel,this.shouldHandle_=!this.freehand_,i=!0):this.lastDragTime_=void 0,this.shouldHandle_&&void 0!==this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0));return this.freehand_&&e.type===St&&null!==this.sketchFeature_?(this.addToDrawing_(e),n=!1):this.freehand_&&e.type===Mt?n=!1:i?(n=e.type===kt)&&this.freehand_?n=this.handlePointerMove_(e):(e.pointerEvent.pointerType==ln||e.type===St&&void 0===this.downTimeout_)&&this.handlePointerMove_(e):e.type===Ft&&(n=!1),t.prototype.handleEvent.call(this,e)&&n},e.prototype.handleDownEvent=function(t){return this.shouldHandle_=!this.freehand_,this.freehand_?(this.downPx_=t.pixel,this.finishCoordinate_||this.startDrawing_(t),!0):!!this.condition_(t)&&(this.lastDragTime_=Date.now(),this.downTimeout_=setTimeout(function(){this.handlePointerMove_(new bt(kt,t.map,t.pointerEvent,!1,t.frameState))}.bind(this),this.dragVertexDelay_),this.downPx_=t.pixel,!0)},e.prototype.handleUpEvent=function(t){var e=!0;this.downTimeout_&&(clearTimeout(this.downTimeout_),this.downTimeout_=void 0),this.handlePointerMove_(t);var i=this.mode_===gr;return this.shouldHandle_?(this.finishCoordinate_?this.freehand_||i?this.finishDrawing():this.atFinish_(t)?this.finishCondition_(t)&&this.finishDrawing():this.addToDrawing_(t):(this.startDrawing_(t),this.mode_===fr&&this.finishDrawing()),e=!1):this.freehand_&&(this.finishCoordinate_=null,this.abortDrawing_()),!e&&this.stopClick_&&t.stopPropagation(),e},e.prototype.handlePointerMove_=function(t){if(this.downPx_&&(!this.freehand_&&this.shouldHandle_||this.freehand_&&!this.shouldHandle_)){var e=this.downPx_,i=t.pixel,n=e[0]-i[0],r=e[1]-i[1],o=n*n+r*r;if(this.shouldHandle_=this.freehand_?o>this.squaredClickTolerance_:o<=this.squaredClickTolerance_,!this.shouldHandle_)return!0}return this.finishCoordinate_?this.modifyDrawing_(t):this.createOrUpdateSketchPoint_(t),!0},e.prototype.atFinish_=function(t){var e=!1;if(this.sketchFeature_){var i=!1,n=[this.finishCoordinate_];if(this.mode_===dr)i=this.sketchCoords_.length>this.minPoints_;else if(this.mode_===_r){var r=this.sketchCoords_;i=r[0].length>this.minPoints_,n=[r[0][0],r[0][r[0].length-2]]}if(i)for(var o=t.map,s=0,a=n.length;s=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),this.geometryFunction_(i,r)):this.mode_===_r&&((i=this.sketchCoords_[0]).length>=this.maxPoints_&&(this.freehand_?i.pop():e=!0),i.push(n.slice()),e&&(this.finishCoordinate_=i[0]),this.geometryFunction_(this.sketchCoords_,r)),this.updateSketchFeatures_(),e&&this.finishDrawing()},e.prototype.removeLastPoint=function(){if(this.sketchFeature_){var t,e=this.sketchFeature_.getGeometry();this.mode_===dr?((t=this.sketchCoords_).splice(-2,1),this.geometryFunction_(t,e),t.length>=2&&(this.finishCoordinate_=t[t.length-2].slice())):this.mode_===_r&&((t=this.sketchCoords_[0]).splice(-2,1),this.sketchLine_.getGeometry().setCoordinates(t),this.geometryFunction_(this.sketchCoords_,e)),0===t.length&&(this.finishCoordinate_=null),this.updateSketchFeatures_()}},e.prototype.finishDrawing=function(){var t=this.abortDrawing_();if(t){var e=this.sketchCoords_,i=t.getGeometry();this.mode_===dr?(e.pop(),this.geometryFunction_(e,i)):this.mode_===_r&&(e[0].pop(),this.geometryFunction_(e,i),e=i.getCoordinates()),this.type_===Ce?t.setGeometry(new Ki([e])):this.type_===xe?t.setGeometry(new Bi([e])):this.type_===we&&t.setGeometry(new hn([e])),this.dispatchEvent(new Cr(mr,t)),this.features_&&this.features_.push(t),this.source_&&this.source_.addFeature(t)}},e.prototype.abortDrawing_=function(){this.finishCoordinate_=null;var t=this.sketchFeature_;return t&&(this.sketchFeature_=null,this.sketchPoint_=null,this.sketchLine_=null,this.overlay_.getSource().clear(!0)),t},e.prototype.extend=function(t){var e=t.getGeometry();this.sketchFeature_=t,this.sketchCoords_=e.getCoordinates();var i=this.sketchCoords_[this.sketchCoords_.length-1];this.finishCoordinate_=i.slice(),this.sketchCoords_.push(i.slice()),this.updateSketchFeatures_(),this.dispatchEvent(new Cr(vr,this.sketchFeature_))},e.prototype.updateSketchFeatures_=function(){var t=[];this.sketchFeature_&&t.push(this.sketchFeature_),this.sketchLine_&&t.push(this.sketchLine_),this.sketchPoint_&&t.push(this.sketchPoint_);var e=this.overlay_.getSource();e.clear(!0),e.addFeatures(t)},e.prototype.updateState_=function(){var t=this.getMap(),e=this.getActive();t&&e||this.abortDrawing_(),this.overlay_.setMap(e?t:null)},e}(dn);const wr=xr,Er=Vue.resource("/api/v1/volumes{/id}/export-area");var Fr="modifystart",Sr="modifyend",kr=function(t){function e(e,i,n){t.call(this,e),this.features=i,this.mapBrowserEvent=n}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(N),Mr=function(t){function e(e){var i,n;if(t.call(this,e),this.condition_=e.condition?e.condition:Nt,this.defaultDeleteCondition_=function(t){return function(t){var e=t.originalEvent;return e.altKey&&!(e.metaKey||e.ctrlKey)&&!e.shiftKey}(t)&&function(t){return t.type==Et}(t)},this.deleteCondition_=e.deleteCondition?e.deleteCondition:this.defaultDeleteCondition_,this.insertVertexCondition_=e.insertVertexCondition?e.insertVertexCondition:Lt,this.vertexFeature_=null,this.vertexSegments_=null,this.lastPixel_=[0,0],this.ignoreNextSingleClick_=!1,this.modified_=!1,this.rBush_=new or,this.pixelTolerance_=void 0!==e.pixelTolerance?e.pixelTolerance:10,this.snappedToVertex_=!1,this.changingFeature_=!1,this.dragSegments_=[],this.overlay_=new qn({source:new hr({useSpatialIndex:!1,wrapX:!!e.wrapX}),style:e.style?e.style:(i=Ln(),function(t,e){return i[ge]}),updateWhileAnimating:!0,updateWhileInteracting:!0}),this.SEGMENT_WRITERS_={Point:this.writePointGeometry_,LineString:this.writeLineStringGeometry_,LinearRing:this.writeLineStringGeometry_,Polygon:this.writePolygonGeometry_,MultiPoint:this.writeMultiPointGeometry_,MultiLineString:this.writeMultiLineStringGeometry_,MultiPolygon:this.writeMultiPolygonGeometry_,Rectangle:this.writePolygonGeometry_,Ellipse:this.writePolygonGeometry_,Circle:this.writeCircleGeometry_,GeometryCollection:this.writeGeometryCollectionGeometry_},this.source_=null,e.source?(this.source_=e.source,n=new Ct(this.source_.getFeatures()),A(this.source_,Zn,this.handleSourceAdd_,this),A(this.source_,er,this.handleSourceRemove_,this)):n=e.features,!n)throw new Error("The modify interaction requires features or a source");this.features_=n,this.features_.forEach(this.addFeature_.bind(this)),A(this.features_,ht,this.handleFeatureAdd_,this),A(this.features_,ut,this.handleFeatureRemove_,this),this.lastPointerEvent_=null}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.addFeature_=function(t){var e=t.getGeometry();e&&e.getType()in this.SEGMENT_WRITERS_&&this.SEGMENT_WRITERS_[e.getType()].call(this,t,e);var i=this.getMap();i&&i.isRendered()&&this.getActive()&&this.handlePointerAtPixel_(this.lastPixel_,i),A(t,W,this.handleFeatureChange_,this)},e.prototype.willModifyFeatures_=function(t){this.modified_||(this.modified_=!0,this.dispatchEvent(new kr(Fr,this.features_,t)))},e.prototype.removeFeature_=function(t){this.removeFeatureSegmentData_(t),this.vertexFeature_&&0===this.features_.getLength()&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),O(t,W,this.handleFeatureChange_,this)},e.prototype.removeFeatureSegmentData_=function(t){var e=this.rBush_,i=[];e.forEach((function(e){t===e.feature&&i.push(e)}));for(var n=i.length-1;n>=0;--n)e.remove(i[n])},e.prototype.setActive=function(e){this.vertexFeature_&&!e&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),t.prototype.setActive.call(this,e)},e.prototype.setMap=function(e){this.overlay_.setMap(e),t.prototype.setMap.call(this,e)},e.prototype.getOverlay=function(){return this.overlay_},e.prototype.handleSourceAdd_=function(t){t.feature&&this.features_.push(t.feature)},e.prototype.handleSourceRemove_=function(t){t.feature&&this.features_.remove(t.feature)},e.prototype.handleFeatureAdd_=function(t){this.addFeature_(t.element)},e.prototype.handleFeatureChange_=function(t){if(!this.changingFeature_){var e=t.target;this.removeFeature_(e),this.addFeature_(e)}},e.prototype.handleFeatureRemove_=function(t){var e=t.element;this.removeFeature_(e)},e.prototype.writePointGeometry_=function(t,e){var i=e.getCoordinates(),n={feature:t,geometry:e,segment:[i,i]};this.rBush_.insert(e.getExtent(),n)},e.prototype.writeMultiPointGeometry_=function(t,e){for(var i=e.getCoordinates(),n=0,r=i.length;n=0;--_)this.insertVertex_.apply(this,r[_])}return!!this.vertexFeature_},e.prototype.handleUpEvent=function(t){for(var e=this.dragSegments_.length-1;e>=0;--e){var i=this.dragSegments_[e][0],n=i.geometry;if(n.getType()===Se||n.getType()===ke)this.features_.remove(i.feature),this.features_.push(i.feature);else if(n.getType()===Fe){var r=n.getCenter(),o=i.featureSegments[0],s=i.featureSegments[1];o.segment[0]=o.segment[1]=r,s.segment[0]=s.segment[1]=r,this.rBush_.update(ie(r),o),this.rBush_.update(n.getExtent(),s)}else this.rBush_.update(Ut(i.segment),i)}return this.modified_&&(this.dispatchEvent(new kr(Sr,this.features_,t)),this.modified_=!1),!1},e.prototype.handlePointerMove_=function(t){this.lastPixel_=t.pixel,this.handlePointerAtPixel_(t.pixel,t.map)},e.prototype.handlePointerAtPixel_=function(t,e){var i,r,o,s=e.getCoordinateFromPixel(t),a=(i=ie(s),r=e.getView().getResolution()*this.pixelTolerance_,o?(o[0]=i[0]-r,o[1]=i[1]-r,o[2]=i[2]+r,o[3]=i[3]+r,o):[i[0]-r,i[1]-r,i[2]+r,i[3]+r]),h=this.rBush_.getInExtent(a);if(h.length>0){h.sort((function(t,e){return Pr(s,t)-Pr(s,e)}));var u=h[0],l=u.segment,c=Rr(s,u),p=e.getPixelFromCoordinate(c),f=Tt(t,p);if(f<=this.pixelTolerance_){var d={};if(u.geometry.getType()===Fe&&1===u.index)this.snappedToVertex_=!0,this.createOrUpdateVertexFeature_(c);else{var _=e.getPixelFromCoordinate(l[0]),g=e.getPixelFromCoordinate(l[1]),y=Ot(p,_),v=Ot(p,g);f=Math.sqrt(Math.min(y,v)),this.snappedToVertex_=f<=this.pixelTolerance_,this.snappedToVertex_&&(c=y>v?l[1]:l[0]),this.createOrUpdateVertexFeature_(c);for(var m=1,C=h.length;m=0;--o)c=n((l=(i=p[o])[0]).feature),l.depth&&(c+="-"+l.depth.join("-")),c in f||(f[c]={}),0===i[1]?(f[c].right=l,f[c].index=l.index):1==i[1]&&(f[c].left=l,f[c].index=l.index+1);for(c in f){switch(u=f[c].right,a=f[c].left,(h=(s=f[c].index)-1)<0&&(h=0),t=e=(r=(l=void 0!==a?a:u).geometry).getCoordinates(),d=!1,r.getType()){case xe:e[l.depth[0]].length>2&&(e[l.depth[0]].splice(s,1),d=!0);break;case ye:e.length>2&&(e.splice(s,1),d=!0);break;case we:t=t[l.depth[1]];case me:(t=t[l.depth[0]]).length>4&&(s==t.length-1&&(s=0),t.splice(s,1),d=!0,0===s&&(t.pop(),t.push(t[0]),h=t.length-1))}if(d){this.setGeometryCoordinates_(r,e);var _=[];if(void 0!==a&&(this.rBush_.remove(a),_.push(a.segment[0])),void 0!==u&&(this.rBush_.remove(u),_.push(u.segment[1])),void 0!==a&&void 0!==u){var g={depth:l.depth,feature:l.feature,geometry:l.geometry,index:h,segment:_};this.rBush_.insert(Ut(g.segment),g)}this.updateSegmentIndices_(r,s,l.depth,-1),this.vertexFeature_&&(this.overlay_.getSource().removeFeature(this.vertexFeature_),this.vertexFeature_=null),p.length=0}}return d},e.prototype.setGeometryCoordinates_=function(t,e){this.changingFeature_=!0,t.setCoordinates(e),this.changingFeature_=!1},e.prototype.updateSegmentIndices_=function(t,e,i,n){this.rBush_.forEachInExtent(t.getExtent(),(function(r){r.geometry===t&&(void 0===i||void 0===r.depth||function(t,e){var i=t.length;if(i!==e.length)return!1;for(var n=0;ne&&(r.index+=n)}))},e}(dn);function Ir(t,e){return t.index-e.index}function Pr(t,e){var i,n,r=e.geometry;if(r.getType()===Fe){var o=r;if(1===e.index){var s=Ot(o.getCenter(),t),a=Math.sqrt(s)-o.getRadius();return a*a}}return i=t,n=e.segment,Ot(i,At(i,n))}function Rr(t,e){var i=e.geometry;return i.getType()===Fe&&1===e.index||i.getType()===ke||i.getType()===Se?i.getClosestPoint(t):At(t,e.segment)}const Dr=Mr;var br=biigle.$require("events"),Ar=biigle.$require("messages").handleErrorResponse,Gr=biigle.$require("annotations.components.settingsTabPlugins");const Or={props:{settings:{type:Object,required:!0}},data:function(){return{opacityValue:"1",currentImage:null,isEditing:!1,exportArea:null,volumeId:null}},computed:{opacity:function(){return parseFloat(this.opacityValue)},shown:function(){return this.opacity>0},height:function(){return this.currentImage?this.currentImage.height:0},hasExportArea:function(){return null!==this.exportArea},layer:function(){return new qn({source:new hr({features:new Ct}),style:[new Yn({stroke:new An({color:"white",width:4}),image:new at({radius:6,fill:new Dn({color:"#666666"}),stroke:new An({color:"white",width:2,lineDash:[2]})})}),new Yn({stroke:new An({color:"#666666",width:1,lineDash:[2]})})],zIndex:4,updateWhileAnimating:!0,updateWhileInteracting:!0})},drawInteraction:function(){return new wr({source:this.layer.getSource(),type:"Rectangle",style:this.layer.getStyle(),minPoints:2,maxPoints:2,geometryFunction:function(t,e){t.length>1&&(t=[t[0],[t[0][0],t[1][1]],t[1],[t[1][0],t[0][1]]]);var i=e;return i?i.setCoordinates([t]):i=new lr([t]),i}})},modifyInteraction:function(){return new Dr({features:this.layer.getSource().getFeaturesCollection(),style:this.layer.getStyle(),deleteCondition:Xt})}},methods:{toggleEditing:function(){this.isEditing=!this.isEditing,this.isEditing?(this.drawInteraction.setActive(!0),this.modifyInteraction.setActive(!0)):(this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1))},deleteArea:function(){var t=this;if(this.hasExportArea&&confirm("Do you really want to delete the export area?")){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),Er.delete({id:this.volumeId}).then((function(){return t.exportArea=null})).catch((function(t){e.addFeature(i),Ar(t)}))}},updateCurrentImage:function(t,e){this.currentImage=e},maybeDrawArea:function(){if(this.clearSource(),this.exportArea&&this.height>0){var t=this.currentImage.tiled?0:this.height,e=new lr([[[this.exportArea[0],t-this.exportArea[1]],[this.exportArea[0],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[3]],[this.exportArea[2],t-this.exportArea[1]]]]);this.layer.getSource().addFeature(new wt({geometry:e}))}},handleModifyend:function(t){this.updateExportArea(t.features.item(0))},clearSource:function(){this.layer.getSource().clear()},handleDrawend:function(t){var e=this.layer.getSource(),i=e.getFeatures()[0];e.clear(),this.updateExportArea(t.feature).catch((function(){e.clear(),i&&e.addFeature(i)}))},updateExportArea:function(t){var e=this,i=t.getGeometry().getCoordinates()[0],n=this.currentImage.tiled?0:this.height;i=[i[0][0],n-i[0][1],i[2][0],n-i[2][1]].map(Math.round);var r=Er.save({id:this.volumeId},{coordinates:i}).then((function(){return e.exportArea=i}));return r.catch(Ar),r},extendMap:function(t){t.addLayer(this.layer),t.addInteraction(this.drawInteraction),t.addInteraction(this.modifyInteraction)}},watch:{opacity:function(t){t<1?this.settings.set("exportAreaOpacity",t):this.settings.delete("exportAreaOpacity"),this.layer.setOpacity(t)},exportArea:function(){this.maybeDrawArea()},height:function(){this.maybeDrawArea()}},created:function(){this.volumeId=biigle.$require("annotations.volumeId"),this.settings.has("exportAreaOpacity")&&(this.opacityValue=this.settings.get("exportAreaOpacity")),this.exportArea=biigle.$require("annotations.exportArea"),this.drawInteraction.setActive(!1),this.modifyInteraction.setActive(!1),this.drawInteraction.on("drawend",this.handleDrawend),this.modifyInteraction.on("modifyend",this.handleModifyend),br.$on("images.change",this.updateCurrentImage),br.$on("annotations.map.init",this.extendMap)}};var Tr=function(t,e,i,n,r,o,s,a){var h,u="function"==typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=i,u._compiled=!0),n&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),s?(h=function(t){(t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),r&&r.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(s)},u._ssrRegister=h):r&&(h=a?function(){r.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:r),h)if(u.functional){u._injectStyles=h;var l=u.render;u.render=function(t,e){return h.call(e),l(t,e)}}else{var c=u.beforeCreate;u.beforeCreate=c?[].concat(c,h):[h]}return{exports:t,options:u}}(Or,undefined,undefined,!1,null,null,null);const Lr=Tr.exports;Gr&&(Gr.exportArea=Lr)})()})(); \ No newline at end of file +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ "./node_modules/@biigle/ol/AssertionError.js": +/*!***************************************************!*\ + !*** ./node_modules/@biigle/ol/AssertionError.js ***! + \***************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util.js */ "./node_modules/@biigle/ol/util.js"); +/** + * @module ol/AssertionError + */ + + +/** + * Error object thrown when an assertion failed. This is an ECMA-262 Error, + * extended with a `code` property. + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error. + */ +var AssertionError = /*@__PURE__*/(function (Error) { + function AssertionError(code) { + var path = _util_js__WEBPACK_IMPORTED_MODULE_0__.VERSION === 'latest' ? _util_js__WEBPACK_IMPORTED_MODULE_0__.VERSION : 'v' + _util_js__WEBPACK_IMPORTED_MODULE_0__.VERSION.split('-')[0]; + var message = 'Assertion failed. See https://openlayers.org/en/' + path + + '/doc/errors/#' + code + ' for details.'; + + Error.call(this, message); + + /** + * Error code. The meaning of the code can be found on + * https://openlayers.org/en/latest/doc/errors/ (replace `latest` with + * the version found in the OpenLayers script's header comment if a version + * other than the latest is used). + * @type {number} + * @api + */ + this.code = code; + + /** + * @type {string} + */ + this.name = 'AssertionError'; + + // Re-assign message, see https://github.com/Rich-Harris/buble/issues/40 + this.message = message; + } + + if ( Error ) AssertionError.__proto__ = Error; + AssertionError.prototype = Object.create( Error && Error.prototype ); + AssertionError.prototype.constructor = AssertionError; + + return AssertionError; +}(Error)); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AssertionError); + +//# sourceMappingURL=AssertionError.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/Collection.js": +/*!***********************************************!*\ + !*** ./node_modules/@biigle/ol/Collection.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CollectionEvent": () => (/* binding */ CollectionEvent), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _AssertionError_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AssertionError.js */ "./node_modules/@biigle/ol/AssertionError.js"); +/* harmony import */ var _CollectionEventType_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./CollectionEventType.js */ "./node_modules/@biigle/ol/CollectionEventType.js"); +/* harmony import */ var _Object_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./Object.js */ "./node_modules/@biigle/ol/Object.js"); +/* harmony import */ var _events_Event_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./events/Event.js */ "./node_modules/@biigle/ol/events/Event.js"); +/** + * @module ol/Collection + */ + + + + + + +/** + * @enum {string} + * @private + */ +var Property = { + LENGTH: 'length' +}; + + +/** + * @classdesc + * Events emitted by {@link module:ol/Collection~Collection} instances are instances of this + * type. + */ +var CollectionEvent = /*@__PURE__*/(function (Event) { + function CollectionEvent(type, opt_element) { + Event.call(this, type); + + /** + * The element that is added to or removed from the collection. + * @type {*} + * @api + */ + this.element = opt_element; + + } + + if ( Event ) CollectionEvent.__proto__ = Event; + CollectionEvent.prototype = Object.create( Event && Event.prototype ); + CollectionEvent.prototype.constructor = CollectionEvent; + + return CollectionEvent; +}(_events_Event_js__WEBPACK_IMPORTED_MODULE_0__["default"])); + + +/** + * @typedef {Object} Options + * @property {boolean} [unique=false] Disallow the same item from being added to + * the collection twice. + */ + +/** + * @classdesc + * An expanded version of standard JS Array, adding convenience methods for + * manipulation. Add and remove changes to the Collection trigger a Collection + * event. Note that this does not cover changes to the objects _within_ the + * Collection; they trigger events on the appropriate object, not on the + * Collection as a whole. + * + * @fires CollectionEvent + * + * @template T + * @api + */ +var Collection = /*@__PURE__*/(function (BaseObject) { + function Collection(opt_array, opt_options) { + + BaseObject.call(this); + + var options = opt_options || {}; + + /** + * @private + * @type {boolean} + */ + this.unique_ = !!options.unique; + + /** + * @private + * @type {!Array} + */ + this.array_ = opt_array ? opt_array : []; + + if (this.unique_) { + for (var i = 0, ii = this.array_.length; i < ii; ++i) { + this.assertUnique_(this.array_[i], i); + } + } + + this.updateLength_(); + + } + + if ( BaseObject ) Collection.__proto__ = BaseObject; + Collection.prototype = Object.create( BaseObject && BaseObject.prototype ); + Collection.prototype.constructor = Collection; + + /** + * Remove all elements from the collection. + * @api + */ + Collection.prototype.clear = function clear () { + while (this.getLength() > 0) { + this.pop(); + } + }; + + /** + * Add elements to the collection. This pushes each item in the provided array + * to the end of the collection. + * @param {!Array} arr Array. + * @return {Collection} This collection. + * @api + */ + Collection.prototype.extend = function extend (arr) { + for (var i = 0, ii = arr.length; i < ii; ++i) { + this.push(arr[i]); + } + return this; + }; + + /** + * Iterate over each element, calling the provided callback. + * @param {function(T, number, Array): *} f The function to call + * for every element. This function takes 3 arguments (the element, the + * index and the array). The return value is ignored. + * @api + */ + Collection.prototype.forEach = function forEach (f) { + var array = this.array_; + for (var i = 0, ii = array.length; i < ii; ++i) { + f(array[i], i, array); + } + }; + + /** + * Get a reference to the underlying Array object. Warning: if the array + * is mutated, no events will be dispatched by the collection, and the + * collection's "length" property won't be in sync with the actual length + * of the array. + * @return {!Array} Array. + * @api + */ + Collection.prototype.getArray = function getArray () { + return this.array_; + }; + + /** + * Get the element at the provided index. + * @param {number} index Index. + * @return {T} Element. + * @api + */ + Collection.prototype.item = function item (index) { + return this.array_[index]; + }; + + /** + * Get the length of this collection. + * @return {number} The length of the array. + * @observable + * @api + */ + Collection.prototype.getLength = function getLength () { + return this.get(Property.LENGTH); + }; + + /** + * Insert an element at the provided index. + * @param {number} index Index. + * @param {T} elem Element. + * @api + */ + Collection.prototype.insertAt = function insertAt (index, elem) { + if (this.unique_) { + this.assertUnique_(elem); + } + this.array_.splice(index, 0, elem); + this.updateLength_(); + this.dispatchEvent( + new CollectionEvent(_CollectionEventType_js__WEBPACK_IMPORTED_MODULE_1__["default"].ADD, elem)); + }; + + /** + * Remove the last element of the collection and return it. + * Return `undefined` if the collection is empty. + * @return {T|undefined} Element. + * @api + */ + Collection.prototype.pop = function pop () { + return this.removeAt(this.getLength() - 1); + }; + + /** + * Insert the provided element at the end of the collection. + * @param {T} elem Element. + * @return {number} New length of the collection. + * @api + */ + Collection.prototype.push = function push (elem) { + if (this.unique_) { + this.assertUnique_(elem); + } + var n = this.getLength(); + this.insertAt(n, elem); + return this.getLength(); + }; + + /** + * Remove the first occurrence of an element from the collection. + * @param {T} elem Element. + * @return {T|undefined} The removed element or undefined if none found. + * @api + */ + Collection.prototype.remove = function remove (elem) { + var arr = this.array_; + for (var i = 0, ii = arr.length; i < ii; ++i) { + if (arr[i] === elem) { + return this.removeAt(i); + } + } + return undefined; + }; + + /** + * Remove the element at the provided index and return it. + * Return `undefined` if the collection does not contain this index. + * @param {number} index Index. + * @return {T|undefined} Value. + * @api + */ + Collection.prototype.removeAt = function removeAt (index) { + var prev = this.array_[index]; + this.array_.splice(index, 1); + this.updateLength_(); + this.dispatchEvent(new CollectionEvent(_CollectionEventType_js__WEBPACK_IMPORTED_MODULE_1__["default"].REMOVE, prev)); + return prev; + }; + + /** + * Set the element at the provided index. + * @param {number} index Index. + * @param {T} elem Element. + * @api + */ + Collection.prototype.setAt = function setAt (index, elem) { + var n = this.getLength(); + if (index < n) { + if (this.unique_) { + this.assertUnique_(elem, index); + } + var prev = this.array_[index]; + this.array_[index] = elem; + this.dispatchEvent( + new CollectionEvent(_CollectionEventType_js__WEBPACK_IMPORTED_MODULE_1__["default"].REMOVE, prev)); + this.dispatchEvent( + new CollectionEvent(_CollectionEventType_js__WEBPACK_IMPORTED_MODULE_1__["default"].ADD, elem)); + } else { + for (var j = n; j < index; ++j) { + this.insertAt(j, undefined); + } + this.insertAt(index, elem); + } + }; + + /** + * @private + */ + Collection.prototype.updateLength_ = function updateLength_ () { + this.set(Property.LENGTH, this.array_.length); + }; + + /** + * @private + * @param {T} elem Element. + * @param {number=} opt_except Optional index to ignore. + */ + Collection.prototype.assertUnique_ = function assertUnique_ (elem, opt_except) { + for (var i = 0, ii = this.array_.length; i < ii; ++i) { + if (this.array_[i] === elem && i !== opt_except) { + throw new _AssertionError_js__WEBPACK_IMPORTED_MODULE_2__["default"](58); + } + } + }; + + return Collection; +}(_Object_js__WEBPACK_IMPORTED_MODULE_3__["default"])); + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Collection); + +//# sourceMappingURL=Collection.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/CollectionEventType.js": +/*!********************************************************!*\ + !*** ./node_modules/@biigle/ol/CollectionEventType.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * @module ol/CollectionEventType + */ + +/** + * @enum {string} + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + /** + * Triggered when an item is added to the collection. + * @event module:ol/Collection.CollectionEvent#add + * @api + */ + ADD: 'add', + /** + * Triggered when an item is removed from the collection. + * @event module:ol/Collection.CollectionEvent#remove + * @api + */ + REMOVE: 'remove' +}); + +//# sourceMappingURL=CollectionEventType.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/Disposable.js": +/*!***********************************************!*\ + !*** ./node_modules/@biigle/ol/Disposable.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * @module ol/Disposable + */ + +/** + * @classdesc + * Objects that need to clean up after themselves. + */ +var Disposable = function Disposable() { + /** + * The object has already been disposed. + * @type {boolean} + * @private + */ + this.disposed_ = false; +}; + +/** + * Clean up. + */ +Disposable.prototype.dispose = function dispose () { + if (!this.disposed_) { + this.disposed_ = true; + this.disposeInternal(); + } +}; + +/** + * Extension point for disposable objects. + * @protected + */ +Disposable.prototype.disposeInternal = function disposeInternal () {}; + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Disposable); + +//# sourceMappingURL=Disposable.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/Feature.js": +/*!********************************************!*\ + !*** ./node_modules/@biigle/ol/Feature.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "createStyleFunction": () => (/* binding */ createStyleFunction), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _asserts_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./asserts.js */ "./node_modules/@biigle/ol/asserts.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./events.js */ "./node_modules/@biigle/ol/events.js"); +/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./events/EventType.js */ "./node_modules/@biigle/ol/events/EventType.js"); +/* harmony import */ var _Object_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Object.js */ "./node_modules/@biigle/ol/Object.js"); +/** + * @module ol/Feature + */ + + + + + +/** + * @typedef {typeof Feature|typeof import("./render/Feature.js").default} FeatureClass + */ + +/** + * @typedef {Feature|import("./render/Feature.js").default} FeatureLike + */ + +/** + * @classdesc + * A vector object for geographic features with a geometry and other + * attribute properties, similar to the features in vector file formats like + * GeoJSON. + * + * Features can be styled individually with `setStyle`; otherwise they use the + * style of their vector layer. + * + * Note that attribute properties are set as {@link module:ol/Object} properties on + * the feature object, so they are observable, and have get/set accessors. + * + * Typically, a feature has a single geometry property. You can set the + * geometry using the `setGeometry` method and get it with `getGeometry`. + * It is possible to store more than one geometry on a feature using attribute + * properties. By default, the geometry used for rendering is identified by + * the property name `geometry`. If you want to use another geometry property + * for rendering, use the `setGeometryName` method to change the attribute + * property associated with the geometry for the feature. For example: + * + * ```js + * + * import Feature from 'ol/Feature'; + * import Polygon from 'ol/geom/Polygon'; + * import Point from 'ol/geom/Point'; + * + * var feature = new Feature({ + * geometry: new Polygon(polyCoords), + * labelPoint: new Point(labelCoords), + * name: 'My Polygon' + * }); + * + * // get the polygon geometry + * var poly = feature.getGeometry(); + * + * // Render the feature as a point using the coordinates from labelPoint + * feature.setGeometryName('labelPoint'); + * + * // get the point geometry + * var point = feature.getGeometry(); + * ``` + * + * @api + */ +var Feature = /*@__PURE__*/(function (BaseObject) { + function Feature(opt_geometryOrProperties) { + + BaseObject.call(this); + + /** + * @private + * @type {number|string|undefined} + */ + this.id_ = undefined; + + /** + * @type {string} + * @private + */ + this.geometryName_ = 'geometry'; + + /** + * User provided style. + * @private + * @type {import("./style/Style.js").StyleLike} + */ + this.style_ = null; + + /** + * @private + * @type {import("./style/Style.js").StyleFunction|undefined} + */ + this.styleFunction_ = undefined; + + /** + * @private + * @type {?import("./events.js").EventsKey} + */ + this.geometryChangeKey_ = null; + + (0,_events_js__WEBPACK_IMPORTED_MODULE_0__.listen)( + this, (0,_Object_js__WEBPACK_IMPORTED_MODULE_1__.getChangeEventType)(this.geometryName_), + this.handleGeometryChanged_, this); + + if (opt_geometryOrProperties) { + if (typeof /** @type {?} */ (opt_geometryOrProperties).getSimplifiedGeometry === 'function') { + var geometry = /** @type {import("./geom/Geometry.js").default} */ (opt_geometryOrProperties); + this.setGeometry(geometry); + } else { + /** @type {Object} */ + var properties = opt_geometryOrProperties; + this.setProperties(properties); + } + } + } + + if ( BaseObject ) Feature.__proto__ = BaseObject; + Feature.prototype = Object.create( BaseObject && BaseObject.prototype ); + Feature.prototype.constructor = Feature; + + /** + * Clone this feature. If the original feature has a geometry it + * is also cloned. The feature id is not set in the clone. + * @return {Feature} The clone. + * @api + */ + Feature.prototype.clone = function clone () { + var clone = new Feature(this.getProperties()); + clone.setGeometryName(this.getGeometryName()); + var geometry = this.getGeometry(); + if (geometry) { + clone.setGeometry(geometry.clone()); + } + var style = this.getStyle(); + if (style) { + clone.setStyle(style); + } + return clone; + }; + + /** + * Get the feature's default geometry. A feature may have any number of named + * geometries. The "default" geometry (the one that is rendered by default) is + * set when calling {@link module:ol/Feature~Feature#setGeometry}. + * @return {import("./geom/Geometry.js").default|undefined} The default geometry for the feature. + * @api + * @observable + */ + Feature.prototype.getGeometry = function getGeometry () { + return ( + /** @type {import("./geom/Geometry.js").default|undefined} */ (this.get(this.geometryName_)) + ); + }; + + /** + * Get the feature identifier. This is a stable identifier for the feature and + * is either set when reading data from a remote source or set explicitly by + * calling {@link module:ol/Feature~Feature#setId}. + * @return {number|string|undefined} Id. + * @api + */ + Feature.prototype.getId = function getId () { + return this.id_; + }; + + /** + * Get the name of the feature's default geometry. By default, the default + * geometry is named `geometry`. + * @return {string} Get the property name associated with the default geometry + * for this feature. + * @api + */ + Feature.prototype.getGeometryName = function getGeometryName () { + return this.geometryName_; + }; + + /** + * Get the feature's style. Will return what was provided to the + * {@link module:ol/Feature~Feature#setStyle} method. + * @return {import("./style/Style.js").StyleLike} The feature style. + * @api + */ + Feature.prototype.getStyle = function getStyle () { + return this.style_; + }; + + /** + * Get the feature's style function. + * @return {import("./style/Style.js").StyleFunction|undefined} Return a function + * representing the current style of this feature. + * @api + */ + Feature.prototype.getStyleFunction = function getStyleFunction () { + return this.styleFunction_; + }; + + /** + * @private + */ + Feature.prototype.handleGeometryChange_ = function handleGeometryChange_ () { + this.changed(); + }; + + /** + * @private + */ + Feature.prototype.handleGeometryChanged_ = function handleGeometryChanged_ () { + if (this.geometryChangeKey_) { + (0,_events_js__WEBPACK_IMPORTED_MODULE_0__.unlistenByKey)(this.geometryChangeKey_); + this.geometryChangeKey_ = null; + } + var geometry = this.getGeometry(); + if (geometry) { + this.geometryChangeKey_ = (0,_events_js__WEBPACK_IMPORTED_MODULE_0__.listen)(geometry, + _events_EventType_js__WEBPACK_IMPORTED_MODULE_2__["default"].CHANGE, this.handleGeometryChange_, this); + } + this.changed(); + }; + + /** + * Set the default geometry for the feature. This will update the property + * with the name returned by {@link module:ol/Feature~Feature#getGeometryName}. + * @param {import("./geom/Geometry.js").default|undefined} geometry The new geometry. + * @api + * @observable + */ + Feature.prototype.setGeometry = function setGeometry (geometry) { + this.set(this.geometryName_, geometry); + }; + + /** + * Set the style for the feature. This can be a single style object, an array + * of styles, or a function that takes a resolution and returns an array of + * styles. If it is `null` the feature has no style (a `null` style). + * @param {import("./style/Style.js").StyleLike} style Style for this feature. + * @api + * @fires module:ol/events/Event~Event#event:change + */ + Feature.prototype.setStyle = function setStyle (style) { + this.style_ = style; + this.styleFunction_ = !style ? undefined : createStyleFunction(style); + this.changed(); + }; + + /** + * Set the feature id. The feature id is considered stable and may be used when + * requesting features or comparing identifiers returned from a remote source. + * The feature id can be used with the + * {@link module:ol/source/Vector~VectorSource#getFeatureById} method. + * @param {number|string|undefined} id The feature id. + * @api + * @fires module:ol/events/Event~Event#event:change + */ + Feature.prototype.setId = function setId (id) { + this.id_ = id; + this.changed(); + }; + + /** + * Set the property name to be used when getting the feature's default geometry. + * When calling {@link module:ol/Feature~Feature#getGeometry}, the value of the property with + * this name will be returned. + * @param {string} name The property name of the default geometry. + * @api + */ + Feature.prototype.setGeometryName = function setGeometryName (name) { + (0,_events_js__WEBPACK_IMPORTED_MODULE_0__.unlisten)( + this, (0,_Object_js__WEBPACK_IMPORTED_MODULE_1__.getChangeEventType)(this.geometryName_), + this.handleGeometryChanged_, this); + this.geometryName_ = name; + (0,_events_js__WEBPACK_IMPORTED_MODULE_0__.listen)( + this, (0,_Object_js__WEBPACK_IMPORTED_MODULE_1__.getChangeEventType)(this.geometryName_), + this.handleGeometryChanged_, this); + this.handleGeometryChanged_(); + }; + + return Feature; +}(_Object_js__WEBPACK_IMPORTED_MODULE_1__["default"])); + + +/** + * Convert the provided object into a feature style function. Functions passed + * through unchanged. Arrays of Style or single style objects wrapped + * in a new feature style function. + * @param {!import("./style/Style.js").StyleFunction|!Array|!import("./style/Style.js").default} obj + * A feature style function, a single style, or an array of styles. + * @return {import("./style/Style.js").StyleFunction} A style function. + */ +function createStyleFunction(obj) { + if (typeof obj === 'function') { + return obj; + } else { + /** + * @type {Array} + */ + var styles; + if (Array.isArray(obj)) { + styles = obj; + } else { + (0,_asserts_js__WEBPACK_IMPORTED_MODULE_3__.assert)(typeof /** @type {?} */ (obj).getZIndex === 'function', + 41); // Expected an `import("./style/Style.js").Style` or an array of `import("./style/Style.js").Style` + var style = /** @type {import("./style/Style.js").default} */ (obj); + styles = [style]; + } + return function() { + return styles; + }; + } +} +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Feature); + +//# sourceMappingURL=Feature.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/ImageState.js": +/*!***********************************************!*\ + !*** ./node_modules/@biigle/ol/ImageState.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * @module ol/ImageState + */ + +/** + * @enum {number} + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + IDLE: 0, + LOADING: 1, + LOADED: 2, + ERROR: 3 +}); + +//# sourceMappingURL=ImageState.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/LayerType.js": +/*!**********************************************!*\ + !*** ./node_modules/@biigle/ol/LayerType.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * @module ol/LayerType + */ + +/** + * A layer type used when creating layer renderers. + * @enum {string} + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + IMAGE: 'IMAGE', + TILE: 'TILE', + VECTOR_TILE: 'VECTOR_TILE', + VECTOR: 'VECTOR' +}); + +//# sourceMappingURL=LayerType.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/MapBrowserEvent.js": +/*!****************************************************!*\ + !*** ./node_modules/@biigle/ol/MapBrowserEvent.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _MapEvent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MapEvent.js */ "./node_modules/@biigle/ol/MapEvent.js"); +/** + * @module ol/MapBrowserEvent + */ + + +/** + * @classdesc + * Events emitted as map browser events are instances of this type. + * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map browser event. + */ +var MapBrowserEvent = /*@__PURE__*/(function (MapEvent) { + function MapBrowserEvent(type, map, browserEvent, opt_dragging, opt_frameState) { + + MapEvent.call(this, type, map, opt_frameState); + + /** + * The original browser event. + * @const + * @type {Event} + * @api + */ + this.originalEvent = browserEvent; + + /** + * The map pixel relative to the viewport corresponding to the original browser event. + * @type {import("./pixel.js").Pixel} + * @api + */ + this.pixel = map.getEventPixel(browserEvent); + + /** + * The coordinate in view projection corresponding to the original browser event. + * @type {import("./coordinate.js").Coordinate} + * @api + */ + this.coordinate = map.getCoordinateFromPixel(this.pixel); + + /** + * Indicates if the map is currently being dragged. Only set for + * `POINTERDRAG` and `POINTERMOVE` events. Default is `false`. + * + * @type {boolean} + * @api + */ + this.dragging = opt_dragging !== undefined ? opt_dragging : false; + + } + + if ( MapEvent ) MapBrowserEvent.__proto__ = MapEvent; + MapBrowserEvent.prototype = Object.create( MapEvent && MapEvent.prototype ); + MapBrowserEvent.prototype.constructor = MapBrowserEvent; + + /** + * Prevents the default browser action. + * See https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault. + * @override + * @api + */ + MapBrowserEvent.prototype.preventDefault = function preventDefault () { + MapEvent.prototype.preventDefault.call(this); + this.originalEvent.preventDefault(); + }; + + /** + * Prevents further propagation of the current event. + * See https://developer.mozilla.org/en-US/docs/Web/API/event.stopPropagation. + * @override + * @api + */ + MapBrowserEvent.prototype.stopPropagation = function stopPropagation () { + MapEvent.prototype.stopPropagation.call(this); + this.originalEvent.stopPropagation(); + }; + + return MapBrowserEvent; +}(_MapEvent_js__WEBPACK_IMPORTED_MODULE_0__["default"])); + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MapBrowserEvent); + +//# sourceMappingURL=MapBrowserEvent.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/MapBrowserEventType.js": +/*!********************************************************!*\ + !*** ./node_modules/@biigle/ol/MapBrowserEventType.js ***! + \********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./events/EventType.js */ "./node_modules/@biigle/ol/events/EventType.js"); +/** + * @module ol/MapBrowserEventType + */ + + +/** + * Constants for event names. + * @enum {string} + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + + /** + * A true single click with no dragging and no double click. Note that this + * event is delayed by 250 ms to ensure that it is not a double click. + * @event module:ol/MapBrowserEvent~MapBrowserEvent#singleclick + * @api + */ + SINGLECLICK: 'singleclick', + + /** + * A click with no dragging. A double click will fire two of this. + * @event module:ol/MapBrowserEvent~MapBrowserEvent#click + * @api + */ + CLICK: _events_EventType_js__WEBPACK_IMPORTED_MODULE_0__["default"].CLICK, + + /** + * A true double click, with no dragging. + * @event module:ol/MapBrowserEvent~MapBrowserEvent#dblclick + * @api + */ + DBLCLICK: _events_EventType_js__WEBPACK_IMPORTED_MODULE_0__["default"].DBLCLICK, + + /** + * Triggered when a pointer is dragged. + * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointerdrag + * @api + */ + POINTERDRAG: 'pointerdrag', + + /** + * Triggered when a pointer is moved. Note that on touch devices this is + * triggered when the map is panned, so is not the same as mousemove. + * @event module:ol/MapBrowserEvent~MapBrowserEvent#pointermove + * @api + */ + POINTERMOVE: 'pointermove', + + POINTERDOWN: 'pointerdown', + POINTERUP: 'pointerup', + POINTEROVER: 'pointerover', + POINTEROUT: 'pointerout', + POINTERENTER: 'pointerenter', + POINTERLEAVE: 'pointerleave', + POINTERCANCEL: 'pointercancel' +}); + +//# sourceMappingURL=MapBrowserEventType.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/MapBrowserPointerEvent.js": +/*!***********************************************************!*\ + !*** ./node_modules/@biigle/ol/MapBrowserPointerEvent.js ***! + \***********************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _MapBrowserEvent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./MapBrowserEvent.js */ "./node_modules/@biigle/ol/MapBrowserEvent.js"); +/** + * @module ol/MapBrowserPointerEvent + */ + + +var MapBrowserPointerEvent = /*@__PURE__*/(function (MapBrowserEvent) { + function MapBrowserPointerEvent(type, map, pointerEvent, opt_dragging, opt_frameState) { + + MapBrowserEvent.call(this, type, map, pointerEvent.originalEvent, opt_dragging, opt_frameState); + + /** + * @const + * @type {import("./pointer/PointerEvent.js").default} + */ + this.pointerEvent = pointerEvent; + + } + + if ( MapBrowserEvent ) MapBrowserPointerEvent.__proto__ = MapBrowserEvent; + MapBrowserPointerEvent.prototype = Object.create( MapBrowserEvent && MapBrowserEvent.prototype ); + MapBrowserPointerEvent.prototype.constructor = MapBrowserPointerEvent; + + return MapBrowserPointerEvent; +}(_MapBrowserEvent_js__WEBPACK_IMPORTED_MODULE_0__["default"])); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MapBrowserPointerEvent); + +//# sourceMappingURL=MapBrowserPointerEvent.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/MapEvent.js": +/*!*********************************************!*\ + !*** ./node_modules/@biigle/ol/MapEvent.js ***! + \*********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _events_Event_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./events/Event.js */ "./node_modules/@biigle/ol/events/Event.js"); +/** + * @module ol/MapEvent + */ + + +/** + * @classdesc + * Events emitted as map events are instances of this type. + * See {@link module:ol/PluggableMap~PluggableMap} for which events trigger a map event. + */ +var MapEvent = /*@__PURE__*/(function (Event) { + function MapEvent(type, map, opt_frameState) { + + Event.call(this, type); + + /** + * The map where the event occurred. + * @type {import("./PluggableMap.js").default} + * @api + */ + this.map = map; + + /** + * The frame state at the time of the event. + * @type {?import("./PluggableMap.js").FrameState} + * @api + */ + this.frameState = opt_frameState !== undefined ? opt_frameState : null; + + } + + if ( Event ) MapEvent.__proto__ = Event; + MapEvent.prototype = Object.create( Event && Event.prototype ); + MapEvent.prototype.constructor = MapEvent; + + return MapEvent; +}(_events_Event_js__WEBPACK_IMPORTED_MODULE_0__["default"])); + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (MapEvent); + +//# sourceMappingURL=MapEvent.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/Object.js": +/*!*******************************************!*\ + !*** ./node_modules/@biigle/ol/Object.js ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "ObjectEvent": () => (/* binding */ ObjectEvent), +/* harmony export */ "getChangeEventType": () => (/* binding */ getChangeEventType), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util.js */ "./node_modules/@biigle/ol/util.js"); +/* harmony import */ var _ObjectEventType_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./ObjectEventType.js */ "./node_modules/@biigle/ol/ObjectEventType.js"); +/* harmony import */ var _Observable_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./Observable.js */ "./node_modules/@biigle/ol/Observable.js"); +/* harmony import */ var _events_Event_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./events/Event.js */ "./node_modules/@biigle/ol/events/Event.js"); +/* harmony import */ var _obj_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./obj.js */ "./node_modules/@biigle/ol/obj.js"); +/** + * @module ol/Object + */ + + + + + + + +/** + * @classdesc + * Events emitted by {@link module:ol/Object~BaseObject} instances are instances of this type. + */ +var ObjectEvent = /*@__PURE__*/(function (Event) { + function ObjectEvent(type, key, oldValue) { + Event.call(this, type); + + /** + * The name of the property whose value is changing. + * @type {string} + * @api + */ + this.key = key; + + /** + * The old value. To get the new value use `e.target.get(e.key)` where + * `e` is the event object. + * @type {*} + * @api + */ + this.oldValue = oldValue; + + } + + if ( Event ) ObjectEvent.__proto__ = Event; + ObjectEvent.prototype = Object.create( Event && Event.prototype ); + ObjectEvent.prototype.constructor = ObjectEvent; + + return ObjectEvent; +}(_events_Event_js__WEBPACK_IMPORTED_MODULE_0__["default"])); + + +/** + * @classdesc + * Abstract base class; normally only used for creating subclasses and not + * instantiated in apps. + * Most non-trivial classes inherit from this. + * + * This extends {@link module:ol/Observable} with observable + * properties, where each property is observable as well as the object as a + * whole. + * + * Classes that inherit from this have pre-defined properties, to which you can + * add your owns. The pre-defined properties are listed in this documentation as + * 'Observable Properties', and have their own accessors; for example, + * {@link module:ol/Map~Map} has a `target` property, accessed with + * `getTarget()` and changed with `setTarget()`. Not all properties are however + * settable. There are also general-purpose accessors `get()` and `set()`. For + * example, `get('target')` is equivalent to `getTarget()`. + * + * The `set` accessors trigger a change event, and you can monitor this by + * registering a listener. For example, {@link module:ol/View~View} has a + * `center` property, so `view.on('change:center', function(evt) {...});` would + * call the function whenever the value of the center property changes. Within + * the function, `evt.target` would be the view, so `evt.target.getCenter()` + * would return the new center. + * + * You can add your own observable properties with + * `object.set('prop', 'value')`, and retrieve that with `object.get('prop')`. + * You can listen for changes on that property value with + * `object.on('change:prop', listener)`. You can get a list of all + * properties with {@link module:ol/Object~BaseObject#getProperties}. + * + * Note that the observable properties are separate from standard JS properties. + * You can, for example, give your map object a title with + * `map.title='New title'` and with `map.set('title', 'Another title')`. The + * first will be a `hasOwnProperty`; the second will appear in + * `getProperties()`. Only the second is observable. + * + * Properties can be deleted by using the unset method. E.g. + * object.unset('foo'). + * + * @fires ObjectEvent + * @api + */ +var BaseObject = /*@__PURE__*/(function (Observable) { + function BaseObject(opt_values) { + Observable.call(this); + + // Call {@link module:ol/util~getUid} to ensure that the order of objects' ids is + // the same as the order in which they were created. This also helps to + // ensure that object properties are always added in the same order, which + // helps many JavaScript engines generate faster code. + (0,_util_js__WEBPACK_IMPORTED_MODULE_1__.getUid)(this); + + /** + * @private + * @type {!Object} + */ + this.values_ = {}; + + if (opt_values !== undefined) { + this.setProperties(opt_values); + } + } + + if ( Observable ) BaseObject.__proto__ = Observable; + BaseObject.prototype = Object.create( Observable && Observable.prototype ); + BaseObject.prototype.constructor = BaseObject; + + /** + * Gets a value. + * @param {string} key Key name. + * @return {*} Value. + * @api + */ + BaseObject.prototype.get = function get (key) { + var value; + if (this.values_.hasOwnProperty(key)) { + value = this.values_[key]; + } + return value; + }; + + /** + * Get a list of object property names. + * @return {Array} List of property names. + * @api + */ + BaseObject.prototype.getKeys = function getKeys () { + return Object.keys(this.values_); + }; + + /** + * Get an object of all property names and values. + * @return {Object} Object. + * @api + */ + BaseObject.prototype.getProperties = function getProperties () { + return (0,_obj_js__WEBPACK_IMPORTED_MODULE_2__.assign)({}, this.values_); + }; + + /** + * @param {string} key Key name. + * @param {*} oldValue Old value. + */ + BaseObject.prototype.notify = function notify (key, oldValue) { + var eventType; + eventType = getChangeEventType(key); + this.dispatchEvent(new ObjectEvent(eventType, key, oldValue)); + eventType = _ObjectEventType_js__WEBPACK_IMPORTED_MODULE_3__["default"].PROPERTYCHANGE; + this.dispatchEvent(new ObjectEvent(eventType, key, oldValue)); + }; + + /** + * Sets a value. + * @param {string} key Key name. + * @param {*} value Value. + * @param {boolean=} opt_silent Update without triggering an event. + * @api + */ + BaseObject.prototype.set = function set (key, value, opt_silent) { + if (opt_silent) { + this.values_[key] = value; + } else { + var oldValue = this.values_[key]; + this.values_[key] = value; + if (oldValue !== value) { + this.notify(key, oldValue); + } + } + }; + + /** + * Sets a collection of key-value pairs. Note that this changes any existing + * properties and adds new ones (it does not remove any existing properties). + * @param {Object} values Values. + * @param {boolean=} opt_silent Update without triggering an event. + * @api + */ + BaseObject.prototype.setProperties = function setProperties (values, opt_silent) { + for (var key in values) { + this.set(key, values[key], opt_silent); + } + }; + + /** + * Unsets a property. + * @param {string} key Key name. + * @param {boolean=} opt_silent Unset without triggering an event. + * @api + */ + BaseObject.prototype.unset = function unset (key, opt_silent) { + if (key in this.values_) { + var oldValue = this.values_[key]; + delete this.values_[key]; + if (!opt_silent) { + this.notify(key, oldValue); + } + } + }; + + return BaseObject; +}(_Observable_js__WEBPACK_IMPORTED_MODULE_4__["default"])); + + +/** + * @type {Object} + */ +var changeEventTypeCache = {}; + + +/** + * @param {string} key Key name. + * @return {string} Change name. + */ +function getChangeEventType(key) { + return changeEventTypeCache.hasOwnProperty(key) ? + changeEventTypeCache[key] : + (changeEventTypeCache[key] = 'change:' + key); +} + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (BaseObject); + +//# sourceMappingURL=Object.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/ObjectEventType.js": +/*!****************************************************!*\ + !*** ./node_modules/@biigle/ol/ObjectEventType.js ***! + \****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * @module ol/ObjectEventType + */ + +/** + * @enum {string} + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + /** + * Triggered when a property is changed. + * @event module:ol/Object.ObjectEvent#propertychange + * @api + */ + PROPERTYCHANGE: 'propertychange' +}); + +//# sourceMappingURL=ObjectEventType.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/Observable.js": +/*!***********************************************!*\ + !*** ./node_modules/@biigle/ol/Observable.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "unByKey": () => (/* binding */ unByKey), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./events.js */ "./node_modules/@biigle/ol/events.js"); +/* harmony import */ var _events_Target_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./events/Target.js */ "./node_modules/@biigle/ol/events/Target.js"); +/* harmony import */ var _events_EventType_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./events/EventType.js */ "./node_modules/@biigle/ol/events/EventType.js"); +/** + * @module ol/Observable + */ + + + + +/** + * @classdesc + * Abstract base class; normally only used for creating subclasses and not + * instantiated in apps. + * An event target providing convenient methods for listener registration + * and unregistration. A generic `change` event is always available through + * {@link module:ol/Observable~Observable#changed}. + * + * @fires import("./events/Event.js").Event + * @api + */ +var Observable = /*@__PURE__*/(function (EventTarget) { + function Observable() { + + EventTarget.call(this); + + /** + * @private + * @type {number} + */ + this.revision_ = 0; + + } + + if ( EventTarget ) Observable.__proto__ = EventTarget; + Observable.prototype = Object.create( EventTarget && EventTarget.prototype ); + Observable.prototype.constructor = Observable; + + /** + * Increases the revision counter and dispatches a 'change' event. + * @api + */ + Observable.prototype.changed = function changed () { + ++this.revision_; + this.dispatchEvent(_events_EventType_js__WEBPACK_IMPORTED_MODULE_0__["default"].CHANGE); + }; + + /** + * Get the version number for this object. Each time the object is modified, + * its version number will be incremented. + * @return {number} Revision. + * @api + */ + Observable.prototype.getRevision = function getRevision () { + return this.revision_; + }; + + /** + * Listen for a certain type of event. + * @param {string|Array} type The event type or array of event types. + * @param {function(?): ?} listener The listener function. + * @return {import("./events.js").EventsKey|Array} Unique key for the listener. If + * called with an array of event types as the first argument, the return + * will be an array of keys. + * @api + */ + Observable.prototype.on = function on (type, listener) { + if (Array.isArray(type)) { + var len = type.length; + var keys = new Array(len); + for (var i = 0; i < len; ++i) { + keys[i] = (0,_events_js__WEBPACK_IMPORTED_MODULE_1__.listen)(this, type[i], listener); + } + return keys; + } else { + return (0,_events_js__WEBPACK_IMPORTED_MODULE_1__.listen)(this, /** @type {string} */ (type), listener); + } + }; + + /** + * Listen once for a certain type of event. + * @param {string|Array} type The event type or array of event types. + * @param {function(?): ?} listener The listener function. + * @return {import("./events.js").EventsKey|Array} Unique key for the listener. If + * called with an array of event types as the first argument, the return + * will be an array of keys. + * @api + */ + Observable.prototype.once = function once (type, listener) { + if (Array.isArray(type)) { + var len = type.length; + var keys = new Array(len); + for (var i = 0; i < len; ++i) { + keys[i] = (0,_events_js__WEBPACK_IMPORTED_MODULE_1__.listenOnce)(this, type[i], listener); + } + return keys; + } else { + return (0,_events_js__WEBPACK_IMPORTED_MODULE_1__.listenOnce)(this, /** @type {string} */ (type), listener); + } + }; + + /** + * Unlisten for a certain type of event. + * @param {string|Array} type The event type or array of event types. + * @param {function(?): ?} listener The listener function. + * @api + */ + Observable.prototype.un = function un (type, listener) { + if (Array.isArray(type)) { + for (var i = 0, ii = type.length; i < ii; ++i) { + (0,_events_js__WEBPACK_IMPORTED_MODULE_1__.unlisten)(this, type[i], listener); + } + return; + } else { + (0,_events_js__WEBPACK_IMPORTED_MODULE_1__.unlisten)(this, /** @type {string} */ (type), listener); + } + }; + + return Observable; +}(_events_Target_js__WEBPACK_IMPORTED_MODULE_2__["default"])); + + +/** + * Removes an event listener using the key returned by `on()` or `once()`. + * @param {import("./events.js").EventsKey|Array} key The key returned by `on()` + * or `once()` (or an array of keys). + * @api + */ +function unByKey(key) { + if (Array.isArray(key)) { + for (var i = 0, ii = key.length; i < ii; ++i) { + (0,_events_js__WEBPACK_IMPORTED_MODULE_1__.unlistenByKey)(key[i]); + } + } else { + (0,_events_js__WEBPACK_IMPORTED_MODULE_1__.unlistenByKey)(/** @type {import("./events.js").EventsKey} */ (key)); + } +} + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Observable); + +//# sourceMappingURL=Observable.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/array.js": +/*!******************************************!*\ + !*** ./node_modules/@biigle/ol/array.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "binarySearch": () => (/* binding */ binarySearch), +/* harmony export */ "numberSafeCompareFunction": () => (/* binding */ numberSafeCompareFunction), +/* harmony export */ "includes": () => (/* binding */ includes), +/* harmony export */ "linearFindNearest": () => (/* binding */ linearFindNearest), +/* harmony export */ "reverseSubArray": () => (/* binding */ reverseSubArray), +/* harmony export */ "extend": () => (/* binding */ extend), +/* harmony export */ "remove": () => (/* binding */ remove), +/* harmony export */ "find": () => (/* binding */ find), +/* harmony export */ "equals": () => (/* binding */ equals), +/* harmony export */ "stableSort": () => (/* binding */ stableSort), +/* harmony export */ "findIndex": () => (/* binding */ findIndex), +/* harmony export */ "isSorted": () => (/* binding */ isSorted) +/* harmony export */ }); +/** + * @module ol/array + */ + + +/** + * Performs a binary search on the provided sorted list and returns the index of the item if found. If it can't be found it'll return -1. + * https://github.com/darkskyapp/binary-search + * + * @param {Array<*>} haystack Items to search through. + * @param {*} needle The item to look for. + * @param {Function=} opt_comparator Comparator function. + * @return {number} The index of the item if found, -1 if not. + */ +function binarySearch(haystack, needle, opt_comparator) { + var mid, cmp; + var comparator = opt_comparator || numberSafeCompareFunction; + var low = 0; + var high = haystack.length; + var found = false; + + while (low < high) { + /* Note that "(low + high) >>> 1" may overflow, and results in a typecast + * to double (which gives the wrong results). */ + mid = low + (high - low >> 1); + cmp = +comparator(haystack[mid], needle); + + if (cmp < 0.0) { /* Too low. */ + low = mid + 1; + + } else { /* Key found or too high */ + high = mid; + found = !cmp; + } + } + + /* Key not found. */ + return found ? low : ~low; +} + + +/** + * Compare function for array sort that is safe for numbers. + * @param {*} a The first object to be compared. + * @param {*} b The second object to be compared. + * @return {number} A negative number, zero, or a positive number as the first + * argument is less than, equal to, or greater than the second. + */ +function numberSafeCompareFunction(a, b) { + return a > b ? 1 : a < b ? -1 : 0; +} + + +/** + * Whether the array contains the given object. + * @param {Array<*>} arr The array to test for the presence of the element. + * @param {*} obj The object for which to test. + * @return {boolean} The object is in the array. + */ +function includes(arr, obj) { + return arr.indexOf(obj) >= 0; +} + + +/** + * @param {Array} arr Array. + * @param {number} target Target. + * @param {number} direction 0 means return the nearest, > 0 + * means return the largest nearest, < 0 means return the + * smallest nearest. + * @return {number} Index. + */ +function linearFindNearest(arr, target, direction) { + var n = arr.length; + if (arr[0] <= target) { + return 0; + } else if (target <= arr[n - 1]) { + return n - 1; + } else { + var i; + if (direction > 0) { + for (i = 1; i < n; ++i) { + if (arr[i] < target) { + return i - 1; + } + } + } else if (direction < 0) { + for (i = 1; i < n; ++i) { + if (arr[i] <= target) { + return i; + } + } + } else { + for (i = 1; i < n; ++i) { + if (arr[i] == target) { + return i; + } else if (arr[i] < target) { + if (arr[i - 1] - target < target - arr[i]) { + return i - 1; + } else { + return i; + } + } + } + } + return n - 1; + } +} + + +/** + * @param {Array<*>} arr Array. + * @param {number} begin Begin index. + * @param {number} end End index. + */ +function reverseSubArray(arr, begin, end) { + while (begin < end) { + var tmp = arr[begin]; + arr[begin] = arr[end]; + arr[end] = tmp; + ++begin; + --end; + } +} + + +/** + * @param {Array} arr The array to modify. + * @param {!Array|VALUE} data The elements or arrays of elements to add to arr. + * @template VALUE + */ +function extend(arr, data) { + var extension = Array.isArray(data) ? data : [data]; + var length = extension.length; + for (var i = 0; i < length; i++) { + arr[arr.length] = extension[i]; + } +} + + +/** + * @param {Array} arr The array to modify. + * @param {VALUE} obj The element to remove. + * @template VALUE + * @return {boolean} If the element was removed. + */ +function remove(arr, obj) { + var i = arr.indexOf(obj); + var found = i > -1; + if (found) { + arr.splice(i, 1); + } + return found; +} + + +/** + * @param {Array} arr The array to search in. + * @param {function(VALUE, number, ?) : boolean} func The function to compare. + * @template VALUE + * @return {VALUE|null} The element found or null. + */ +function find(arr, func) { + var length = arr.length >>> 0; + var value; + + for (var i = 0; i < length; i++) { + value = arr[i]; + if (func(value, i, arr)) { + return value; + } + } + return null; +} + + +/** + * @param {Array|Uint8ClampedArray} arr1 The first array to compare. + * @param {Array|Uint8ClampedArray} arr2 The second array to compare. + * @return {boolean} Whether the two arrays are equal. + */ +function equals(arr1, arr2) { + var len1 = arr1.length; + if (len1 !== arr2.length) { + return false; + } + for (var i = 0; i < len1; i++) { + if (arr1[i] !== arr2[i]) { + return false; + } + } + return true; +} + + +/** + * Sort the passed array such that the relative order of equal elements is preverved. + * See https://en.wikipedia.org/wiki/Sorting_algorithm#Stability for details. + * @param {Array<*>} arr The array to sort (modifies original). + * @param {!function(*, *): number} compareFnc Comparison function. + * @api + */ +function stableSort(arr, compareFnc) { + var length = arr.length; + var tmp = Array(arr.length); + var i; + for (i = 0; i < length; i++) { + tmp[i] = {index: i, value: arr[i]}; + } + tmp.sort(function(a, b) { + return compareFnc(a.value, b.value) || a.index - b.index; + }); + for (i = 0; i < arr.length; i++) { + arr[i] = tmp[i].value; + } +} + + +/** + * @param {Array<*>} arr The array to search in. + * @param {Function} func Comparison function. + * @return {number} Return index. + */ +function findIndex(arr, func) { + var index; + var found = !arr.every(function(el, idx) { + index = idx; + return !func(el, idx, arr); + }); + return found ? index : -1; +} + + +/** + * @param {Array<*>} arr The array to test. + * @param {Function=} opt_func Comparison function. + * @param {boolean=} opt_strict Strictly sorted (default false). + * @return {boolean} Return index. + */ +function isSorted(arr, opt_func, opt_strict) { + var compare = opt_func || numberSafeCompareFunction; + return arr.every(function(currentVal, index) { + if (index === 0) { + return true; + } + var res = compare(arr[index - 1], currentVal); + return !(res > 0 || opt_strict && res === 0); + }); +} + +//# sourceMappingURL=array.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/asserts.js": +/*!********************************************!*\ + !*** ./node_modules/@biigle/ol/asserts.js ***! + \********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "assert": () => (/* binding */ assert) +/* harmony export */ }); +/* harmony import */ var _AssertionError_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./AssertionError.js */ "./node_modules/@biigle/ol/AssertionError.js"); +/** + * @module ol/asserts + */ + + +/** + * @param {*} assertion Assertion we expected to be truthy. + * @param {number} errorCode Error code. + */ +function assert(assertion, errorCode) { + if (!assertion) { + throw new _AssertionError_js__WEBPACK_IMPORTED_MODULE_0__["default"](errorCode); + } +} + +//# sourceMappingURL=asserts.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/color.js": +/*!******************************************!*\ + !*** ./node_modules/@biigle/ol/color.js ***! + \******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "asString": () => (/* binding */ asString), +/* harmony export */ "fromString": () => (/* binding */ fromString), +/* harmony export */ "asArray": () => (/* binding */ asArray), +/* harmony export */ "normalize": () => (/* binding */ normalize), +/* harmony export */ "toString": () => (/* binding */ toString) +/* harmony export */ }); +/* harmony import */ var _asserts_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./asserts.js */ "./node_modules/@biigle/ol/asserts.js"); +/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./math.js */ "./node_modules/@biigle/ol/math.js"); +/** + * @module ol/color + */ + + + + +/** + * A color represented as a short array [red, green, blue, alpha]. + * red, green, and blue should be integers in the range 0..255 inclusive. + * alpha should be a float in the range 0..1 inclusive. If no alpha value is + * given then `1` will be used. + * @typedef {Array} Color + * @api + */ + + +/** + * This RegExp matches # followed by 3, 4, 6, or 8 hex digits. + * @const + * @type {RegExp} + * @private + */ +var HEX_COLOR_RE_ = /^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i; + + +/** + * Regular expression for matching potential named color style strings. + * @const + * @type {RegExp} + * @private + */ +var NAMED_COLOR_RE_ = /^([a-z]*)$/i; + + +/** + * Return the color as an rgba string. + * @param {Color|string} color Color. + * @return {string} Rgba string. + * @api + */ +function asString(color) { + if (typeof color === 'string') { + return color; + } else { + return toString(color); + } +} + +/** + * Return named color as an rgba string. + * @param {string} color Named color. + * @return {string} Rgb string. + */ +function fromNamed(color) { + var el = document.createElement('div'); + el.style.color = color; + if (el.style.color !== '') { + document.body.appendChild(el); + var rgb = getComputedStyle(el).color; + document.body.removeChild(el); + return rgb; + } else { + return ''; + } +} + + +/** + * @param {string} s String. + * @return {Color} Color. + */ +var fromString = ( + function() { + + // We maintain a small cache of parsed strings. To provide cheap LRU-like + // semantics, whenever the cache grows too large we simply delete an + // arbitrary 25% of the entries. + + /** + * @const + * @type {number} + */ + var MAX_CACHE_SIZE = 1024; + + /** + * @type {Object} + */ + var cache = {}; + + /** + * @type {number} + */ + var cacheSize = 0; + + return ( + /** + * @param {string} s String. + * @return {Color} Color. + */ + function(s) { + var color; + if (cache.hasOwnProperty(s)) { + color = cache[s]; + } else { + if (cacheSize >= MAX_CACHE_SIZE) { + var i = 0; + for (var key in cache) { + if ((i++ & 3) === 0) { + delete cache[key]; + --cacheSize; + } + } + } + color = fromStringInternal_(s); + cache[s] = color; + ++cacheSize; + } + return color; + } + ); + + })(); + +/** + * Return the color as an array. This function maintains a cache of calculated + * arrays which means the result should not be modified. + * @param {Color|string} color Color. + * @return {Color} Color. + * @api + */ +function asArray(color) { + if (Array.isArray(color)) { + return color; + } else { + return fromString(color); + } +} + +/** + * @param {string} s String. + * @private + * @return {Color} Color. + */ +function fromStringInternal_(s) { + var r, g, b, a, color; + + if (NAMED_COLOR_RE_.exec(s)) { + s = fromNamed(s); + } + + if (HEX_COLOR_RE_.exec(s)) { // hex + var n = s.length - 1; // number of hex digits + var d; // number of digits per channel + if (n <= 4) { + d = 1; + } else { + d = 2; + } + var hasAlpha = n === 4 || n === 8; + r = parseInt(s.substr(1 + 0 * d, d), 16); + g = parseInt(s.substr(1 + 1 * d, d), 16); + b = parseInt(s.substr(1 + 2 * d, d), 16); + if (hasAlpha) { + a = parseInt(s.substr(1 + 3 * d, d), 16); + } else { + a = 255; + } + if (d == 1) { + r = (r << 4) + r; + g = (g << 4) + g; + b = (b << 4) + b; + if (hasAlpha) { + a = (a << 4) + a; + } + } + color = [r, g, b, a / 255]; + } else if (s.indexOf('rgba(') == 0) { // rgba() + color = s.slice(5, -1).split(',').map(Number); + normalize(color); + } else if (s.indexOf('rgb(') == 0) { // rgb() + color = s.slice(4, -1).split(',').map(Number); + color.push(1); + normalize(color); + } else { + (0,_asserts_js__WEBPACK_IMPORTED_MODULE_0__.assert)(false, 14); // Invalid color + } + return color; +} + + +/** + * TODO this function is only used in the test, we probably shouldn't export it + * @param {Color} color Color. + * @return {Color} Clamped color. + */ +function normalize(color) { + color[0] = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.clamp)((color[0] + 0.5) | 0, 0, 255); + color[1] = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.clamp)((color[1] + 0.5) | 0, 0, 255); + color[2] = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.clamp)((color[2] + 0.5) | 0, 0, 255); + color[3] = (0,_math_js__WEBPACK_IMPORTED_MODULE_1__.clamp)(color[3], 0, 1); + return color; +} + + +/** + * @param {Color} color Color. + * @return {string} String. + */ +function toString(color) { + var r = color[0]; + if (r != (r | 0)) { + r = (r + 0.5) | 0; + } + var g = color[1]; + if (g != (g | 0)) { + g = (g + 0.5) | 0; + } + var b = color[2]; + if (b != (b | 0)) { + b = (b + 0.5) | 0; + } + var a = color[3] === undefined ? 1 : color[3]; + return 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')'; +} + +//# sourceMappingURL=color.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/colorlike.js": +/*!**********************************************!*\ + !*** ./node_modules/@biigle/ol/colorlike.js ***! + \**********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "asColorLike": () => (/* binding */ asColorLike) +/* harmony export */ }); +/* harmony import */ var _color_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./color.js */ "./node_modules/@biigle/ol/color.js"); +/** + * @module ol/colorlike + */ + + + +/** + * A type accepted by CanvasRenderingContext2D.fillStyle + * or CanvasRenderingContext2D.strokeStyle. + * Represents a color, pattern, or gradient. The origin for patterns and + * gradients as fill style is an increment of 512 css pixels from map coordinate + * `[0, 0]`. For seamless repeat patterns, width and height of the pattern image + * must be a factor of two (2, 4, 8, ..., 512). + * + * @typedef {string|CanvasPattern|CanvasGradient} ColorLike + * @api + */ + + +/** + * @param {import("./color.js").Color|ColorLike} color Color. + * @return {ColorLike} The color as an {@link ol/colorlike~ColorLike}. + * @api + */ +function asColorLike(color) { + if (Array.isArray(color)) { + return (0,_color_js__WEBPACK_IMPORTED_MODULE_0__.toString)(color); + } else { + return color; + } +} + +//# sourceMappingURL=colorlike.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/coordinate.js": +/*!***********************************************!*\ + !*** ./node_modules/@biigle/ol/coordinate.js ***! + \***********************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "add": () => (/* binding */ add), +/* harmony export */ "closestOnCircle": () => (/* binding */ closestOnCircle), +/* harmony export */ "closestOnSegment": () => (/* binding */ closestOnSegment), +/* harmony export */ "createStringXY": () => (/* binding */ createStringXY), +/* harmony export */ "degreesToStringHDMS": () => (/* binding */ degreesToStringHDMS), +/* harmony export */ "format": () => (/* binding */ format), +/* harmony export */ "equals": () => (/* binding */ equals), +/* harmony export */ "rotate": () => (/* binding */ rotate), +/* harmony export */ "scale": () => (/* binding */ scale), +/* harmony export */ "squaredDistance": () => (/* binding */ squaredDistance), +/* harmony export */ "distance": () => (/* binding */ distance), +/* harmony export */ "squaredDistanceToSegment": () => (/* binding */ squaredDistanceToSegment), +/* harmony export */ "toStringHDMS": () => (/* binding */ toStringHDMS), +/* harmony export */ "toStringXY": () => (/* binding */ toStringXY) +/* harmony export */ }); +/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ "./node_modules/@biigle/ol/math.js"); +/* harmony import */ var _string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./string.js */ "./node_modules/@biigle/ol/string.js"); +/** + * @module ol/coordinate + */ + + + + +/** + * An array of numbers representing an xy coordinate. Example: `[16, 48]`. + * @typedef {Array} Coordinate + * @api + */ + + +/** + * A function that takes a {@link module:ol/coordinate~Coordinate} and + * transforms it into a `{string}`. + * + * @typedef {function((Coordinate|undefined)): string} CoordinateFormat + * @api + */ + + +/** + * Add `delta` to `coordinate`. `coordinate` is modified in place and returned + * by the function. + * + * Example: + * + * import {add} from 'ol/coordinate'; + * + * var coord = [7.85, 47.983333]; + * add(coord, [-2, 4]); + * // coord is now [5.85, 51.983333] + * + * @param {Coordinate} coordinate Coordinate. + * @param {Coordinate} delta Delta. + * @return {Coordinate} The input coordinate adjusted by + * the given delta. + * @api + */ +function add(coordinate, delta) { + coordinate[0] += delta[0]; + coordinate[1] += delta[1]; + return coordinate; +} + + +/** + * Calculates the point closest to the passed coordinate on the passed circle. + * + * @param {Coordinate} coordinate The coordinate. + * @param {import("./geom/Circle.js").default} circle The circle. + * @return {Coordinate} Closest point on the circumference. + */ +function closestOnCircle(coordinate, circle) { + var r = circle.getRadius(); + var center = circle.getCenter(); + var x0 = center[0]; + var y0 = center[1]; + var x1 = coordinate[0]; + var y1 = coordinate[1]; + + var dx = x1 - x0; + var dy = y1 - y0; + if (dx === 0 && dy === 0) { + dx = 1; + } + var d = Math.sqrt(dx * dx + dy * dy); + + var x = x0 + r * dx / d; + var y = y0 + r * dy / d; + + return [x, y]; +} + + +/** + * Calculates the point closest to the passed coordinate on the passed segment. + * This is the foot of the perpendicular of the coordinate to the segment when + * the foot is on the segment, or the closest segment coordinate when the foot + * is outside the segment. + * + * @param {Coordinate} coordinate The coordinate. + * @param {Array} segment The two coordinates + * of the segment. + * @return {Coordinate} The foot of the perpendicular of + * the coordinate to the segment. + */ +function closestOnSegment(coordinate, segment) { + var x0 = coordinate[0]; + var y0 = coordinate[1]; + var start = segment[0]; + var end = segment[1]; + var x1 = start[0]; + var y1 = start[1]; + var x2 = end[0]; + var y2 = end[1]; + var dx = x2 - x1; + var dy = y2 - y1; + var along = (dx === 0 && dy === 0) ? 0 : + ((dx * (x0 - x1)) + (dy * (y0 - y1))) / ((dx * dx + dy * dy) || 0); + var x, y; + if (along <= 0) { + x = x1; + y = y1; + } else if (along >= 1) { + x = x2; + y = y2; + } else { + x = x1 + along * dx; + y = y1 + along * dy; + } + return [x, y]; +} + + +/** + * Returns a {@link module:ol/coordinate~CoordinateFormat} function that can be + * used to format + * a {Coordinate} to a string. + * + * Example without specifying the fractional digits: + * + * import {createStringXY} from 'ol/coordinate'; + * + * var coord = [7.85, 47.983333]; + * var stringifyFunc = createStringXY(); + * var out = stringifyFunc(coord); + * // out is now '8, 48' + * + * Example with explicitly specifying 2 fractional digits: + * + * import {createStringXY} from 'ol/coordinate'; + * + * var coord = [7.85, 47.983333]; + * var stringifyFunc = createStringXY(2); + * var out = stringifyFunc(coord); + * // out is now '7.85, 47.98' + * + * @param {number=} opt_fractionDigits The number of digits to include + * after the decimal point. Default is `0`. + * @return {CoordinateFormat} Coordinate format. + * @api + */ +function createStringXY(opt_fractionDigits) { + return ( + /** + * @param {Coordinate} coordinate Coordinate. + * @return {string} String XY. + */ + function(coordinate) { + return toStringXY(coordinate, opt_fractionDigits); + } + ); +} + + +/** + * @param {string} hemispheres Hemispheres. + * @param {number} degrees Degrees. + * @param {number=} opt_fractionDigits The number of digits to include + * after the decimal point. Default is `0`. + * @return {string} String. + */ +function degreesToStringHDMS(hemispheres, degrees, opt_fractionDigits) { + var normalizedDegrees = (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.modulo)(degrees + 180, 360) - 180; + var x = Math.abs(3600 * normalizedDegrees); + var dflPrecision = opt_fractionDigits || 0; + var precision = Math.pow(10, dflPrecision); + + var deg = Math.floor(x / 3600); + var min = Math.floor((x - deg * 3600) / 60); + var sec = x - (deg * 3600) - (min * 60); + sec = Math.ceil(sec * precision) / precision; + + if (sec >= 60) { + sec = 0; + min += 1; + } + + if (min >= 60) { + min = 0; + deg += 1; + } + + return deg + '\u00b0 ' + (0,_string_js__WEBPACK_IMPORTED_MODULE_1__.padNumber)(min, 2) + '\u2032 ' + + (0,_string_js__WEBPACK_IMPORTED_MODULE_1__.padNumber)(sec, 2, dflPrecision) + '\u2033' + + (normalizedDegrees == 0 ? '' : ' ' + hemispheres.charAt(normalizedDegrees < 0 ? 1 : 0)); +} + + +/** + * Transforms the given {@link module:ol/coordinate~Coordinate} to a string + * using the given string template. The strings `{x}` and `{y}` in the template + * will be replaced with the first and second coordinate values respectively. + * + * Example without specifying the fractional digits: + * + * import {format} from 'ol/coordinate'; + * + * var coord = [7.85, 47.983333]; + * var template = 'Coordinate is ({x}|{y}).'; + * var out = format(coord, template); + * // out is now 'Coordinate is (8|48).' + * + * Example explicitly specifying the fractional digits: + * + * import {format} from 'ol/coordinate'; + * + * var coord = [7.85, 47.983333]; + * var template = 'Coordinate is ({x}|{y}).'; + * var out = format(coord, template, 2); + * // out is now 'Coordinate is (7.85|47.98).' + * + * @param {Coordinate} coordinate Coordinate. + * @param {string} template A template string with `{x}` and `{y}` placeholders + * that will be replaced by first and second coordinate values. + * @param {number=} opt_fractionDigits The number of digits to include + * after the decimal point. Default is `0`. + * @return {string} Formatted coordinate. + * @api + */ +function format(coordinate, template, opt_fractionDigits) { + if (coordinate) { + return template + .replace('{x}', coordinate[0].toFixed(opt_fractionDigits)) + .replace('{y}', coordinate[1].toFixed(opt_fractionDigits)); + } else { + return ''; + } +} + + +/** + * @param {Coordinate} coordinate1 First coordinate. + * @param {Coordinate} coordinate2 Second coordinate. + * @return {boolean} The two coordinates are equal. + */ +function equals(coordinate1, coordinate2) { + var equals = true; + for (var i = coordinate1.length - 1; i >= 0; --i) { + if (coordinate1[i] != coordinate2[i]) { + equals = false; + break; + } + } + return equals; +} + + +/** + * Rotate `coordinate` by `angle`. `coordinate` is modified in place and + * returned by the function. + * + * Example: + * + * import {rotate} from 'ol/coordinate'; + * + * var coord = [7.85, 47.983333]; + * var rotateRadians = Math.PI / 2; // 90 degrees + * rotate(coord, rotateRadians); + * // coord is now [-47.983333, 7.85] + * + * @param {Coordinate} coordinate Coordinate. + * @param {number} angle Angle in radian. + * @return {Coordinate} Coordinate. + * @api + */ +function rotate(coordinate, angle) { + var cosAngle = Math.cos(angle); + var sinAngle = Math.sin(angle); + var x = coordinate[0] * cosAngle - coordinate[1] * sinAngle; + var y = coordinate[1] * cosAngle + coordinate[0] * sinAngle; + coordinate[0] = x; + coordinate[1] = y; + return coordinate; +} + + +/** + * Scale `coordinate` by `scale`. `coordinate` is modified in place and returned + * by the function. + * + * Example: + * + * import {scale as scaleCoordinate} from 'ol/coordinate'; + * + * var coord = [7.85, 47.983333]; + * var scale = 1.2; + * scaleCoordinate(coord, scale); + * // coord is now [9.42, 57.5799996] + * + * @param {Coordinate} coordinate Coordinate. + * @param {number} scale Scale factor. + * @return {Coordinate} Coordinate. + */ +function scale(coordinate, scale) { + coordinate[0] *= scale; + coordinate[1] *= scale; + return coordinate; +} + + +/** + * @param {Coordinate} coord1 First coordinate. + * @param {Coordinate} coord2 Second coordinate. + * @return {number} Squared distance between coord1 and coord2. + */ +function squaredDistance(coord1, coord2) { + var dx = coord1[0] - coord2[0]; + var dy = coord1[1] - coord2[1]; + return dx * dx + dy * dy; +} + + +/** + * @param {Coordinate} coord1 First coordinate. + * @param {Coordinate} coord2 Second coordinate. + * @return {number} Distance between coord1 and coord2. + */ +function distance(coord1, coord2) { + return Math.sqrt(squaredDistance(coord1, coord2)); +} + + +/** + * Calculate the squared distance from a coordinate to a line segment. + * + * @param {Coordinate} coordinate Coordinate of the point. + * @param {Array} segment Line segment (2 + * coordinates). + * @return {number} Squared distance from the point to the line segment. + */ +function squaredDistanceToSegment(coordinate, segment) { + return squaredDistance(coordinate, + closestOnSegment(coordinate, segment)); +} + + +/** + * Format a geographic coordinate with the hemisphere, degrees, minutes, and + * seconds. + * + * Example without specifying fractional digits: + * + * import {toStringHDMS} from 'ol/coordinate'; + * + * var coord = [7.85, 47.983333]; + * var out = toStringHDMS(coord); + * // out is now '47° 58′ 60″ N 7° 50′ 60″ E' + * + * Example explicitly specifying 1 fractional digit: + * + * import {toStringHDMS} from 'ol/coordinate'; + * + * var coord = [7.85, 47.983333]; + * var out = toStringHDMS(coord, 1); + * // out is now '47° 58′ 60.0″ N 7° 50′ 60.0″ E' + * + * @param {Coordinate} coordinate Coordinate. + * @param {number=} opt_fractionDigits The number of digits to include + * after the decimal point. Default is `0`. + * @return {string} Hemisphere, degrees, minutes and seconds. + * @api + */ +function toStringHDMS(coordinate, opt_fractionDigits) { + if (coordinate) { + return degreesToStringHDMS('NS', coordinate[1], opt_fractionDigits) + ' ' + + degreesToStringHDMS('EW', coordinate[0], opt_fractionDigits); + } else { + return ''; + } +} + + +/** + * Format a coordinate as a comma delimited string. + * + * Example without specifying fractional digits: + * + * import {toStringXY} from 'ol/coordinate'; + * + * var coord = [7.85, 47.983333]; + * var out = toStringXY(coord); + * // out is now '8, 48' + * + * Example explicitly specifying 1 fractional digit: + * + * import {toStringXY} from 'ol/coordinate'; + * + * var coord = [7.85, 47.983333]; + * var out = toStringXY(coord, 1); + * // out is now '7.8, 48.0' + * + * @param {Coordinate} coordinate Coordinate. + * @param {number=} opt_fractionDigits The number of digits to include + * after the decimal point. Default is `0`. + * @return {string} XY. + * @api + */ +function toStringXY(coordinate, opt_fractionDigits) { + return format(coordinate, '{x}, {y}', opt_fractionDigits); +} + +//# sourceMappingURL=coordinate.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/css.js": +/*!****************************************!*\ + !*** ./node_modules/@biigle/ol/css.js ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "CLASS_HIDDEN": () => (/* binding */ CLASS_HIDDEN), +/* harmony export */ "CLASS_SELECTABLE": () => (/* binding */ CLASS_SELECTABLE), +/* harmony export */ "CLASS_UNSELECTABLE": () => (/* binding */ CLASS_UNSELECTABLE), +/* harmony export */ "CLASS_UNSUPPORTED": () => (/* binding */ CLASS_UNSUPPORTED), +/* harmony export */ "CLASS_CONTROL": () => (/* binding */ CLASS_CONTROL), +/* harmony export */ "CLASS_COLLAPSED": () => (/* binding */ CLASS_COLLAPSED), +/* harmony export */ "getFontFamilies": () => (/* binding */ getFontFamilies) +/* harmony export */ }); +/** + * @module ol/css + */ + + +/** + * The CSS class for hidden feature. + * + * @const + * @type {string} + */ +var CLASS_HIDDEN = 'ol-hidden'; + + +/** + * The CSS class that we'll give the DOM elements to have them selectable. + * + * @const + * @type {string} + */ +var CLASS_SELECTABLE = 'ol-selectable'; + + +/** + * The CSS class that we'll give the DOM elements to have them unselectable. + * + * @const + * @type {string} + */ +var CLASS_UNSELECTABLE = 'ol-unselectable'; + + +/** + * The CSS class for unsupported feature. + * + * @const + * @type {string} + */ +var CLASS_UNSUPPORTED = 'ol-unsupported'; + + +/** + * The CSS class for controls. + * + * @const + * @type {string} + */ +var CLASS_CONTROL = 'ol-control'; + + +/** + * The CSS class that we'll give the DOM elements that are collapsed, i.e. + * to those elements which usually can be expanded. + * + * @const + * @type {string} + */ +var CLASS_COLLAPSED = 'ol-collapsed'; + + +/** + * Get the list of font families from a font spec. Note that this doesn't work + * for font families that have commas in them. + * @param {string} The CSS font property. + * @return {Object} The font families (or null if the input spec is invalid). + */ +var getFontFamilies = (function() { + var style; + var cache = {}; + return function(font) { + if (!style) { + style = document.createElement('div').style; + } + if (!(font in cache)) { + style.font = font; + var family = style.fontFamily; + style.font = ''; + if (!family) { + return null; + } + cache[font] = family.split(/,\s?/); + } + return cache[font]; + }; +})(); + +//# sourceMappingURL=css.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/dom.js": +/*!****************************************!*\ + !*** ./node_modules/@biigle/ol/dom.js ***! + \****************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "createCanvasContext2D": () => (/* binding */ createCanvasContext2D), +/* harmony export */ "outerWidth": () => (/* binding */ outerWidth), +/* harmony export */ "outerHeight": () => (/* binding */ outerHeight), +/* harmony export */ "replaceNode": () => (/* binding */ replaceNode), +/* harmony export */ "removeNode": () => (/* binding */ removeNode), +/* harmony export */ "removeChildren": () => (/* binding */ removeChildren) +/* harmony export */ }); +/** + * @module ol/dom + */ + + +/** + * Create an html canvas element and returns its 2d context. + * @param {number=} opt_width Canvas width. + * @param {number=} opt_height Canvas height. + * @return {CanvasRenderingContext2D} The context. + */ +function createCanvasContext2D(opt_width, opt_height) { + var canvas = /** @type {HTMLCanvasElement} */ (document.createElement('canvas')); + if (opt_width) { + canvas.width = opt_width; + } + if (opt_height) { + canvas.height = opt_height; + } + return /** @type {CanvasRenderingContext2D} */ (canvas.getContext('2d')); +} + + +/** + * Get the current computed width for the given element including margin, + * padding and border. + * Equivalent to jQuery's `$(el).outerWidth(true)`. + * @param {!HTMLElement} element Element. + * @return {number} The width. + */ +function outerWidth(element) { + var width = element.offsetWidth; + var style = getComputedStyle(element); + width += parseInt(style.marginLeft, 10) + parseInt(style.marginRight, 10); + + return width; +} + + +/** + * Get the current computed height for the given element including margin, + * padding and border. + * Equivalent to jQuery's `$(el).outerHeight(true)`. + * @param {!HTMLElement} element Element. + * @return {number} The height. + */ +function outerHeight(element) { + var height = element.offsetHeight; + var style = getComputedStyle(element); + height += parseInt(style.marginTop, 10) + parseInt(style.marginBottom, 10); + + return height; +} + +/** + * @param {Node} newNode Node to replace old node + * @param {Node} oldNode The node to be replaced + */ +function replaceNode(newNode, oldNode) { + var parent = oldNode.parentNode; + if (parent) { + parent.replaceChild(newNode, oldNode); + } +} + +/** + * @param {Node} node The node to remove. + * @returns {Node} The node that was removed or null. + */ +function removeNode(node) { + return node && node.parentNode ? node.parentNode.removeChild(node) : null; +} + +/** + * @param {Node} node The node to remove the children from. + */ +function removeChildren(node) { + while (node.lastChild) { + node.removeChild(node.lastChild); + } +} + +//# sourceMappingURL=dom.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/easing.js": +/*!*******************************************!*\ + !*** ./node_modules/@biigle/ol/easing.js ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "easeIn": () => (/* binding */ easeIn), +/* harmony export */ "easeOut": () => (/* binding */ easeOut), +/* harmony export */ "inAndOut": () => (/* binding */ inAndOut), +/* harmony export */ "linear": () => (/* binding */ linear), +/* harmony export */ "upAndDown": () => (/* binding */ upAndDown) +/* harmony export */ }); +/** + * @module ol/easing + */ + + +/** + * Start slow and speed up. + * @param {number} t Input between 0 and 1. + * @return {number} Output between 0 and 1. + * @api + */ +function easeIn(t) { + return Math.pow(t, 3); +} + + +/** + * Start fast and slow down. + * @param {number} t Input between 0 and 1. + * @return {number} Output between 0 and 1. + * @api + */ +function easeOut(t) { + return 1 - easeIn(1 - t); +} + + +/** + * Start slow, speed up, and then slow down again. + * @param {number} t Input between 0 and 1. + * @return {number} Output between 0 and 1. + * @api + */ +function inAndOut(t) { + return 3 * t * t - 2 * t * t * t; +} + + +/** + * Maintain a constant speed over time. + * @param {number} t Input between 0 and 1. + * @return {number} Output between 0 and 1. + * @api + */ +function linear(t) { + return t; +} + + +/** + * Start slow, speed up, and at the very end slow down again. This has the + * same general behavior as {@link module:ol/easing~inAndOut}, but the final + * slowdown is delayed. + * @param {number} t Input between 0 and 1. + * @return {number} Output between 0 and 1. + * @api + */ +function upAndDown(t) { + if (t < 0.5) { + return inAndOut(2 * t); + } else { + return 1 - inAndOut(2 * (t - 0.5)); + } +} + +//# sourceMappingURL=easing.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/events.js": +/*!*******************************************!*\ + !*** ./node_modules/@biigle/ol/events.js ***! + \*******************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "bindListener": () => (/* binding */ bindListener), +/* harmony export */ "findListener": () => (/* binding */ findListener), +/* harmony export */ "getListeners": () => (/* binding */ getListeners), +/* harmony export */ "listen": () => (/* binding */ listen), +/* harmony export */ "listenOnce": () => (/* binding */ listenOnce), +/* harmony export */ "unlisten": () => (/* binding */ unlisten), +/* harmony export */ "unlistenByKey": () => (/* binding */ unlistenByKey), +/* harmony export */ "unlistenAll": () => (/* binding */ unlistenAll) +/* harmony export */ }); +/* harmony import */ var _obj_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./obj.js */ "./node_modules/@biigle/ol/obj.js"); +/** + * @module ol/events + */ + + + +/** + * Key to use with {@link module:ol/Observable~Observable#unByKey}. + * @typedef {Object} EventsKey + * @property {Object} [bindTo] + * @property {ListenerFunction} [boundListener] + * @property {boolean} callOnce + * @property {number} [deleteIndex] + * @property {ListenerFunction} listener + * @property {import("./events/Target.js").EventTargetLike} target + * @property {string} type + * @api + */ + + +/** + * Listener function. This function is called with an event object as argument. + * When the function returns `false`, event propagation will stop. + * + * @typedef {function((Event|import("./events/Event.js").default)): (void|boolean)} ListenerFunction + * @api + */ + + +/** + * @param {EventsKey} listenerObj Listener object. + * @return {ListenerFunction} Bound listener. + */ +function bindListener(listenerObj) { + var boundListener = function(evt) { + var listener = listenerObj.listener; + var bindTo = listenerObj.bindTo || listenerObj.target; + if (listenerObj.callOnce) { + unlistenByKey(listenerObj); + } + return listener.call(bindTo, evt); + }; + listenerObj.boundListener = boundListener; + return boundListener; +} + + +/** + * Finds the matching {@link module:ol/events~EventsKey} in the given listener + * array. + * + * @param {!Array} listeners Array of listeners. + * @param {!Function} listener The listener function. + * @param {Object=} opt_this The `this` value inside the listener. + * @param {boolean=} opt_setDeleteIndex Set the deleteIndex on the matching + * listener, for {@link module:ol/events~unlistenByKey}. + * @return {EventsKey|undefined} The matching listener object. + */ +function findListener(listeners, listener, opt_this, opt_setDeleteIndex) { + var listenerObj; + for (var i = 0, ii = listeners.length; i < ii; ++i) { + listenerObj = listeners[i]; + if (listenerObj.listener === listener && + listenerObj.bindTo === opt_this) { + if (opt_setDeleteIndex) { + listenerObj.deleteIndex = i; + } + return listenerObj; + } + } + return undefined; +} + + +/** + * @param {import("./events/Target.js").EventTargetLike} target Target. + * @param {string} type Type. + * @return {Array|undefined} Listeners. + */ +function getListeners(target, type) { + var listenerMap = getListenerMap(target); + return listenerMap ? listenerMap[type] : undefined; +} + + +/** + * Get the lookup of listeners. + * @param {Object} target Target. + * @param {boolean=} opt_create If a map should be created if it doesn't exist. + * @return {!Object>} Map of + * listeners by event type. + */ +function getListenerMap(target, opt_create) { + var listenerMap = target.ol_lm; + if (!listenerMap && opt_create) { + listenerMap = target.ol_lm = {}; + } + return listenerMap; +} + + +/** + * Remove the listener map from a target. + * @param {Object} target Target. + */ +function removeListenerMap(target) { + delete target.ol_lm; +} + + +/** + * Clean up all listener objects of the given type. All properties on the + * listener objects will be removed, and if no listeners remain in the listener + * map, it will be removed from the target. + * @param {import("./events/Target.js").EventTargetLike} target Target. + * @param {string} type Type. + */ +function removeListeners(target, type) { + var listeners = getListeners(target, type); + if (listeners) { + for (var i = 0, ii = listeners.length; i < ii; ++i) { + /** @type {import("./events/Target.js").default} */ (target). + removeEventListener(type, listeners[i].boundListener); + (0,_obj_js__WEBPACK_IMPORTED_MODULE_0__.clear)(listeners[i]); + } + listeners.length = 0; + var listenerMap = getListenerMap(target); + if (listenerMap) { + delete listenerMap[type]; + if (Object.keys(listenerMap).length === 0) { + removeListenerMap(target); + } + } + } +} + + +/** + * Registers an event listener on an event target. Inspired by + * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html + * + * This function efficiently binds a `listener` to a `this` object, and returns + * a key for use with {@link module:ol/events~unlistenByKey}. + * + * @param {import("./events/Target.js").EventTargetLike} target Event target. + * @param {string} type Event type. + * @param {ListenerFunction} listener Listener. + * @param {Object=} opt_this Object referenced by the `this` keyword in the + * listener. Default is the `target`. + * @param {boolean=} opt_once If true, add the listener as one-off listener. + * @return {EventsKey} Unique key for the listener. + */ +function listen(target, type, listener, opt_this, opt_once) { + var listenerMap = getListenerMap(target, true); + var listeners = listenerMap[type]; + if (!listeners) { + listeners = listenerMap[type] = []; + } + var listenerObj = findListener(listeners, listener, opt_this, false); + if (listenerObj) { + if (!opt_once) { + // Turn one-off listener into a permanent one. + listenerObj.callOnce = false; + } + } else { + listenerObj = /** @type {EventsKey} */ ({ + bindTo: opt_this, + callOnce: !!opt_once, + listener: listener, + target: target, + type: type + }); + /** @type {import("./events/Target.js").default} */ (target). + addEventListener(type, bindListener(listenerObj)); + listeners.push(listenerObj); + } + + return listenerObj; +} + + +/** + * Registers a one-off event listener on an event target. Inspired by + * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html + * + * This function efficiently binds a `listener` as self-unregistering listener + * to a `this` object, and returns a key for use with + * {@link module:ol/events~unlistenByKey} in case the listener needs to be + * unregistered before it is called. + * + * When {@link module:ol/events~listen} is called with the same arguments after this + * function, the self-unregistering listener will be turned into a permanent + * listener. + * + * @param {import("./events/Target.js").EventTargetLike} target Event target. + * @param {string} type Event type. + * @param {ListenerFunction} listener Listener. + * @param {Object=} opt_this Object referenced by the `this` keyword in the + * listener. Default is the `target`. + * @return {EventsKey} Key for unlistenByKey. + */ +function listenOnce(target, type, listener, opt_this) { + return listen(target, type, listener, opt_this, true); +} + + +/** + * Unregisters an event listener on an event target. Inspired by + * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html + * + * To return a listener, this function needs to be called with the exact same + * arguments that were used for a previous {@link module:ol/events~listen} call. + * + * @param {import("./events/Target.js").EventTargetLike} target Event target. + * @param {string} type Event type. + * @param {ListenerFunction} listener Listener. + * @param {Object=} opt_this Object referenced by the `this` keyword in the + * listener. Default is the `target`. + */ +function unlisten(target, type, listener, opt_this) { + var listeners = getListeners(target, type); + if (listeners) { + var listenerObj = findListener(listeners, listener, opt_this, true); + if (listenerObj) { + unlistenByKey(listenerObj); + } + } +} + + +/** + * Unregisters event listeners on an event target. Inspired by + * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html + * + * The argument passed to this function is the key returned from + * {@link module:ol/events~listen} or {@link module:ol/events~listenOnce}. + * + * @param {EventsKey} key The key. + */ +function unlistenByKey(key) { + if (key && key.target) { + /** @type {import("./events/Target.js").default} */ (key.target). + removeEventListener(key.type, key.boundListener); + var listeners = getListeners(key.target, key.type); + if (listeners) { + var i = 'deleteIndex' in key ? key.deleteIndex : listeners.indexOf(key); + if (i !== -1) { + listeners.splice(i, 1); + } + if (listeners.length === 0) { + removeListeners(key.target, key.type); + } + } + (0,_obj_js__WEBPACK_IMPORTED_MODULE_0__.clear)(key); + } +} + + +/** + * Unregisters all event listeners on an event target. Inspired by + * https://google.github.io/closure-library/api/source/closure/goog/events/events.js.src.html + * + * @param {import("./events/Target.js").EventTargetLike} target Target. + */ +function unlistenAll(target) { + var listenerMap = getListenerMap(target); + if (listenerMap) { + for (var type in listenerMap) { + removeListeners(target, type); + } + } +} + +//# sourceMappingURL=events.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/events/Event.js": +/*!*************************************************!*\ + !*** ./node_modules/@biigle/ol/events/Event.js ***! + \*************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "stopPropagation": () => (/* binding */ stopPropagation), +/* harmony export */ "preventDefault": () => (/* binding */ preventDefault), +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * @module ol/events/Event + */ + +/** + * @classdesc + * Stripped down implementation of the W3C DOM Level 2 Event interface. + * See https://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-interface. + * + * This implementation only provides `type` and `target` properties, and + * `stopPropagation` and `preventDefault` methods. It is meant as base class + * for higher level events defined in the library, and works with + * {@link module:ol/events/Target~Target}. + */ +var Event = function Event(type) { + + /** + * @type {boolean} + */ + this.propagationStopped; + + /** + * The event type. + * @type {string} + * @api + */ + this.type = type; + + /** + * The event target. + * @type {Object} + * @api + */ + this.target = null; +}; + +/** + * Stop event propagation. + * @api + */ +Event.prototype.preventDefault = function preventDefault () { + this.propagationStopped = true; +}; + +/** + * Stop event propagation. + * @api + */ +Event.prototype.stopPropagation = function stopPropagation () { + this.propagationStopped = true; +}; + + +/** + * @param {Event|import("./Event.js").default} evt Event + */ +function stopPropagation(evt) { + evt.stopPropagation(); +} + + +/** + * @param {Event|import("./Event.js").default} evt Event + */ +function preventDefault(evt) { + evt.preventDefault(); +} + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Event); + +//# sourceMappingURL=Event.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/events/EventType.js": +/*!*****************************************************!*\ + !*** ./node_modules/@biigle/ol/events/EventType.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/** + * @module ol/events/EventType + */ + +/** + * @enum {string} + * @const + */ +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({ + /** + * Generic change event. Triggered when the revision counter is increased. + * @event module:ol/events/Event~Event#change + * @api + */ + CHANGE: 'change', + + CLEAR: 'clear', + CONTEXTMENU: 'contextmenu', + CLICK: 'click', + DBLCLICK: 'dblclick', + DRAGENTER: 'dragenter', + DRAGOVER: 'dragover', + DROP: 'drop', + ERROR: 'error', + KEYDOWN: 'keydown', + KEYPRESS: 'keypress', + LOAD: 'load', + MOUSEDOWN: 'mousedown', + MOUSEMOVE: 'mousemove', + MOUSEOUT: 'mouseout', + MOUSEUP: 'mouseup', + MOUSEWHEEL: 'mousewheel', + MSPOINTERDOWN: 'MSPointerDown', + RESIZE: 'resize', + TOUCHSTART: 'touchstart', + TOUCHMOVE: 'touchmove', + TOUCHEND: 'touchend', + WHEEL: 'wheel' +}); + +//# sourceMappingURL=EventType.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/events/Target.js": +/*!**************************************************!*\ + !*** ./node_modules/@biigle/ol/events/Target.js ***! + \**************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) +/* harmony export */ }); +/* harmony import */ var _Disposable_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../Disposable.js */ "./node_modules/@biigle/ol/Disposable.js"); +/* harmony import */ var _events_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../events.js */ "./node_modules/@biigle/ol/events.js"); +/* harmony import */ var _functions_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../functions.js */ "./node_modules/@biigle/ol/functions.js"); +/* harmony import */ var _Event_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Event.js */ "./node_modules/@biigle/ol/events/Event.js"); +/** + * @module ol/events/Target + */ + + + + + + +/** + * @typedef {EventTarget|Target} EventTargetLike + */ + + +/** + * @classdesc + * A simplified implementation of the W3C DOM Level 2 EventTarget interface. + * See https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget. + * + * There are two important simplifications compared to the specification: + * + * 1. The handling of `useCapture` in `addEventListener` and + * `removeEventListener`. There is no real capture model. + * 2. The handling of `stopPropagation` and `preventDefault` on `dispatchEvent`. + * There is no event target hierarchy. When a listener calls + * `stopPropagation` or `preventDefault` on an event object, it means that no + * more listeners after this one will be called. Same as when the listener + * returns false. + */ +var Target = /*@__PURE__*/(function (Disposable) { + function Target() { + + Disposable.call(this); + + /** + * @private + * @type {!Object} + */ + this.pendingRemovals_ = {}; + + /** + * @private + * @type {!Object} + */ + this.dispatching_ = {}; + + /** + * @private + * @type {!Object>} + */ + this.listeners_ = {}; + + } + + if ( Disposable ) Target.__proto__ = Disposable; + Target.prototype = Object.create( Disposable && Disposable.prototype ); + Target.prototype.constructor = Target; + + /** + * @param {string} type Type. + * @param {import("../events.js").ListenerFunction} listener Listener. + */ + Target.prototype.addEventListener = function addEventListener (type, listener) { + var listeners = this.listeners_[type]; + if (!listeners) { + listeners = this.listeners_[type] = []; + } + if (listeners.indexOf(listener) === -1) { + listeners.push(listener); + } + }; + + /** + * Dispatches an event and calls all listeners listening for events + * of this type. The event parameter can either be a string or an + * Object with a `type` property. + * + * @param {{type: string, + * target: (EventTargetLike|undefined), + * propagationStopped: (boolean|undefined)}| + * import("./Event.js").default|string} event Event object. + * @return {boolean|undefined} `false` if anyone called preventDefault on the + * event object or if any of the listeners returned false. + * @api + */ + Target.prototype.dispatchEvent = function dispatchEvent (event) { + var evt = typeof event === 'string' ? new _Event_js__WEBPACK_IMPORTED_MODULE_0__["default"](event) : event; + var type = evt.type; + evt.target = this; + var listeners = this.listeners_[type]; + var propagate; + if (listeners) { + if (!(type in this.dispatching_)) { + this.dispatching_[type] = 0; + this.pendingRemovals_[type] = 0; + } + ++this.dispatching_[type]; + for (var i = 0, ii = listeners.length; i < ii; ++i) { + if (listeners[i].call(this, evt) === false || evt.propagationStopped) { + propagate = false; + break; + } + } + --this.dispatching_[type]; + if (this.dispatching_[type] === 0) { + var pendingRemovals = this.pendingRemovals_[type]; + delete this.pendingRemovals_[type]; + while (pendingRemovals--) { + this.removeEventListener(type, _functions_js__WEBPACK_IMPORTED_MODULE_1__.VOID); + } + delete this.dispatching_[type]; + } + return propagate; + } + }; + + /** + * @inheritDoc + */ + Target.prototype.disposeInternal = function disposeInternal () { + (0,_events_js__WEBPACK_IMPORTED_MODULE_2__.unlistenAll)(this); + }; + + /** + * Get the listeners for a specified event type. Listeners are returned in the + * order that they will be called in. + * + * @param {string} type Type. + * @return {Array} Listeners. + */ + Target.prototype.getListeners = function getListeners (type) { + return this.listeners_[type]; + }; + + /** + * @param {string=} opt_type Type. If not provided, + * `true` will be returned if this event target has any listeners. + * @return {boolean} Has listeners. + */ + Target.prototype.hasListener = function hasListener (opt_type) { + return opt_type ? + opt_type in this.listeners_ : + Object.keys(this.listeners_).length > 0; + }; + + /** + * @param {string} type Type. + * @param {import("../events.js").ListenerFunction} listener Listener. + */ + Target.prototype.removeEventListener = function removeEventListener (type, listener) { + var listeners = this.listeners_[type]; + if (listeners) { + var index = listeners.indexOf(listener); + if (type in this.pendingRemovals_) { + // make listener a no-op, and remove later in #dispatchEvent() + listeners[index] = _functions_js__WEBPACK_IMPORTED_MODULE_1__.VOID; + ++this.pendingRemovals_[type]; + } else { + listeners.splice(index, 1); + if (listeners.length === 0) { + delete this.listeners_[type]; + } + } + } + }; + + return Target; +}(_Disposable_js__WEBPACK_IMPORTED_MODULE_3__["default"])); + + +/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Target); + +//# sourceMappingURL=Target.js.map + +/***/ }), + +/***/ "./node_modules/@biigle/ol/events/condition.js": +/*!*****************************************************!*\ + !*** ./node_modules/@biigle/ol/events/condition.js ***! + \*****************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "altKeyOnly": () => (/* binding */ altKeyOnly), +/* harmony export */ "altShiftKeysOnly": () => (/* binding */ altShiftKeysOnly), +/* harmony export */ "focus": () => (/* binding */ focus), +/* harmony export */ "always": () => (/* binding */ always), +/* harmony export */ "click": () => (/* binding */ click), +/* harmony export */ "mouseActionButton": () => (/* binding */ mouseActionButton), +/* harmony export */ "never": () => (/* binding */ never), +/* harmony export */ "pointerMove": () => (/* binding */ pointerMove), +/* harmony export */ "singleClick": () => (/* binding */ singleClick), +/* harmony export */ "doubleClick": () => (/* binding */ doubleClick), +/* harmony export */ "noModifierKeys": () => (/* binding */ noModifierKeys), +/* harmony export */ "platformModifierKeyOnly": () => (/* binding */ platformModifierKeyOnly), +/* harmony export */ "shiftKeyOnly": () => (/* binding */ shiftKeyOnly), +/* harmony export */ "targetNotEditable": () => (/* binding */ targetNotEditable), +/* harmony export */ "mouseOnly": () => (/* binding */ mouseOnly), +/* harmony export */ "primaryAction": () => (/* binding */ primaryAction) +/* harmony export */ }); +/* harmony import */ var _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../MapBrowserEventType.js */ "./node_modules/@biigle/ol/MapBrowserEventType.js"); +/* harmony import */ var _asserts_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../asserts.js */ "./node_modules/@biigle/ol/asserts.js"); +/* harmony import */ var _functions_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../functions.js */ "./node_modules/@biigle/ol/functions.js"); +/* harmony import */ var _has_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../has.js */ "./node_modules/@biigle/ol/has.js"); +/** + * @module ol/events/condition + */ + + + + + + +/** + * A function that takes an {@link module:ol/MapBrowserEvent} and returns a + * `{boolean}`. If the condition is met, true should be returned. + * + * @typedef {function(this: ?, import("../MapBrowserEvent.js").default): boolean} Condition + */ + + +/** + * Return `true` if only the alt-key is pressed, `false` otherwise (e.g. when + * additionally the shift-key is pressed). + * + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. + * @return {boolean} True if only the alt key is pressed. + * @api + */ +var altKeyOnly = function(mapBrowserEvent) { + var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent); + return ( + originalEvent.altKey && + !(originalEvent.metaKey || originalEvent.ctrlKey) && + !originalEvent.shiftKey); +}; + + +/** + * Return `true` if only the alt-key and shift-key is pressed, `false` otherwise + * (e.g. when additionally the platform-modifier-key is pressed). + * + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. + * @return {boolean} True if only the alt and shift keys are pressed. + * @api + */ +var altShiftKeysOnly = function(mapBrowserEvent) { + var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent); + return ( + originalEvent.altKey && + !(originalEvent.metaKey || originalEvent.ctrlKey) && + originalEvent.shiftKey); +}; + + +/** + * Return `true` if the map has the focus. This condition requires a map target + * element with a `tabindex` attribute, e.g. `
    `. + * + * @param {import("../MapBrowserEvent.js").default} event Map browser event. + * @return {boolean} The map has the focus. + * @api + */ +var focus = function(event) { + return event.target.getTargetElement() === document.activeElement; +}; + + +/** + * Return always true. + * + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. + * @return {boolean} True. + * @api + */ +var always = _functions_js__WEBPACK_IMPORTED_MODULE_0__.TRUE; + + +/** + * Return `true` if the event is a `click` event, `false` otherwise. + * + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. + * @return {boolean} True if the event is a map `click` event. + * @api + */ +var click = function(mapBrowserEvent) { + return mapBrowserEvent.type == _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_1__["default"].CLICK; +}; + + +/** + * Return `true` if the event has an "action"-producing mouse button. + * + * By definition, this includes left-click on windows/linux, and left-click + * without the ctrl key on Macs. + * + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. + * @return {boolean} The result. + */ +var mouseActionButton = function(mapBrowserEvent) { + var originalEvent = /** @type {MouseEvent} */ (mapBrowserEvent.originalEvent); + return originalEvent.button == 0 && + !(_has_js__WEBPACK_IMPORTED_MODULE_2__.WEBKIT && _has_js__WEBPACK_IMPORTED_MODULE_2__.MAC && originalEvent.ctrlKey); +}; + + +/** + * Return always false. + * + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. + * @return {boolean} False. + * @api + */ +var never = _functions_js__WEBPACK_IMPORTED_MODULE_0__.FALSE; + + +/** + * Return `true` if the browser event is a `pointermove` event, `false` + * otherwise. + * + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. + * @return {boolean} True if the browser event is a `pointermove` event. + * @api + */ +var pointerMove = function(mapBrowserEvent) { + return mapBrowserEvent.type == 'pointermove'; +}; + + +/** + * Return `true` if the event is a map `singleclick` event, `false` otherwise. + * + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. + * @return {boolean} True if the event is a map `singleclick` event. + * @api + */ +var singleClick = function(mapBrowserEvent) { + return mapBrowserEvent.type == _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_1__["default"].SINGLECLICK; +}; + + +/** + * Return `true` if the event is a map `dblclick` event, `false` otherwise. + * + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. + * @return {boolean} True if the event is a map `dblclick` event. + * @api + */ +var doubleClick = function(mapBrowserEvent) { + return mapBrowserEvent.type == _MapBrowserEventType_js__WEBPACK_IMPORTED_MODULE_1__["default"].DBLCLICK; +}; + + +/** + * Return `true` if no modifier key (alt-, shift- or platform-modifier-key) is + * pressed. + * + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. + * @return {boolean} True only if there no modifier keys are pressed. + * @api + */ +var noModifierKeys = function(mapBrowserEvent) { + var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent); + return ( + !originalEvent.altKey && + !(originalEvent.metaKey || originalEvent.ctrlKey) && + !originalEvent.shiftKey); +}; + + +/** + * Return `true` if only the platform-modifier-key (the meta-key on Mac, + * ctrl-key otherwise) is pressed, `false` otherwise (e.g. when additionally + * the shift-key is pressed). + * + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. + * @return {boolean} True if only the platform modifier key is pressed. + * @api + */ +var platformModifierKeyOnly = function(mapBrowserEvent) { + var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent); + return !originalEvent.altKey && + (_has_js__WEBPACK_IMPORTED_MODULE_2__.MAC ? originalEvent.metaKey : originalEvent.ctrlKey) && + !originalEvent.shiftKey; +}; + + +/** + * Return `true` if only the shift-key is pressed, `false` otherwise (e.g. when + * additionally the alt-key is pressed). + * + * @param {import("../MapBrowserEvent.js").default} mapBrowserEvent Map browser event. + * @return {boolean} True if only the shift key is pressed. + * @api + */ +var shiftKeyOnly = function(mapBrowserEvent) { + var originalEvent = /** @type {KeyboardEvent|MouseEvent|TouchEvent} */ (mapBrowserEvent.originalEvent); + return ( + !originalEvent.altKey && + !(originalEvent.metaKey || originalEvent.ctrlKey) && + originalEvent.shiftKey); +}; + + +/** + * Return `true` if the target element is not editable, i.e. not a ``-, + * `